kernel: mount root using commandline arguments

This commit is contained in:
Matheus
2023-07-26 00:17:04 -03:00
parent ddaf8b2efd
commit c4bdf020f4
2 changed files with 23 additions and 13 deletions
+23 -11
View File
@@ -29,6 +29,7 @@
#include <kernel/nvme.h>
#include <kernel/block.h>
#include <kernel/ext2.h>
#include <kernel/cmdline.h>
static cpu_t bsp_cpu;
@@ -45,6 +46,7 @@ void kernel_entry() {
arch_mmu_init();
vmm_init();
alloc_init();
cmdline_parse();
arch_acpi_init();
arch_apic_init();
cpu_initstate();
@@ -58,16 +60,6 @@ void kernel_entry() {
devfs_init();
pipefs_init();
ext2_init();
printf("mounting tmpfs on /\n");
__assert(vfs_mount(NULL, vfsroot, "/", "tmpfs", NULL) == 0);
initrd_unpack();
vattr_t attr = {0};
attr.mode = 0644;
__assert(vfs_create(vfsroot, "/dev", &attr, V_TYPE_DIR, NULL) == 0);
printf("mounting devfs on /dev\n");
__assert(vfs_mount(NULL, vfsroot, "/dev", "devfs", NULL) == 0);
block_init();
pseudodevices_init();
@@ -76,10 +68,30 @@ void kernel_entry() {
arch_ps2_init();
fb_init();
nvme_init();
console_init();
logging_sethook(console_putc);
char *root = cmdline_get("root");
char *rootfs = cmdline_get("rootfs");
printf("mounting %s (%s) on /\n", root == NULL ? "none" : root, rootfs);
vnode_t *backing;
if (root) {
__assert(devfs_getbyname(root, &backing) == 0);
} else {
backing = NULL;
}
__assert(vfs_mount(backing, vfsroot, "/", rootfs, NULL) == 0);
if (backing) {
VOP_RELEASE(backing);
}
if (cmdline_get("initrd"))
initrd_unpack();
sched_runinit();
sched_threadexit();
}
-2
View File
@@ -1679,8 +1679,6 @@ static int ext2_mount(vfs_t **vfs, vnode_t *mountpoint, vnode_t *backing, void *
*vfs = &fs->vfs;
err = 0;
ASSERT_UNCLEAN(fs, fs->blocksize == 123546667);
cleanup:
if (err)
free(fs);