1. 程式人生 > >Bochs原始碼安裝及執行除錯

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!",輸入exit退出執行。