Better device node name generation

This commit is contained in:
Mark
2020-01-12 13:05:25 +02:00
parent fa399280fd
commit ca1a4d505b
3 changed files with 31 additions and 20 deletions
+6 -7
View File
@@ -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");
+5 -5
View File
@@ -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);
+20 -8
View File
@@ -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);