X-Git-Url: https://scm.lunaixsky.com/lunaix-os.git/blobdiff_plain/7c7b5f05d39b7739d990f71256a2267ec67a6913..1eeed1150149b63d6e49e033697454bc12b533b9:/lunaix-os/kernel/kinit.c diff --git a/lunaix-os/kernel/kinit.c b/lunaix-os/kernel/kinit.c index 6b6e5e4..a54b68a 100644 --- a/lunaix-os/kernel/kinit.c +++ b/lunaix-os/kernel/kinit.c @@ -1,10 +1,10 @@ +#include #include #include #include #include #include #include -#include #include #include #include @@ -16,17 +16,16 @@ #include #include #include -#include +#include #include #include -#include #include #include #include -#include +#include #include extern void @@ -50,46 +49,49 @@ kernel_bootstrap(struct boot_handoff* bhctx) /* Setup kernel memory layout and services */ kmem_init(bhctx); + boot_parse_cmdline(bhctx); + /* Prepare stack trace environment */ trace_modksyms_init(bhctx); - // crt + device_scan_drivers(); + + invoke_init_function(on_earlyboot); + + // FIXME this goes to hal/gfxa tty_init(ioremap(0xB8000, PG_SIZE)); tty_set_theme(VGA_COLOR_WHITE, VGA_COLOR_BLACK); - lxconsole_init(); - /* Get platform configuration */ - acpi_init(); - - /* Let's get fs online as soon as possible, as things rely on them */ - vfs_init(); - fsm_init(); - input_init(); + device_sysconf_load(); /* Get intc online, this is the cornerstone when initing devices */ intc_init(); - /* System timing and clock support */ clock_init(); timer_init(); - block_init(); + /* + TODO autoload these init function that do not have dependency between + them + */ - /* the bare metal are now happy, let's get software over with */ + /* Let's get fs online as soon as possible, as things rely on them */ + vfs_init(); + fsm_init(); + input_init(); + block_init(); sched_init(); - int errno = 0; - if ((errno = vfs_mount_root("ramfs", NULL))) { - panickf("Fail to mount root. (errno=%d)", errno); - } + device_onboot_load(); + + /* the bare metal are now happy, let's get software over with */ - /* Mount these system-wide pseudo-fs */ - vfs_mount("/dev", "devfs", NULL, 0); - vfs_mount("/sys", "twifs", NULL, MNT_RO); - vfs_mount("/task", "taskfs", NULL, MNT_RO); + must_success(vfs_mount_root("ramfs", NULL)); + must_success(vfs_mount("/dev", "devfs", NULL, 0)); + + invoke_init_function(on_boot); - lxconsole_spawn_ttydev(); - device_init_builtin(); + must_success(vfs_unmount("/dev")); /* Finish up bootstrapping sequence, we are ready to spawn the root process * and start geting into uspace