在ubuntn16中安裝和運行bochs2.6.11

今天閒來無事,把於淵的大作《一個操作系統的實現》的第一章又仔細看了一遍.

這裏把實驗過程記錄下來,供後來者參考.

主要參考了

https://www.cnblogs.com/lfri/p/11489223.html

https://www.jianshu.com/p/dca5270d7310

兩篇文章裏的步驟.這裏表示感謝.

一、安裝bochs

1、我的硬件環境爲dell筆記本insprion 5580

2、首先在dell上安裝ubutn16.04 lts.過程略

3、下載bochs源碼.地址爲

https://jaist.dl.sourceforge.net/project/bochs/bochs/2.6.11/bochs-2.6.11.tar.gz

4.進入到源碼所在目錄.執行

sudo tar zxvf bochs-2.6.11.tar.gz
cd bochs-2.6.11

5.執行

sudo ./configure --enable-debugger --enable-disasm

注意參數開頭是兩個減號,我第一次實驗的時候就少輸了一個,然後就得到一堆錯誤...

 

6.此時會自動生成一個Makefile文件

要修改它的內容,把第88行改爲

CXXFLAGS = -std=c++11 -g -O2 -D_FILE_OFFSET_BITS=64 -D_LARGE_FILES -pthread  $(X_CFLAGS) $(MCH_CFLAGS) $(FLA_FLAGS)  -DBX_SHARE_PATH='"$(sharedir)"'

即在右邊的開頭加入編譯選項 -std=c+11,

否則的話下一步的make會編譯不過!

7.執行

sudo make

8執行

sudo make install

9.執行bochs命令如果有輸出,就說明bochs安裝成功

二、寫一個最簡單的loader

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、執行

nasm -o boot.bin boot.asm

編譯成功後會得到一個boot.bin文件

3、執行

bximage

這個命令的功能是製作一個軟盤鏡像文件

選擇1製作軟盤,然後選擇fd,然後剩下的直接回車就好了。現在的工作文件夾下生成一個a.img文件,這就是我們的軟盤了。

如果想用命令行一次生成a.img,可以用下面的命令

bximage -q -mode=create -fd=1.44M a.img

4、執行

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

這是把剛纔寫好的二進制啓動代碼寫入軟盤的引導扇區

5、新建一個bochsrc文件,內容爲:

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

# filename of ROM images
romimage: file=/usr/local/share/bochs/BIOS-bochs-latest
vgaromimage: file=/usr/local/share/bochs/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=1

# enable key mapping, using US layout as default.
keyboard:keymap=/usr/local/share/bochs/keymaps/x11-pc-us.map

這裏的關鍵點就是要正確設置romimage和vgaromimage的路徑.

6、執行

bochs -q -f bochsrc

如果不加-q參數,運行後可能無法結束虛擬機

7、

然後在終端窗口輸入c,表示真正執行這個虛擬機,就會看到helloword

8、在虛擬機窗口裏用鼠標點右上角的電源圖標,即可關閉虛擬機

 

 

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