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