到誠品買了一本"Orang's 一個作業系統的實現"的書,好好的跟著書本上做了一些練習
首先先要來搭建Bochs的環境,它也是一個虛擬機,但跟一般的VMware和VirtualBox有所不同
詳細Bochs的介紹,可以到它的官網上看,而且裡面還有安裝說明 :
Bochs官網
下載最新版的bochs 2.4.5
解壓縮完之後,在configure之前,請先安裝如下的元件,以保證configure和make能順利通過.
#sudo apt-get install libc6-dev build-essential xorg-dev libgtk2.0-dev
安裝之後,就可以來configure了,這樣才能產生Makefile
#./configure --enable-debugger --enable-disasm
後面的參數是為了能使用測試功能,不然bochs通常一出現視窗運行會沒辦法輸入指令
#make
為了確保和書上的路徑一致,所以我到Mafile裡面更改安裝路徑 :
#prefix = /usr/local
prefix = /usr
更改完之後,就可以安裝bochs的binary
#sudo make install
其中可能會出現 install: 無法 stat 「./bochsdbg」: 沒有此一檔案或目錄 的訊息,把bochs複製更名即可
#cp bochs bochsdbg
參照書上的做法,寫一段程式碼來引導作業系統啟動並加上"Hello World"字樣(後面我再來細細的看這段程式...沒學過彙編語言呀>"<)
緊接著用NASM來編譯它,如果沒有NASM,可以利用apt-get來安裝(我是用source code來安裝...但基本上沒差別...)
#sudo apt-get install nasm
#nasm boot.asm -o boot.bin
編譯好了之後,接下來就要利用bximage來製作虛擬軟碟(也叫磁片映射)
#bximage
========================================================================
bximage
Disk Image Creation Tool for Bochs
$Id: bximage.c,v 1.34 2009/04/14 09:45:22 sshwarts Exp $
========================================================================
Do you want to create a floppy disk image or a hard disk image?
Please type hd or fd. [hd] fd
Choose the size of floppy disk image to create, in megabytes.
Please type 0.16, 0.18, 0.32, 0.36, 0.72, 1.2, 1.44, 1.68, 1.72, or 2.88.
[1.44] <---直接按Enter
I will create a floppy image with
cyl=80
heads=2
sectors per track=18
total sectors=2880
total bytes=1474560
What should I name the image?
[a.img] <-----同上
Writing: [] Done.
I wrote 1474560 bytes to a.img.
The following line should appear in your bochsrc:
floppya: image="a.img", status=inserted
現在可以在bochs目錄下看到a.img了 ! 不過先把boot.bin拷貝進來,要把開機磁區寫進軟碟裡
#cp boot.bin bochs-2.4.5/
#dd if=boot.bin of=a.img bs=512 count=1 conv=notrunc
conv=notrunc代表磁區不要被系統給truncated,因為boot.bin比a.img還小,其實真正的軟碟是不會被truncated,現在是因為運行在bochs這台virtual machine所以才需要加入這個參數.
在真正開始Run bochs之前,要先對bochs配置一下,官方有非常詳細的說明,而bochs預設是會吃目錄下的.bochsrc , 不過先按照書上對它做個簡短的配置
Note : 在自行寫配置時, 一定要先參考.bochs預設的文件, 因為每個Bochs版本的配置寫法會有所修改.
OK,萬事俱備,馬上運行bochs來看看結果 !
OK,萬事俱備,馬上運行bochs來看看結果 !
#sudo bochs -f bochsrc
-f的參數後面是要接你自身配置的bochs,打-help可以看到其它命令,運行結果如下 :
會看到很多log...如果不想被這些log干擾,可以去配置bochsrc讓它輸出到一個文件就好.
剛開始我非常納悶,為何他媽的bochsrc就給我停在這,跟書本顯示不一樣,我一直以為是我的display沒有配好,所以我不斷的看官方文件,重配,重起,然後再看.......就這樣我卡了4個小時= =
最後受不了了,把最後顯示的指令往google上一貼 ! 還真他媽的讓我找到答案了 ....
原來...因為是測試模式,所以bochs一運行,會停在第一個指令等待用戶輸入命令...Fuck !!
(0) [0xfffffff0] f000:fff0 (unk. ctxt): jmp far f000:e05b ; ea5be000f0 <------ bochs 停在第 1 條指令處
也就是說,當使用調試運行時,bochs 會停在第 1 條指令, jmp far f000:e05b 是 bios 的第 1 條指令,然後等待用戶輸入命令.....
可能作者沒想到有更白痴的人會不瞭解...所以書上也沒解釋...T_T
然後我查了一下bochs底下的指令...結果順利完成第一個任務~~~感動的Hello World !!