因为想要写一个简单的操作系统,所以需要安装虚拟机来模拟出硬件,VMware不适合这个场景,因为会使用硬件级别的虚拟化,而bochs这个开源虚拟机,是用软件虚拟了所有的硬件,所以调试可以做到非常细的粒度,比如每次cpu执行命令,我们都可以暂停,看寄存器状态,看内存状态,这对于操作系统开发调试的帮助太大太大了。所以我们使用bochs这个虚拟机来。
mac安装bochs
我的当前环境是Mac 版本是10.15.3,记录下安装的过程和踩的坑。
步骤:
- 安装 sdl 库,后续编译会用到
brew install sdl
- 下载源码并且解压
下载地址:https://sourceforge.net/projects/bochs/files/latest/download
# 下载解压
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
这里的 prefix 参数指定了安装的位置,修改成自己想要的地址。
这里出现了第一个问题:
问题1
报这个错误
cdrom_osx.cc:194:18: error: assigning to 'char ' from incompatible type 'const ch
于是在网上查了一下,这个报错有个补丁[https://raw.githubusercontent.com/Homebrew/formula-patches/e9b520dd4c/bochs/xcode9.patch],我们找到这个文件并且修改源码,这个文件在 `bochs-2.6/iodev/hdimage/cdrom_osx.cc`,我们打开修改第 193 行
if ((devname = strrchr(devpath, '/')) != NULL) {
改为:
if ((devname = (char *) strrchr(devpath, '/')) != NULL) {