前一陣子都在看源代碼,然后自己一行一行的敲上去,但是沒(méi)有辦法手動(dòng)的調(diào)試,
于是自己冒出個(gè)想法,我要在自己的機(jī)器上編譯并且運(yùn)行l(wèi)inux0.11。
vwmare虛擬機(jī)安裝的是ubuntu9.10。我想在9.10上利用bochs 來(lái)編譯并且運(yùn)行l(wèi)inux0.01。
(1) 下載的源代碼是 linux-0.11-081030.tar.gz ,這個(gè)源代碼是使用gcc 4.3編譯的。
但是ubuntu9.10及其之上的版本都安裝的是gcc4.4。
所以第一步就是要安裝gcc4.3 ,因?yàn)槿羰鞘褂胓cc4.4,那么源代碼可能會(huì)成功編譯,但是無(wú)法運(yùn)行。
在控制臺(tái)上輸入 sudo apt-get install gcc4.3 。 然后把gcc4.3變成系統(tǒng)默認(rèn)的編譯器。
ln -sf /usr/bin/gcc-3.3 /usr/bin/gcc 執(zhí)行此命令即可。
(2) 將linux-0.11-081030.tar.gz 解壓,先使用gunzip解壓去掉gz。然后再使用tar xvf 解壓。
進(jìn)入linux-0.11 ,然后make clean , make 。
你會(huì)發(fā)現(xiàn)新生成了 Image 和 System.map 。
執(zhí)行 dd bs=8192 if=Image of =/dev/fd0。(下面的配置文件我使用的是bootimage-0.11-hd,
所以我用的是dd bs=8192 if=Image of =bootimage-0.11-hd)
如果到這一步都沒(méi)問(wèn)題,那么就說(shuō)明你編譯正確。
(3) 下載linux-0.11-devel-060625.zip 。解壓并把文件夾內(nèi)的 hdc-0.11-new.img 移動(dòng)到與Imgae 相同的路徑下。
(4) 利用bochs2.4.2 來(lái)模擬運(yùn)行。 boch0.11.bxrc配置文件如下:
megs: 16
romimage: file=/opt/bochs/gdbstub/share/bochs/BIOS-bochs-latest
vgaromimage: file=/opt/bochs/gdbstub/share/bochs/VGABIOS-lgpl-latest
#floppya: 1_44="Image", status=inserted #這個(gè)是啟動(dòng)盤。
floppya: 1_44="bootimage-0.11-hd", status=inserted
ata0-master: type=disk, path="hdc-0.11-new.img", mode=flat, cylinders=410, heads=16, spt=38
gdbstub: enabled=1, port=1234, text_base=0, data_base=0, bss_base=0
boot: floppy
log: bochsout.txt
parport1: enable=0
vga_update_interval: 300000
keyboard_serial_delay: 200
keyboard_paste_delay: 100000
floppy_command_delay: 50000
ips: 4000000
mouse: enabled=0
private_colormap: enabled=0
fullscreen: enabled=0
screenmode: name="sample"
i440fxsupport: enabled=0

(5) 運(yùn)行bochs ,然后選擇相應(yīng)的文件即可。下面講一下gdb與bochs聯(lián)合調(diào)試的方法
首先要在bochs的配置文件中增加一句 gdbstub:enabled=1 ,port=1234,text_base=0,data_base=0,bss_base=0
進(jìn)入源代碼中的tools文件夾,執(zhí)行 gdb system
然后接著輸入
break main
target remote localhost:1234
cont
內(nèi)核代碼將在init.c中的main函數(shù)處停止。
在聯(lián)合調(diào)試的過(guò)程中,bochs會(huì)出現(xiàn)pae_fault的錯(cuò)誤,這時(shí)候就需要連續(xù)按 enter 鍵即可。
經(jīng)驗(yàn)教訓(xùn) :
(1) 一定要選擇對(duì)應(yīng)的gcc版本,否則就算是編譯正確了,也無(wú)法運(yùn)行。我的gcc版本為 gcc 4.3 。
(2) http://oss.lzu.edu.cn/modules/newbb/viewtopic.php?topic_id=1403 這個(gè)網(wǎng)址上有對(duì)應(yīng)的源代碼。

成功的圖片。