上一篇講到的微內核程序是由BIOS例程自動加載到內存中運行的,而且大小有限,能做的事情有限。我們知道內核程序大小是可以擴展的不能只有512字節,同時在加載運行內核前還需要完成一些必要的實模式下才能做的準備工作。所以單純在實模式下只使用微內核程序是不太夠的,就有了加載程序setup(有的項目也叫bootloader)的引入。
在正常工作是,由bios加載微內核程序以后,微內核將加載程序加載到內存中,然后由用戶自己實現的加載程序完成內核運行環境準備以及加載內核的工作。這樣做,自由度就較高了,本文完成上述過程的演示工作,分為下面幾個部分講解:
1)整體項目工作安排
2)硬盤驅動結構講解
3)讀硬盤操作過程講解
4)實戰演練
#整體項目框架:
上一篇完成的Boot程序繼續充當微內核角色,完成以下工作內容
1)使用BIOS中斷清空屏幕
2)將setup程序從硬盤讀取到內存的0x500的位置(實模式下的可用內存區域)
3)使用print打印字符:send to setup
4)跳轉到0x500繼續執行setup程序
開辟一個新的加載程序setup,完成一下工作:
1)清空屏幕
2)打印字符:hello world
##硬盤驅動接口講解
上述沒接觸到技術點就是如何匯編實現硬盤驅動完成讀硬盤的操作,在實模式下我們直接使用傳統硬盤接口的 I/O 控制機制操作主通道的硬盤hd.img(分通道設置硬盤后續再說),如下圖所示:
###關鍵接口講解:deepseek寫的不完全正確
1)0x1F0:
進行讀寫操作寄存器,內部可讀寫大小為16位
2)0x1F2:
操作扇區個數(一般一個扇區51