Better device node name generation
This commit is contained in:
@@ -85,13 +85,12 @@ void init_func(void *arg) {
|
||||
|
||||
// Find _ramblk0
|
||||
struct vnode *ramblk0;
|
||||
struct vnode *dev1;
|
||||
if ((res = dev_find(DEV_CLASS_BLOCK, "ram0", &ramblk0)) != 0) {
|
||||
panic("Failed to find root device\n");
|
||||
}
|
||||
if ((res = dev_find(DEV_CLASS_BLOCK, "dev1_0", &dev1)) != 0) {
|
||||
panic("Failed to find dev1: %s\n", kstrerror(res));
|
||||
}
|
||||
//if ((res = dev_find(DEV_CLASS_BLOCK, "dev1_0", &dev1)) != 0) {
|
||||
// panic("Failed to find dev1: %s\n", kstrerror(res));
|
||||
//}
|
||||
|
||||
// Mount /dev/ram0 using ustar on /
|
||||
if ((res = vfs_mount(&ioctx, "/", ramblk0->dev, "ustar", NULL)) != 0) {
|
||||
@@ -101,9 +100,9 @@ void init_func(void *arg) {
|
||||
// Mount /dev/dev1 using ext2 on /mnt
|
||||
// TODO: make some flag for block devices to indicate
|
||||
// they have already been mounted
|
||||
if ((res = vfs_mount(&ioctx, "/mnt", dev1->dev, "ext2", NULL)) != 0) {
|
||||
panic("Failed to mount some shit: %s\n", kstrerror(res));
|
||||
}
|
||||
//if ((res = vfs_mount(&ioctx, "/mnt", dev1->dev, "ext2", NULL)) != 0) {
|
||||
// panic("Failed to mount some shit: %s\n", kstrerror(res));
|
||||
//}
|
||||
|
||||
kinfo("Done\n");
|
||||
|
||||
|
||||
@@ -108,11 +108,11 @@ static int blk_add_part(struct vnode *of, int n, uint64_t lba, uint64_t size) {
|
||||
part->size = size;
|
||||
|
||||
char name[16];
|
||||
strcpy(name, of->name);
|
||||
strcat(name, "_");
|
||||
size_t l = strlen(name);
|
||||
name[l] = n + '0';
|
||||
name[l + 1] = 0;
|
||||
size_t len = strlen(of->name);
|
||||
_assert(len < sizeof(name) - 2);
|
||||
strncpy(name, of->name, len);
|
||||
name[len] = '1' + n;
|
||||
name[len + 1] = 0;
|
||||
|
||||
dev_add(DEV_CLASS_BLOCK, DEV_BLOCK_PART, dev, name);
|
||||
|
||||
|
||||
@@ -14,19 +14,31 @@
|
||||
|
||||
static struct vnode *devfs_root = NULL;
|
||||
|
||||
static char sdx_last = 'a';
|
||||
static char hdx_last = 'a';
|
||||
static uint64_t dev_count = 0;
|
||||
|
||||
static int dev_create_name(enum dev_class cls, int subcls, char *name) {
|
||||
if (cls == DEV_CLASS_BLOCK) {
|
||||
switch (subcls) {
|
||||
case DEV_BLOCK_SDx:
|
||||
strcpy(name, "sdx");
|
||||
name[2] = sdx_last++;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
int dev_add(enum dev_class cls, int subcls, void *dev, const char *name) {
|
||||
char node_name[5];
|
||||
char node_name[32];
|
||||
struct vnode *node;
|
||||
|
||||
if (!name) {
|
||||
// TODO: generate proper names for device nodes
|
||||
node_name[4] = 0;
|
||||
node_name[3] = '0' + ++dev_count;
|
||||
node_name[0] = 'd';
|
||||
node_name[1] = 'e';
|
||||
node_name[2] = 'v';
|
||||
if (dev_create_name(cls, subcls, node_name) != 0) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
name = node_name;
|
||||
}
|
||||
|
||||
@@ -48,7 +60,7 @@ int dev_add(enum dev_class cls, int subcls, void *dev, const char *name) {
|
||||
// TODO: some devices are located in subdirs
|
||||
vnode_attach(devfs_root, node);
|
||||
|
||||
kinfo("Created device node: %s\n", node->name);
|
||||
kdebug("Created device node: %s\n", node->name);
|
||||
|
||||
vnode_dump_tree(DEBUG_DEFAULT, devfs_root, 0);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user