Bochs是由Kevin Lawton 於1994年開始開發的一個用於完全模擬Intel的x86模擬器。開始它僅僅是一個商業產品,不過可以購買到它的源程序。2000年3月,Mandrakesoft買下了Bochs,並把它置於GNU
LGPL下使之成爲一個開源程序。在2001年3月,Kevin把Bochs的家從bochs.com移到了
bochs.sourceforge.net上了。
Bochs是用C 開發的,它被設計成可以運行於多種主流平臺下,包括x86, PPC, Alpha,
Sun和MIPS。它完全是靠軟件模擬來實現的。從啓動到重啓,包括PC的外設鍵盤,鼠標,VGA卡,磁盤,網卡等,全部都是有軟件來模擬的。這和其它的
模擬器如VMware,plex86等有很大的區別。也正是由於Bochs完全是靠軟件來模擬整個PC環境,因此它非常的適合開發操作系統,這對廣大操作
系統愛好者來說是一個福音。因爲有它,使得調試操作系統非常非常的容易,它自帶一個調試器bochsdbg,它可以從PC機剛啓動的那一剎那起就開始模
擬,注意,這不是從讀取磁盤中的引導扇區那開始模擬。
鑑於Bochs對操作系統設計的巨大作用,《操作系統:設計與實現》這一偉大的操作系統書籍所帶的光盤中就有Bochs軟件。而且就現在linux內核的調試也很多時候也要靠它哦。
我很久很久以前曾在XXP上使用過它,不過自從轉到Ubuntu上後就沒怎麼動過這法寶了。最近正在學習操作系統課程,碰到很多很多抽象的概念,其實操作
系統課本我已經看過多遍,但還是對那些概念沒有一個感性的認識,只是每次看時有些感覺過後就怎麼都記不起來了,鬱悶哪!
這次我試驗了一下在Ubuntu安裝配置bochs,在網上抓的資料全都是獨立編譯的。其中感覺比較好的是這篇:[Bochs HOWTO:
http://www.wangcong.org/articles/bochs.html
]。
其實,在Ubuntu下只用一條命令就可以搞定:
sudo apt-get install bochs
但是,只是這樣還差很遠。我就遇到了這些問題,而網上卻少有相關的資料。由此,我把我遇到的問題及解決方法發出來以供大家參考。
問題一、安裝bochs在terminal下輸入下列代碼
sudo apt-get install bochs
這樣安裝結束後,在我使用bochs的時候出現了下列錯誤:
Event type: PANIC
Device: [ ]
Message: dlopen failed for module 'x': file not found
這是由於在安裝的時候,少安裝了個bochs-x包
這個包可以在
http://packages.ubuntu.com/dapper/misc/bochs-x
找到
也可以在terminal下面輸入
sudo apt-get install bochs-x
這樣纔算安裝完畢了。
問題二、啓動問題
點進入系統後控制檯出現下面的提示:
Please choose one: [6] 6
00000000000i[ ] installing win32 module as the Bochs GUI
00000000000i[ ] using log file bochsout.txt
========================================================================
Event type: PANIC
Device: [MEM0 ]
Message: ROM: System BIOS must end at 0xfffff
A PANIC has occurred. Do you want to:
cont - continue execution
alwayscont - continue execution, and don't ask again.
This affects only PANIC events from device [MEM0 ]
die - stop execution now
abort - dump core
Choose one of the actions above: [die]
問題原因:
在2.3.5以前的bochs使用的BIOS-bochs-latest是64k的,那個時候需要加上
romp_w_picpath: file=BIOS-bochs-latest,address=0xf0000
在2.3.5中的BIOS-bochs-latest更新了,變成了128k的,這個時候配置需要改爲
romp_w_picpath: file=$BXSHARE/BIOS-bochs-latest
解決方法:
去掉配置文件中的address那個
問題三、bochs的啓動配置文件bochsrc
一般網上的資料都會提示你安裝好後會有如下工具:
/usr/bin/bochs Bochs啓動程序
/usr/bin/bxp_w_picpath Bochs帶的製作磁盤鏡像文件的工具
/usr/bin/bxcommit 把redolog放進flat磁盤鏡像文件中去的交互工具
/usr/share/doc/bochs/bochsrc-sample.txt Bochs配置文件的例子
/usr/share/bochs/BIOS-bochs-* ROM BIOS鏡像文件
/usr/share/bochs/VGABIOS-* 與VGA BIOS鏡像文件相關的文件
/usr/bin/bochs-dlx 啓動Bochs中DLX linux的程序
/usr/share/bochs/dlxlinux/ DLX Linux的目錄,包含它的磁盤鏡像文件和配置文件
/usr/share/bochs/keymaps/*.map X11和SDL的keymap列表
其實在終端安裝的卻沒有第四、第七和第八項,就連第二第三項也要另外安裝:
sudo apt-get install bxp_w_picpath
sudo apt-get install bxcommit
所以,網上那些bochsrx在Ubuntu是運行不了的,就因爲這點,我搞近一個下午,開始我老以爲是配置文件不對呢。
普通的bochsrc:
romp_w_picpath: file=$BXSHARE/BIOS-bochs-latest, address=0xf0000
vgaromp_w_picpath: file=$BXSHARE/VGABIOS-lgpl-latest
但是在Ubuntu下壓根就沒有VGABIOS-lgpl-latest
例如:
lzel@lzel-desktop:/usr/share/bochs$ ls
BIOS-bochs-latest BIOS-bochs-legacy BIOS-qemu-latest keymaps
lzel@lzel-desktop:/usr/share/bochs$
後來我才發現,從終端下安裝bochs時它把VGA專門作爲了一個程序安裝在了/usr/share/vgabios/中了。
lzel@lzel-desktop:/usr/share/bochs$ ls /usr/share/vgabios/
vgabios.bin vgabios.cirrus.bin vgabios.cirrus.debug.bin vgabios.debug.bin
lzel@lzel-desktop:/usr/share/bochs$
這樣配置文件就要改爲:
romp_w_picpath: file=$BXSHARE/BIOS-bochs-latest
megs:4
floppya: p_w_picpath=./boot.img,status=inserted
vgaromp_w_picpath: file=/usr/share/vgabios/vgabios.bin
boot:a
log:out.bochs
OK,這樣應該差不多了。