最近在看操作系統及內核的一些內容,找到一本書寫自己的操作系統,順手練習,但是Mac10.10系統安不上Bochs啊,找了半天在StackFlow上找到了答案。Bochs的下載地址。
Mac10.10 Bochs的安裝
0x01 安裝SDL庫
在http://www.libsdl.org安裝,或者使用Homebrew來進行安裝。Homebrew的安裝命令brew
install sdl。
0x02 Configure Bochs
簡單的解壓命令tar -xvf bochs-2.6.tar.gz后,Configure需要的參數:
./configure --enable-ne2000 \
--enable-all-optimizations \
--enable-cpu-level=6 \
--enable-x86-64 \
--enable-vmx=2 \
--enable-pci \
--enable-usb \
--enable-usb-ohci \
--enable-e1000 \
--enable-debugger \
--enable-disasm \
--disable-debugger-gui \
--with-sdl \
--prefix=$HOME/opt/bochs
其中,--disable-debugger-gui被加入的原因是,debugger GUI需要使用GTK+庫,但是Mac OS X默認沒有安裝GTK+,所以就不啟用debugger GUI了。
0x03 Building and Installing Bochs
Configure好以后,常規的安裝。
make
make install
安裝完成后,可以加入環境變量一些內容
export BXSHARE="$HOME/opt/bochs/share/bochs"
export PATH="$PATH:$HOME/opt/bochs/bin"
Bochs的使用
因為在上面禁用了debuger GUI,所以使用bochs只能通過shell來進行了。使用《自己動手寫操作系統》筆記中生成的軟盤鏡像來做一個系統來啟動,它會產生一個輸出Hello,
OS World!。結果如下圖:
在bochs的安裝目錄下,有share/doc/bochs/bochsrc-sample.txt這個配置文件模板,可以拷貝出來修改,目前先做一個配置文件如下:
###############################################################
# Configuration file for Bochs(Linux)
###############################################################
# filename of ROM images
romimage: file=$BXSHARE/BIOS-bochs-latest
# VGAROMIMAGE
# You now need to load a VGA ROM BIOS into C0000.
vgaromimage: file=$BXSHARE/VGABIOS-lgpl-latest
# what disk images will be used
floppya: 1_44=YourIMGPath/TINIX.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. 注意map的路徑
keyboard_mapping: enabled=0, map=YourBochsPath/keymaps/x11-pc-us.map
# how much memory the emulated machine will have
megs: 32
在shell中運行bochs打開bochs
選擇2. Read options from...,然后輸入自己剛才配置文件的位置,如我的就是/Volumes/ExtendsDisk/tmp/bochsrc.txt,加載配置文件成功后,選擇6. Begin simulation開始模擬器,因為bochs是一個模擬器,並且會開始時下斷點,我們在6后需要再次輸入命令c,也就是continue來運行系統,如果正常,就會顯示上面那張HelloWorld的圖了。給出Bochs調試命令集合:
-*- Debugger control -*-
help, q|quit|exit, set, instrument, show, trace, trace-reg,
trace-mem, u|disasm, ldsym, slist
-*- Execution control -*-
c|cont|continue, s|step, p|n|next, modebp, vmexitbp
-*- Breakpoint management -*-
vb|vbreak, lb|lbreak, pb|pbreak|b|break, sb, sba, blist,
bpe, bpd, d|del|delete, watch, unwatch
-*- CPU and memory contents -*-
x, xp, setpmem, writemem, crc, info,
r|reg|regs|registers, fp|fpu, mmx, sse, sreg, dreg, creg,
page, set, ptime, print-stack, ?|calc
-*- Working with bochs param tree -*-
show "param", restore
Bochs 調試命令
參考文獻