从bootloader 交出控制权开始##
bootloader 最后调用
((void(*))(void) ()ELF->e_entry& 0xffffff)() ;
lab2 虽然e_entry 是虚拟地址,但是后面完成了虚拟地址到物理地址的映射。
在 ld 进行连接的时候 钦定了kern_init 作为程序的入口,所以这里就调用了 init.c 中的 kern_init 函数
先extenrn 了 edata end 实际上是连接时候的 是bss 段区的起始段和终止段
直接将bss 段清零(??)
调用cons_init() 初始化 console 这个要说起来还蛮复杂的
调用pmm_init() 初始化内存管理
调用了 gdt_init 再次初始化全局描述符表 TSS 全称task state segment,
初始化 gdt 和 tssidt
pic_init() 初始化 interrupt controller 完成中断控制器的初始化 对8259的配置 。配置好之后外设就可以产生中断
idt_init() 初始化