(八)
(二)setup.S
如前所述,setup()函數被Linker放在核心映射檔中的0x200偏移處。它的主要任務為初始化電腦中的硬體設備並為核心程式的執行建立環境。首先,它通過BIOS中斷獲取記憶體容量資訊,設置鍵盤的回應速度,設置顯示器的基本模式,獲取硬碟資訊,檢測是否有PS/2滑鼠等等操作,都是在386的RealMode下進行。而後才準備讓CPU進入保護模式了。
這時別忘了先把中斷信號masked掉,否則,系統可能受到中斷信號的干擾而陷入不可知狀態。然後呼叫作業系統指令lidt和lgdt,IDT是中斷向量表,而GDT是全局描述符表。此時的中斷描述符表放置的就是開機時由BIOS設定的那張表。
完成一系列對硬體 設 備的初始化動作以後 ,即跳轉到startup_32()函式:jmpi 0x100000, __BOOT_CS,進入核心Head.S; |