已知 Debian11 repo 里面的 bochs 有问题,程序启动的时候会有类似下面的报错:
bx_dbg_read_linear: physical memory read error (phy=0x0000322f3530, lin=0x00000000322f3530)
Next at t=668577
(0) [0x0000fffffff0] f000:fff0 (unk. ctxt): jmpf 0xf000:e05b ; ea5be000f0
StackOverFlow 上也有人讨论了 这个问题 ,但没找到原因,给出的解决方法是自己编译一个。
查了查这个包的历史,发现 Debian 的 package builder 在把 2.6.9+dfsg-3 (main) [buster] 更新到 2.6.11+dfsg-4 (main) [bullseye] (更新记录) 时引入了 很多和 BIOS 相关的 patch ,而 buster 上使用 apt 安装的 bochs 可以正常使用,所以这个问题可能由这些新引进的 patch 引起。注意到其中一个 patch 和 BIOS ROM 有关,猜测问题可能和这个 patch 有关 (未做验证)。
所以,要使用的话只能自己从源码编译,以在 Debian11 (Gnome) 上编译 bochs-2.6.11 为例。
安装依赖后,进入源码目录:
sudo apt install build-essential libgtk2.0-dev libreadline-dev
cd bochs-2.6.11
关于依赖部分:
配置编译选项:
./configure \
--prefix=$HOME/.local/opt/bochs-2.6.11-bin \
--enable-readline \
--enable-debugger
这个配置对应的完整编译选项是:
./configure \
--prefix=$HOME/.local/opt/bochs-2.6.11-bin \
--enable-readline\
--enable-debugger --enable-debugger-gui --enable-iodebug \
--with-x11 \
--enable-xpm \
--enable-show-ips \
--enable-logging \
--enable-assert-checks \
--enable-cpu-level=6 \
--enable-fpu \
--enable-alignment-check \
--enable-a20-pin \
--enable-large-ramfile \
--enable-cdrom \
--enable-pci
需要注意,尽管 --with-x11 是 Linux 平台下的默认选项,但如果配置时使用了 --with-sdl2 但没有使用 --with-x11 ,那么 --with-x11 并不会被自动加上,因为 debugger-gui 的依赖已经被 --with-sdl2 满足了。
即,在配置编译选项时,如果没有显式地使用官方文档 编译选项 一节的 Configure Options to Select the Display Library 表中的选项,那么默认使用 --with-x ;一旦显式地使用了任意一个选项,要想启用 --with-x 就必须再次显式地写出来。
此时,使用 display_library: x, options="gui_debug" 启动 bochs 会报 display library 'x' not available ,因为在编译时 bochs 没有支持 x。在安装 libsdl2-dev 这个 sdl2 的依赖包以后,可以正常使用 display_library: sdl2, options="gui_debug" 启动 bochs。
要同时启用 sdl2 和 x 的支持需要把两个选项同时写上,即 --with-x --with-sdl2 。
编译并安装:
make -j2 && make install
得到的 $HOME/.local/opt/bochs-2.6.11-bin/bin/bochs 即是最终可以运行的 bochs 程序。