2016年10月2日 星期日

Linux:迷你型的作業系統 ( Linux: Building your Minimal Operating System )

想要寫個開機就執行的程式,要先了解電腦的開機過程,電腦開機過程有:
1.      加電:機器開始供電時,CPU會從 0xffff0 處開始執行指令。
2.      自我檢測(POST):檢查設備是否存在與正常運作,有問題會發出聲音。
3.      初始化設備:系統 BIOS 會先在 ROM 的起始位址 0xC0000 處找顯示卡 BIOS,並由顯示卡 BIOS 來初始化顯示卡,接著系統BIOS 會再找其他設備的 BIOS 程序,用這些 BIOS 內部的初始化代碼來初始化相關設備。
4.      測試設備:測試 CPU 的工作頻率、RAM、硬碟、串列埠、並列埠等。
5.      更新 ESCD
6.      啟動作業系統:根據指定的順序從軟碟、硬碟或是CD ROM來啟動作業系統,會從此裝置的 cylinder 0, head 0, sector 1 ( hard disk 來說就是 Master Boot Record, MBR),讀取 512 bytes 載入至記憶體的 0x7C00,並檢查最後兩 bytes 是否為 0x55AA,若是則跳到該程式去。

詳細內容可參考<自己動手寫作業系統>第一章,而我們所要做的事就是如何把程式載到記憶體裡,測試環境為Ubuntu 14.04 LTS Desktop 32-bit。

程式碼

Makefile

qemu 指令
結果

參考資料