需要 前置操作 。
1. 安裝必要環境
假設 WSL 是全新安裝的,裡面大部分依賴都沒裝,是以先裝一些必要的庫。
必備 g++
sudo apt-get install g++
make 也要裝
sudo apt-get install make
還有一些用到的庫
sudo apt-get install libx11-dev xserver-xorg-dev xorg-dev
2. 安裝 Bochs
使用 wget 從官方位址 https://sourceforge.net/projects/bochs/files/bochs/ 下載下傳,我下的是 2.6.11 版本。
wget https://sourceforge.net/projects/bochs/files/bochs/2.6.11/bochs-2.6.11.tar.gz
解壓
tar zxvf bochs-2.6.11.tar.gz
cd bochs-2.6.11/
配置
這裡主要使用《作業系統真象還原》裡的配置方法,由于 WSL 目前還不支援 GUI(馬上要支援了),是以配置裡先不加 GUI:
./configure \
--prefix=/your_path/bochs \
--enable-debugger \
--enable-disasm \
--enable-iodebug \
--enable-x86-debugger \
--with-x \
--with-x11
說明一下 configure 裡的參數
--prefix=/your_path/bochs
指定 bochs 安裝目錄,将 your_path 替換為你自己的目錄,或者不使用這個參數,安裝到預設目錄。
--enable-debugger
打開 bochs 自己的調試器
--enable-disasm
使 bochs 支援反彙編
--enable-iodebug
啟用 io 接口調試器
--enable-x86-debugger
支援 x86 調試器
--with-x
使用 x windows
--with-x11
使用 x11 圖形使用者接口
然後
sudo make
sudo make install
完成安裝。
3. 配置 Bochs
進入 bochs 的安裝目錄,然後在 bochs 安裝目錄下建立一個 bochsrc 配置檔案(bochs 預設會在檔案夾下搜尋該檔案),裡面輸入一下配置,配置裡的 實際路徑 替換為自己的路徑:
這裡使用 2.6.11 版本的 bochs,配置檔案可能和老版本的會有不一樣的地方,可以在官網檢視。
#第一步,首先設定 Bochs 在運作過程中能夠使用的記憶體,本例為 32MB
megs: 32
#第二步,設定對應真實機器的 BIOS 和 VGA BIOS
romimage: file=/實際路徑/bochs/share/bochs/BIOS-bochs-latest
vgaromimage: file=/實際路徑/bochs/share/bochs/VGABIOS-lgpl-latest
#第三步,設定 Bochs 所使用的磁盤,軟碟的關鍵字為 floppy。
#若隻有一個軟碟,則使用 floppya 即可,若有多個,則為 floppya,floppyb…
#floppya: 1_44=a.img, status=inserted
#第四步,選擇啟動盤符
#boot: floppy #預設從軟碟啟動,将其注釋
boot: disk #改為從硬碟啟動。我們的任何代碼都将直接寫在硬碟上,是以不會再有讀寫軟碟的操作
#第五步,設定日志檔案的輸出
log: bochsout.txt
#第六步,開啟或關閉某些功能
#下面是關閉滑鼠,并打開鍵盤
mouse: enabled=0
keyboard: keymap=/實際路徑/bochs/share/bochs/keymaps/x11-pc-us.map
# 硬碟設定
ata0: enabled=1, ioaddr1=0x1f0, ioaddr2=0x3f0, irq=14
建立完成後,在該目錄下輸入
bin/bochs
測試配置結果。
可以看到,bochs 自動從目錄下找到了 bochsrc 檔案并讀取了配置。後面的選項預設變成了 6,輸入 6 下一步。如果沒問題,會跳出一個 Bochs 模拟器。
在終端中先輸入
exit
退出。
4. 建立虛拟硬碟
使用 bximage 來建立虛拟硬碟,可以使用
bin/bximage --help
來看各個參數的意思。
bin/bximage -mode="create" -hd=60 -imgmode="flat" -q hd60M.img
這裡建立一個名字為 hd60M 的磁盤,大小為 60MB。
從最後兩段中可以看出,需要把最後一句加入配置檔案 bochsrc 中。再次運作
bin/bochs
,沒錯就 OK 了。