diff --git a/sys/amd64/sys/sched.c b/sys/amd64/sys/sched.c index 2fffc4d..61d63f5 100644 --- a/sys/amd64/sys/sched.c +++ b/sys/amd64/sys/sched.c @@ -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"); diff --git a/sys/blk.c b/sys/blk.c index f46be1c..f28badc 100644 --- a/sys/blk.c +++ b/sys/blk.c @@ -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); diff --git a/sys/dev.c b/sys/dev.c index 731657c..cea92d6 100644 --- a/sys/dev.c +++ b/sys/dev.c @@ -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);