1.下載內核源碼和根文件系統鏡像
http://oldlinux.org/Linux.old/bochs/linux-0.11-devel-040809.zip
Linux-0.11內核源碼的改進版,可以在gcc- 5.5.0下順利編譯通過,原生代碼只能在gcc-1.4下編譯:
https://github.com/yuanxinyu/Linux-0.11
2.編譯Linux-0.11
解壓Linux-0.11-master.zip,進入Linux-0.11-master目錄中,直接執行make就可以編譯內核
會生成2個文件,一個是內核Image, 一個是內核符號文件tools/system。
3.qemu啓動虛擬機
提取出linux-0.11-devel-040809.zip中的hdc-0.11.img,
按下面命令執行:
qemu-system-x86_64 -m 16 -boot a -fda Image -hda hdc-0.11.img -s -S
解釋一下
-fda Image:代表你把 Image 執行目錄下
-hda hdc-0.11.img:代表你把 HD img,是一個模擬硬盤的文件,可以在趙博士所提供的`linux-0.11-devel-040809.zip`找到
-m:設定模擬的內存大小,本地設定爲 16MB
-s : 服務器開啓1234端口
-S: 開始執行就掛住
另外開啓控制檯
gdb tools/system
進入客戶端
載入符號
(gdb) file tools/system
鏈接遠端服務器
(gdb) target remote localhost:1234
下中斷,停在0x7c00處
(gdb) br *0x7c00
在此時,bios 把控制權正式的交給了 linux,而 0x7C00對應的代碼應該是 bootsect.S
觀察0x7DFE與 0x7DFF的值是否爲0x55,0xAA
(gdb) x/16xb 0x7DF0
單步執行
(gdb) si
下中斷
(gdb) b main