从源码编译带调试器的 Bochs
为什么需要源码编译
官方二进制包是"够用"配置,但 Bochs 的很多高级功能需要在编译时通过 configure 选项启用——这是 Bochs 和其他模拟器最大的不同之一。编译时决定的特性一旦编译完就不能改,比如:
- 是否内置调试器(
--enable-debugger) - 是否内置反汇编器(
--enable-disasm) - 是否支持 x86-64(
--enable-x86-64) - 是否支持 Intel VMX 虚拟化扩展(
--enable-vmx) - 是否支持 3DNow!、AVX、FMA 等指令集扩展
- 前端选择(wxWidgets / SDL / X11 / Win32 GUI / plain text)
OS 开发者通常会在 Windows 上装预编译包快速上手,但在 Linux / macOS 上编译自己的版本以获得完整的调试能力。
编译三件套
Bochs 使用经典的 configure → make → make install 流程。
第一步:configure 选特性
典型的 OS 开发者编译命令:
./configure --enable-debugger --enable-disasm --enable-x86-64 --disable-plugins
常用选项速查(按用途分组):
调试相关(OS 开发必用):
| 选项 | 说明 |
|---|---|
--enable-debugger | 内置调试器(默认关闭) |
--enable-disasm | 内置反汇编器(默认关闭) |
--enable-assert-checks | 额外断言检查(调试时有用) |
前端相关:
| 选项 | 说明 |
|---|---|
--with-wx | 使用 wxWidgets GUI(默认在 Windows/macOS 上开启) |
--with-sdl | 使用 SDL 前端(Linux 推荐) |
--with-x11 | 使用 X11 前端 |
--with-svn | 纯终端模式(无图形界面) |
指令集扩展:
| 选项 | 说明 |
|---|---|
--enable-x86-64 | x86-64 支持 |
--enable-vmx | Intel VMX 虚拟化扩展 |
--enable-3dnow | AMD 3DNow! |
--enable-avx | AVX/AVX2 |
--enable-fma | FMA |
其他:
| 选项 | 说明 |
|---|---|
--disable-plugins | 禁用插件(推荐,减少复杂性) |
--enable-readline | 调试器命令行用 GNU readline(支持方向键和历史) |
--prefix=/your/path | 安装目录 |
configure 跑完会在当前目录生成 Makefile 和 config.h。
第二步:make 编译
make -j$(nproc)
Bochs 是 C++ 大工程,编译时间取决于 CPU 核数和性能,在一台普通笔记本上大约 5~15 分钟。编译产物是当前目录下的 bochs 可执行文件(或 bochs.exe)。
第三步:make install 安装(可选)
如果希望系统范围可用,执行:
sudo make install
这会把 bochs 二进制、bximage 工具、BIOS 镜像安装到 prefix 指定的目录(默认 /usr/local/)。
对于 OS 开发者,通常不执行 make install,直接在源码目录里用编译好的 bochs 就行。这样可以方便地改源码、重编译、快速验证。
编译常见坑
缺少 GUI 库
configure 报 wxWidgets / SDL / X11 找不到——安装对应的开发包。Linux 上:
- Debian/Ubuntu:
apt install libwxgtk3.0-gtk3-dev libsdl2-dev libx11-dev - Fedora/RHEL:
dnf install wxGTK3-devel SDL2-devel libX11-devel
readline 找不到
--enable-readline 需要 GNU readline 开发包:
- Debian:
apt install libreadline-dev - macOS:
brew install readline
Windows 上编译
Bochs 官方推荐在 Windows 上用 MinGW / MSYS2 编译。configure 和 make 流程和 Linux 类似,只是部分库的获取方式不同。如果只是想快速上手,直接用官方预编译包更省心。
验证编译结果
编译完运行:
./bochs
如果带了 --enable-debugger,会停在 bochs:1> 调试提示。输入 show feature 可以看到编译时启用了哪些特性:
bochs:1> show feature
feature: debugger, disasm, x86-64
确认调试器和反汇编器都在,编译就成功了。