1. 程式人生 > >bochs下編譯linux0.11 (轉)

bochs下編譯linux0.11 (轉)

/********************************************
轉自:http://blog.csdn.net/s_ware/archive/2007/03/22/1537088.aspx
********************************************/

我安裝的作業系統是ubuntu
下載一個帶有 gcc 1.40 編譯環境的 Linux 0.11 系統軟體包。該系統設定成在
Bochs 模擬系統下執行,並且已經配置好相應的 bochs 配置檔案。該軟體包可從下面地址得到。
http://oldlinux.org/Linux.old/bochs/linux-0.11-devel-040329.zip



把配置檔案 bochs-hd.bxrc 修改為 bochs.txt

然後在終端執行:bochs
出現錯誤:

修改bochs.txt
原來:romimage: file=$BXSHARE/BIOS-bochs-latest, address=0xf0000
修改為:romimage: file=$BXSHARE/BIOS-bochs-latest, address=0xf0000

原來:vgaromimage: $BXSHARE/VGABIOS-elpin-2.40
修改為:vgaromimage: $BXSHARE/VGABIOS-elpin-2.40

然後執行還出現錯誤:
需要掛在另一個img
copy一個sls-0.99pl中的:c.img到linux-0.11-devel-040329資料夾下
然後修改bochs.txt
ata0-slave:type=disk, path="c.img", cylinders=365, heads=16, spt=63
然後在終端執行:bochs
成功進入:
/root

在/usr/src/linux 目錄下鍵入'make'命令即可編譯 Linux 0.11 核心原始碼
出現錯誤:make:Nothing to be dong for "all"

應該先:
首先使用
make clean
來清除所有編譯好的*.o檔案或其它模組,然後再
make

又出現錯誤:
gcc-cc1: Invalid option "string-insns"

請將每個Makefile檔案中的-mstring-insns引數去掉。每個子目錄中都有一個,kernel目錄下還有三個驅動程式子目錄(math, blk_drv, chr_drv)另外,到/usr/local/bin中把ar 改名為gar,或者乾脆複製一個
就能解決

修改完後:
先: make clean
然後:make

make成功後生成引導啟動映象檔案 Image。若需要輸出這個 Image 檔案,可以首先備份 bootimage-0.11-hd 檔案,然後使用下面命令就會把 bootimage-0.11-hd 替換成新的引導啟動檔案。

dd bs=8192 if=Image of=/dev/fd0

注意此處是把編譯完的Image(啟動映象檔案)輸出到/dev/fd0,注意此處的/dev/fd0實際上就是bochs中定義的floppya: 1_44="bootimage-0.11-hd", status=inserted,也就是要替換"bootimage-0.11-hd"

直接重新啟動 Bochs 即可使用該新編譯生成的 bootimage-0.11-hd 來引導系統。

如果不相信,可以修改bootsect.s然後重新編譯,就可以看到啟動的時候 Loading system...create by happy嘿嘿,可以任意修改,主要修改幾個地方:

! Print some inane message

mov ah,#0x03 ! read cursor pos
xor bh,bh
int 0x10

mov cx,#47
mov bx,#0x0007 ! page 0, attribute 7 (normal)
mov bp,#msg1
mov ax,#0x1301 ! write string, move cursor
int 0x10

msg1:
.byte 13,10
.ascii "Loading system ...this is create by happy"
.byte 13,10,13,10

.org 508