Bochs源碼安裝及運行調試

最近在讀《Orange's一個操作系統的實現》,開始部分介紹了虛擬機Bochs的安裝及調試,本文把折騰過程做下記錄。
操作系統:Ubuntu10.04(最新的版本老是有問題)
軟件版本:bochs 2.3.5(和書中保持一致)

1 更新Ubuntu

由於ubuntu 10.04是很老的版本,早在2016年已停止了更新支持,直接sudo apt-get update會失敗,好在ubuntu提供了old-release的方案,通過編輯sources.list更新軟件源,打開/etc/apt/sources.list,把裏面內容全部刪除(如果不放心,可以先將原文件備份),然後換上如下地址:

deb http://old-releases.ubuntu.com/ubuntu lucid main restricted universe multiverse   
deb http://old-releases.ubuntu.com/ubuntu lucid-security main restricted universe multiverse   
deb http://old-releases.ubuntu.com/ubuntu lucid-updates main restricted universe multiverse   
deb http://old-releases.ubuntu.com/ubuntu lucid-proposed main restricted universe multiverse   
deb http://old-releases.ubuntu.com/ubuntu lucid-backports main restricted universe multiverse   
deb-src http://old-releases.ubuntu.com/ubuntu lucid main restricted universe multiverse   
deb-src http://old-releases.ubuntu.com/ubuntu lucid-security main restricted universe multiverse   
deb-src http://old-releases.ubuntu.com/ubuntu lucid-updates main restricted universe multiverse   
deb-src http://old-releases.ubuntu.com/ubuntu lucid-proposed main restricted universe multiverse   
deb-src http://old-releases.ubuntu.com/ubuntu lucid-backports main restricted universe multiverse  

之後,依次執行如下命令,更新並安裝必要軟件
sudo apt-get update
sudo apt-get install build-essential
sudo apt-get install xorg-dev
sudo apt-get install libgtk2.0-dev
sudo apt-get install nasm

2 軟件編譯

1 解壓軟件包
tar -zxf bochs-2.3.5.tar.gz
2 進入bochs解壓目錄
cd bochs-2.3.5
3 配置,使能調試和反彙編功能
./configure --enable-debugger --enable-disasm
4 編譯
make
5 安裝(該步驟可不進行)
sudo make install
編譯過程中可能有一個如下錯誤
symbols.cc:137: error: ISO C++ forbids declaration of ‘hash_map’ with no type
需要對./bx_debug/symbols.cc進行修改

using namespace std;
#ifdef __GNUC__  // 新加的,注意前後都是兩個下劃線 
using namespace __gnu_cxx; // 新加的,注意前面是兩個下劃線 
#endif  // 新加的
struct symbol_entry_t;

3 運行實例

1 編輯boot.asm

org	07c00h			; 告訴編譯器程序加載到7c00處
	mov	ax, cs
	mov	ds, ax
	mov	es, ax
	call	DispStr			; 調用顯示字符串例程
	jmp	$			; 無限循環
DispStr:
	mov	ax, BootMessage
	mov	bp, ax			; ES:BP = 串地址
	mov	cx, 16			; CX = 串長度
	mov	ax, 01301h		; AH = 13,  AL = 01h
	mov	bx, 000ch		; 頁號爲0(BH = 0) 黑底紅字(BL = 0Ch,高亮)
	mov	dl, 0
	int	10h			; 10h 號中斷
	ret
BootMessage:		db	"Hello, OS world!"
times 	510-($-$$)	db	0	; 填充剩下的空間,使生成的二進制代碼恰好爲512字節
dw 	0xaa55				; 結束標誌

2 生成引導文件boot.bin

nasm boot.asm -o boot.bin

3 製作虛擬硬盤

dd if=boot.bin of=a.img bs=512 count=1

4 編輯配置文件bochsrc

###############################################################
# Configuration file for Bochs
###############################################################

# how much memory the emulated machine will have
megs: 32

# filename of ROM images
romimage: file=./bios/BIOS-bochs-latest
vgaromimage: file=./bios/VGABIOS-lgpl-latest

# what disk images will be used
floppya: 1_44=a.img, status=inserted

# choose the boot disk.
boot: floppy

# where do we send log messages?
# log: bochsout.txt

# disable the mouse
mouse: enabled=0

# enable key mapping, using US layout as default.
keyboard_mapping: enabled=1, map=./gui/keymaps/x11-pc-us.map

注意配置文件中的相對路徑

5 運行實例

./bochs -f bochsrc

輸入6回車

輸入c回車

可見虛擬機已按照程序輸出"Hello, OS world!",Ctrl+C後輸入exit退出運行。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章