需要 前置操作 。
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 了。