一步步编写操作系统 24 编写内核加载器
這一節(jié)的內(nèi)容并不長(zhǎng),因?yàn)樵谶M(jìn)入保護(hù)模式之前,我們能做的不多,loader是要經(jīng)過實(shí)模式到保護(hù)模式的過渡,并最終在保護(hù)模式下加載內(nèi)核。本節(jié)只實(shí)現(xiàn)一個(gè)簡(jiǎn)單的loader,本loader只在實(shí)模式下工作,等學(xué)習(xí)了保護(hù)模式后,我們?cè)賮韨€(gè)真格的。
由于本節(jié)較容易,沒有新知識(shí),直接上菜啦,見代碼
1 %include "boot.inc"2 section loader vstart=LOADER_BASE_ADDR34 ; 輸出背景色綠色,前景色紅色,并且跳動(dòng)的字符串"1 MBR"5 mov byte [gs:0x00],'2'6 mov byte [gs:0x01],0xA4 ; A表示綠色背景閃爍,4表示前景色為紅色78 mov byte [gs:0x02],' '9 mov byte [gs:0x03],0xA41011 mov byte [gs:0x04],'L'12 mov byte [gs:0x05],0xA41314 mov byte [gs:0x06],'O'15 mov byte [gs:0x07],0xA41617 mov byte [gs:0x08],'A'18 mov byte [gs:0x09],0xA41920 mov byte [gs:0x0a],'D'21 mov byte [gs:0x0b],0xA42223 mov byte [gs:0x0c],'E'24 mov byte [gs:0x0d],0xA42526 mov byte [gs:0x0e],'R'27 mov byte [gs:0x0f],0xA42829 jmp $ ; 通過死循環(huán)使程序懸停在此對(duì)這個(gè)loader中的代碼,大家是否覺得好親切、毫無壓力呢。這和咱們最初的那個(gè)MBR好接近,不同的是,在這個(gè)loader中,打印的字符串是“2 loader”。
本loader程序第2行代碼用到了LOADER_BASE_ADDR,所以在第1行中把boot.inc包含進(jìn)來了,其值是0x900。其它代碼就不用講啦。
編譯nasm -I include/ -o loader.bin loader.S回車
將生成的loader.bin寫入硬盤第2個(gè)扇區(qū)。第0個(gè)扇區(qū)是MBR,第1個(gè)扇區(qū)是空的未使用,原因如前所述,純粹個(gè)人喜好。
dd if=./loader.bin of=/此處替換成你的安裝目錄/bochs/hd60M.img bs=512 count=1 seek=2 conv=notrunc回車,下面是dd命令的三行輸出。
記錄了0+1 的讀入
記錄了0+1 的寫出
98字節(jié)(98 B)已復(fù)制,8.9113e-05 秒,1.1 MB/秒
可見,我們的loader.bin只有98字節(jié),遠(yuǎn)遠(yuǎn)小于64k。
小激動(dòng)的時(shí)刻到了,我們?cè)撨\(yùn)行bochs來驗(yàn)證了。如果程序正確的話,MBR會(huì)跳轉(zhuǎn)到loader.bin去運(yùn)行,屏幕上會(huì)顯示“2 loader”。
啟動(dòng)虛擬機(jī),執(zhí)行。效果如圖
?
這次我只抓了一張圖,但我人格保證這是跳動(dòng)的字符,大家在自己的虛擬機(jī)上體驗(yàn)體驗(yàn)吧。
Loader剛剛開了個(gè)頭,馬上就要和大家暫別了。因?yàn)檫@個(gè)loader目前還沒有實(shí)際意義,目前只是來驗(yàn)證MBR和loader的接力是否成功,它最終的任務(wù)是要加載內(nèi)核。可是內(nèi)核是運(yùn)行在32位保護(hù)模式環(huán)境下,我們當(dāng)前還在實(shí)模式下呢。首先咱們得知道什么是保護(hù)模式,其次還得想辦法進(jìn)入到保護(hù)模式,前面的路還很遠(yuǎn)。
好啦,本章到此告一段落,等我們學(xué)習(xí)保護(hù)模式后,我們還會(huì)回來繼續(xù)改進(jìn)loader。
【再續(xù)】
本內(nèi)容摘自《操作系統(tǒng)真象還原》,請(qǐng)大伙兒支持正版,多謝多謝。
總結(jié)
以上是生活随笔為你收集整理的一步步编写操作系统 24 编写内核加载器的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 信用卡逾期了没钱还款怎么办
- 下一篇: Oracle客房管理系统论文,[转载]基