#include #include #include #include #include #include #include #include #include void create_block_device(const char *name, int major, int minor) { char path[256]; snprintf(path, sizeof(path), "/dev/%s", name); if (mknod(path, S_IFBLK | 0660, makedev(major, minor)) < 0) { perror("mknod"); } else { printf("Created %s (major %d, minor %d)\n", path, major, minor); } } void scan_and_create_devices() { DIR *dir = opendir("/sys/block/"); if (!dir) { // perror("opendir /sys/block"); return; } struct dirent *entry; while ((entry = readdir(dir))) { if (entry->d_name[0] == '.') continue; // Skip "." and ".." char sys_path[256]; snprintf(sys_path, sizeof(sys_path), "/sys/block/%s/dev", entry->d_name); FILE *f = fopen(sys_path, "r"); if (!f) continue; int major, minor; if (fscanf(f, "%d:%d", &major, &minor) == 2) { create_block_device(entry->d_name, major, minor); } fclose(f); } closedir(dir); } int main() { mount("devtmpfs", "/dev", "devtmpfs", 0, NULL); mkdir("/sys", 0755); mount("sysfs", "/sys", "sysfs", 0, NULL); mkdir("/dev", 0755); // create_block_device("sda", 8, 0); // create_block_device("sda1", 8, 1); // create_block_device("sda2", 8, 2); // create_block_device("sdb", 8, 16); // create_block_device("sdb1", 8, 17); // create_block_device("sdb2", 8, 18); while (1) { scan_and_create_devices(); sleep(10); // Check every 10 seconds } }