boot/包含三個彙編檔案:bootsect.s,setup.s,head.s。bootsect.s程式是磁碟引導塊程式,編譯後會駐留在磁碟的第乙個扇區中(引導扇區,0磁軌,0磁頭,第乙個扇區),在pc加電rom-bios自檢後,將被bios載入到記憶體0x7c00處執行。setup.s程式主要用於讀取機器的硬體配置引數,把核心模組system移動到適當的記憶體位置處。head.s程式會被編譯連線在system模組的最前部分,主要進行硬體裝置的探測設定和記憶體管理頁面的初始化設定。
bios: pc上電後,執行rom-bios中0xffff0處**,將編譯後的bootsect模組載入到0x7c00處,在絕對位址0處載入1kb的中斷向量表。
bootsect:將自己(bootsect.s而並非編譯後的bootsect模組)移動到0x90000處,利用bios中斷int 0x13將setup模組從此磁碟第2個扇區處讀4個扇區的資料到0x90200處,獲取磁碟驅動器引數(為讀system模組做準備),顯示"loading system", 將system模組讀到0x10000處,確定根檔案系統的裝置號。
setup.s: 利用bios中斷int 0x10,int 0x15獲取機器的硬體配置引數,將system模組從0x10000移動到0x00000處,載入idt, gdt,開啟a20位址線,對8259a程式設計重新設定irq0~irq15的中斷向量號,將cro中的pe位置位,進入保護模式。
head.s: 載入各資料暫存器,設定並載入idt,gdt,檢查a20位址線,數字協處理,將核心頁目錄和4個頁表放到0x00000處並設定其頁表項,將cro的pg位置位開啟分頁機制,跳轉到init/main.c的main函式處。
Linux 0 11學習總結 引導啟動程式部分
linux 0.11學習總結 引導啟動程式部分 1.bios啟動 intel設計cpu開機加電即進入16位的實模式下執行,cs的值預設為0xffff,ip的值預設為0x0000,這樣cs ip指向了0xffff0的位址位置。bios程式位址只有8kb,範圍為0xfe000 0xfffff。bios程...
Linux0 12引導啟動程式
1.從系統加電起所執行程式的順序 rom bios bootsect.s setup.s head.s main.c 其中,head.s和main.c都屬於system模組 main屬於初始化程式,這裡不講 2.幾個程式的比較 程式名位置 語言rom bios rombootsect.s boot ...
Linux0 12引導啟動程式
1.從系統加電起所執行程式的順序 rom bios bootsect.s setup.s head.s main.c 其中,head.s和main.c都屬於system模組 main屬於初始化程式,這裡不講 2.幾個程式的比較 程式名位置語言 rom bios rombootsect.s boot ...