X-Git-Url: https://scm.lunaixsky.com/lunaix-os.git/blobdiff_plain/1fe5f5eb5378a47bf0f3451762743c162e40faad..f044ca812256b421e793c4335ce1ffed74710a70:/lunaix-os/kernel/kinit.c diff --git a/lunaix-os/kernel/kinit.c b/lunaix-os/kernel/kinit.c index 607ba20..f5944b5 100644 --- a/lunaix-os/kernel/kinit.c +++ b/lunaix-os/kernel/kinit.c @@ -1,6 +1,5 @@ #include #include -#include #include #include #include @@ -21,7 +20,6 @@ #include #include -#include #include #include @@ -54,8 +52,10 @@ kernel_bootstrap(struct boot_handoff* bhctx) /* Prepare stack trace environment */ trace_modksyms_init(bhctx); + device_register_all(); + // crt - tty_init(ioremap(VGA_FRAMEBUFFER, PG_SIZE)); + tty_init(ioremap(0xB8000, PG_SIZE)); tty_set_theme(VGA_COLOR_WHITE, VGA_COLOR_BLACK); lxconsole_init(); @@ -65,15 +65,19 @@ kernel_bootstrap(struct boot_handoff* bhctx) /* Let's get fs online as soon as possible, as things rely on them */ vfs_init(); fsm_init(); - input_init(); /* Get intc online, this is the cornerstone when initing devices */ intc_init(); + input_init(); + device_earlystage(); + /* System timing and clock support */ clock_init(); timer_init(); + device_timerstage(); + block_init(); /* the bare metal are now happy, let's get software over with */ @@ -89,9 +93,6 @@ kernel_bootstrap(struct boot_handoff* bhctx) vfs_mount("/sys", "twifs", NULL, MNT_RO); vfs_mount("/task", "taskfs", NULL, MNT_RO); - lxconsole_spawn_ttydev(); - device_init_builtin(); - /* Finish up bootstrapping sequence, we are ready to spawn the root process * and start geting into uspace */ @@ -138,16 +139,12 @@ spawn_proc0() cpu_chvmspace(proc0->page_table); // 为内核创建一个专属栈空间。 - for (size_t i = 0; i < (KSTACK_SIZE >> PG_SIZE_BITS); i++) { + for (size_t i = 0; i < KERNEL_STACK_SIZE; i += PG_SIZE) { ptr_t pa = pmm_alloc_page(KERNEL_PID, 0); - vmm_set_mapping(VMS_SELF, - KSTACK_START + (i << PG_SIZE_BITS), - pa, - PG_PREM_RW, - VMAP_NULL); + vmm_set_mapping(VMS_SELF, KERNEL_STACK + i, pa, PG_PREM_RW, VMAP_NULL); } - proc_init_transfer(proc0, KSTACK_TOP, (ptr_t)__proc0, 0); + proc_init_transfer(proc0, KERNEL_STACK_END, (ptr_t)__proc0, 0); // 向调度器注册进程。 commit_process(proc0);