花了兩天都沒搞定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開發小組還來得及,但是我向來是個執着的人,所以希望能堅持完成這個小組的所有實驗,然后在實驗結束的時候還有頭發哈哈哈哈哈。。。。。
(做硬件和操作系統什么的最掉頭發了不是/微笑臉)