bochs安裝

最近想照着書和網上的資料寫一個微內核。用到一個模擬x86硬件環境的軟件bochs,下面來分享下安裝過程。

我的操作系統是Ubuntu12.04
如果你使用的也是Ubuntu操作系統,可以使用下面的命令來安裝Bochs:
從Bochs的官方網站http://bochs.sourceforge.net/下載最新的Bochs源代碼包,我下載的是bochs-2.6.2.tar.gz。

安裝過程差不多是這個樣子的:

$tar vxzf bochs-2.4.5.tar.gz
$cd bochs-2.4.5
$./configure --enable-debugger --enable-disasm
$make
$sudo make install
解釋一下上面幾行命令:
1. 解壓源代碼包bochs-2.4.5.tar.gz,生成文件夾bochs-2.4.5;
2. 進入bochs-2.4.5目錄;
3. 運行configure腳本,它會測試你的機器,C/C++編譯器以及一些庫,用來判斷何種配置適合於你的機器。其中命令行參數--enable-debugger --enable-disasm便是打開調試功能的開關。成功執行完configure腳本後,會在每個源代碼目錄下生成一個Makefile文件;
4. make根據第三步生成的Makefile文件從源代碼編譯整個Bochs;
5. 當整個Bochs編譯成功後,執行make install,會將Bochs的可執行文件、幫助文檔以及其它一些必要文件拷貝到系統相應的目錄下

Bochs已經安裝完畢。現在,我們已經有了計算機(Bochs),還差一張引導軟盤。既然計算機都可以虛擬,軟盤當然也可以。在剛剛裝好的Bochs組件中,有一個工具叫做bximage(見表1的第二項),它既能生成虛擬軟盤,也能生成虛擬硬盤,我們也稱它們爲磁盤映像。創建一個軟盤映像的過程如下所示:在命令行輸入bximage

========================================================================
                                bximage
                  Disk Image Creation Tool for Bochs
        $Id: bximage.c,v 1.34 2009/04/14 09:45:22 sshwarts Exp $
========================================================================
 
Do you want to create a floppy disk image or a hard disk image?
Please type hd or fd. [hd] fd
 
Choose the size of floppy disk image to create, in megabytes.
Please type 0.16, 0.18, 0.32, 0.36, 0.72, 1.2, 1.44, 1.68, 1.72, or 2.88.
 [1.44]
I will create a floppy image with
  cyl=80
  heads=2
  sectors per track=18
  total sectors=2880
  total bytes=1474560
 
What should I name the image?
[a.img]
 
Writing: [] Done.
 
The following line should appear in your bochsrc:
  floppya: image="a.img", status=inserted 


完成後,會在當前目錄下生成一個a.img文件,這便是我們的軟盤映像。
所謂磁盤映像文件(Disk Image File)是軟盤或硬盤上信息的一個完整映像,並以文件的形式保存。磁盤映像文件中存儲信息的格式與對應磁盤上保存信息的格式完全一樣。空磁盤映像文件是容量與我們創建的磁盤相同但內容全爲0的一個文件。這些空磁盤映像文件就像剛買來的新軟盤或硬盤,還需要經過分區及格式化才能使用。

有了磁盤映像,我們寫一個小小的引導扇區,可以參考《Orange's 一個操作系統的實現》,命名爲boot.asm。

org     07C00h                   ; 告訴編譯器程序加載到0000:7C00處
        mov    ax, cx
        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 = 13H, AL = 01H
        mov    bx, 000CH         ; 頁號爲0(BH = 0) 黑底紅字(BL = 0CH,高亮)
        mov    dl, 0       
        int    10H               ; 調用BIOS的10號中斷
        ret
BootMessage:          db    "Hello World!"   ; 要顯示的字符串
times   510-($-$$)    db    0    ; 填充剩餘空間,使生成的二進制代碼恰好爲512字節
dw      0XAA55                   ; 結束標誌

我們把這段代碼用NASM編譯一下:

$nasm boot.asm -o boot.bin

如果沒有安裝NASM,可以用如下命令進行安裝:

$sudo apt-get install nasm

編譯完成後,會在當前目錄生成一個512字節的boot.bin文件,使用dd命令將它寫進剛剛創建的軟盤映像a.img的第一個扇區

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

Ok,馬上就可以啓動Bochs了。不過別急,在啓動Bochs之前還需要爲運行系統預先設置一些模擬環境的參數。這些參數可以在命令行上傳遞給Bochs執行程序,但通常都使用一個文本形式的配置文件(例如bochsrc)爲專門的一個應用來設置運行參數。在目錄/usr/local/share/doc/bochs下有一個bochsrc-sample.txt,我們可以參照它來寫一個。這裏既有好消息也有壞消息,壞消息是這個文件很長,好消息是大部分都是註釋。

我們在當前目錄下新建一個文件,命名爲bochsrc(注意,沒有後綴)。

############################################################### 
# 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=/home/chen/exp/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=0, map=
 
#=======================================================================
# how much memory the emulated machine will have
#=======================================================================
megs: 32

萬事俱備,從終端進入當前目錄(假設是/home/mayuan,bochsrc與a.img也在這個目錄內),輸入命令:

$bochs

回車

最終可以看到如下界面



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