_after_gdt:
movl $mb_info, (%esp)
- call _kernel_init
+
+ call _kernel_pre_init
+
+ subl $6, %esp
# 加载 IDT
movl $_idt, 2(%esp)
movw %ax, (%esp)
lidt (%esp)
+ addl $6, %esp
+
+ sti
+
+ call _kernel_init
+
/*
加载新的栈指针,位于0xffbfffff,但因为16字节对齐的需求,低四位清零。
为什么不是0xffffffff? 因为0xffc00000 - 0xffffffff 这4MiB的空间用于
对页表与页目录的循环映射。
*/
- mov $0xffbffff0, %esp
+ mov $0xffbffff0, %esp
+
+ call _kernel_post_init
/* 进入内核 */
call _kernel_main