kernel_start()函數增加對trap_init()的調用。
void kernel_start(void)
{
clear_screen(DISP_FG_WHITE + DISP_BG_BLACK);
(void)printk_init();
(void)trap_init();
return ;
}
文件越來越多,沒辦法了,仿照linux ,先調整文件的目錄結構如下:
+boot目錄+
--包含 boot.s setup.s build_boot.c build_setup.c Makefile
+include目錄+
--包含 要用到的所有頭文件包括io.h system.h printk.h stdarg.h
+init目錄+
-- 包含 main.c 和start32.s Makefile
+drivers+
-- 保留給接下來的pcnet32 網卡驅動
+schedule+
-- 任務調度用,其他所有的.c文件,有空還要再整理後再按功能分目錄.包括:printk.c vsprintf.c
+tools+
-- 工具目錄,主要用來打包image,包括:build_image.c
最外層則是Makefile
內核加載後的內存分佈:
0~64K start32.s 開始的內核,不包括boot.s和setup.s,此時bios的原生中斷都已經不可用,並且通過調用trap_init()初始化成響應函數default_handle()了。
0x10000地址開始處除了0x90200有setup.s其餘部分保留bios時的原樣內容。
特別是VGA相關的地址:0xb8000開始的內容不能改動,否則打印就掛了。