操作系統實驗一:系統boot


花了兩天都沒搞定bochs,出了一些error,網上搜不到,絕望之際老宋出現,雖然他也不知道自己點了寫什么/微笑臉,但是就這么神奇的跑起來了。好了終於可以開始我的第一個操作系統實驗了。/痛哭流涕

實驗名稱:系統boot1.1

先來介紹一下這個實驗是干嘛的。這個實驗叫boot嘛,其實就是想在bochs上跑一下boot這個程序。老師給了個boot.asm的文件,這個文件用nasm編譯后會生成一個boot.bin文件,boot.bin一般放置在boot扇區。現在我們用軟盤作為引導盤,然后在啟動x86類型的計算機的時候,BIOS就自動把boot扇區的引導程序加載到內存中的0:7C00處了,然后跳轉到0:7C00開始執行boot程序。

實驗過程:

准備的東西(bochsrc,boot.asm):

其中bochsrc是bochs的配置文件,這個要根據自己電腦某些文件設置一些路徑;boot.asm是老師給的文件這個不用管。

所以,我們要做的,就是

1.把boot.asm編譯了,得到boot.bin;

2.弄個軟盤

3.啟動bochs跑他個boot

1:

這個簡單。首先你得先裝好NASM編譯器,這個就不展開說了。

然后在當前工作目錄下打開終端輸入下列命令:

nasm -o boot.bin boot.asm

然后就得到boot.bin了

2:

在弄個軟盤前,我們先設置bochsrc文件:

###############################################################
# Configuration file for Bochs
###############################################################

# how much memory the emulated machine will have
megs: 32

# filename of ROM images
romimage: file=/usr/share/bochs/BIOS-bochs-latest
vgaromimage: file=/usr/share/vgabios/vgabios.bin

# what disk images will be used
floppya: 1_44=a.img, status=inserted

# choose the boot disk.
boot: floppy

# where do we send log messages?
# log: bochsout.txt

# disable the mouse
mouse: enabled=0

# enable key mapping, using US layout as default.
keyboard:keymap=/usr/share/bochs/keymaps/x11-pc-us.map

romimage和vgaromimage都是根據自己電腦上BIOS-bochs-latest和vgabios.bin的路徑來設置的;而最后一行關於keyboard的設置,一開始代碼是這樣的:

keyboard_mapping:enabled=1,map=/usr/share/bochs/keymaps/x11-pc-us.map

但是會產生一個這樣的錯誤:

keyboard_mapping' is deprecated - use 'keyboard' option instead.

如果你直接按照他的提示,把keyboard_mapping改成keyboard,那么還會產生錯誤:

keyboard directive malformed.

此處感謝CSDN的作者沈郎,他機靈地看了sample-txt,知道了keyboard的參數格式,於是解決了這個問題。

設置完后,輸入命令:

bximage

然后選擇,fd,然后剩下的直接回車就好了,就會在bochsrc所在文件夾下,即現在的工作文件夾下生成一個a.img文件,這就是我們的軟盤了。

3:

先執行以下命令:

dd if=boot.bin of=a.img bs=512 count=1 conv=notrunc

好了現在可以啟動bochs了,在當前工作文件夾下打開終端輸入命令:

bochs

然后選擇6,會彈出一個黑框,這就是bochs了。

然后在終端輸入c,回車,就會出現以下結果:

 

如果你沒有出現以上結果,而是報錯:

[BIOS]No bootable device.

那么你先檢查一下boot.asm最后一行有沒有dw 0xaa55,這是結束符的標志,如果沒有就加上。

然后檢查一下生成的boot.bin是不是512byte,如果不是512byte,那么添加times 510-($-$$)db 0來填滿512byte。

然而我這兩個都沒錯,也是出現了上面的Error。

再次感謝CSDN的作者沈郎,他意識到可能是dd運行失敗,於是我也重新運行了一次dd,果然成功了,得到了上面的“Hello,OS world!”

 

結語:

當我看到這個框的時候,真的是內心翻滾着不可描述的激動。。。。。。

鬼知道我這兩天為了裝個bochs搭個做OS實驗的環境經歷了什么。。。。。。

但是我秉着學蛙泳的精神,在老宋的幫助下,堅持了下來,特此鳴謝我的同學老宋還有CSDN的作者沈郎。

這只是操作系統實驗剛剛開始,我也清楚意識到這個實驗小組不容易,並且現在退出這個mini-OS開發小組還來得及,但是我向來是個執着的人,所以希望能堅持完成這個小組的所有實驗,然后在實驗結束的時候還有頭發哈哈哈哈哈。。。。。

(做硬件和操作系統什么的最掉頭發了不是/微笑臉)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM