bochs是一个用来模拟IA32(x86)架构的模拟器,包括x86的CPU、通用输入输出I/O设备等。后续我们将使用bochs来运行自己编写的代码,因此也需要用到bochs提供的debug功能,所以本文采用源码编译的方式来安装。
源码方式安装
下载最新的源码
下载路径:https://sourceforge.net/projects/bochs/files/bochs/2.7/,下载后的包名称为bochs-2.7.tar.gz
。
编译源码&安装
-
解压下载的压缩包
tar zcf bochs-2.7.tar.gz
解压后会出现目录
bochs-2.7
。 -
配置编译选项
cd bochs-2.7
./configure --enable-debugger
打开bochs的debug功能,这样在运行bochs时可以使用类似
Linux
下的gdb
功能进行调试。 -
编译并安装
make
sudo make install
整个编译过程大概需要十分钟,编译完成后会生成
bochs
和bximage
两个可执行文件,bochs
就是模拟器本身二进制文件,bximage
则用于创建各种虚拟镜像(例如软盘镜像、硬盘镜像等)。默认会将这两个可执行文件安装到系统的/usr/local/bin
目录下。
安装完成后,在命令行输入bochs就可以打开模拟器了,此时是无法正常出现bochs的界面,因为需要提供bochs的配置文件,指定待模拟系统的一些配置,这个在后文会介绍如何使用bochs,此处不做深入探讨。
输入bochs后的界面:
========================================================================
Bochs x86 Emulator 2.7
Built from SVN snapshot on August 1, 2021
Timestamp: Sun Aug 1 10:07:00 CEST 2021
========================================================================
00000000000i[ ] BXSHARE not set. using compile time default '/usr/local/share/bochs'
------------------------------
Bochs Configuration: Main Menu
------------------------------
This is the Bochs Configuration Interface, where you can describe the
machine that you want to simulate. Bochs has already searched for a
configuration file (typically called bochsrc.txt) and loaded it if it
could be found. When you are satisfied with the configuration, go
ahead and start the simulation.
You can also start bochs with the -q option to skip these menus.
1. Restore factory default configuration
2. Read options from...
3. Edit options
4. Save options to...
5. Restore the Bochs state from...
6. Begin simulation
7. Quit now
Please choose one: [2]
问题及解决方案
一般问题会出现在编译前的配置过程,多为本地环境检测达不到要求,可以尝试打bochs-2.7``目录下的
configure`文件,根据错误提示分析下具体错误出现的位置以及错误出现的逻辑。多数情况下都是环境的配置不满足要求(例如某些依赖的库未安装),下面记录的问题是本文安装过程中碰到的。
-
运行
./configure
时提示"ERROR: X windows gui was selected, but X windows libraries were not found."原因在错误信息中已经提示的很清楚,因为我们需要使用gui界面,而本地环境没有检测到对应的
X windows gui
库,解决方案就是为本地环境安装X windows gui
库,命令如下:sudo apt install xorg-dev
-
运行
./configure
时提示"WARNING: The Bochs debugger gui cannot be compiled here, disabling it"错误提示中并未明确能看到原因,只知道是对应的gui库没有找到,通过提示信息找configure文件内容,发现提示附近的代码为:
ENH_DBG_OBJS="" if test "$gui_debugger" = 1; then if test "$bx_have_gtk_version" -ge 2; then ENH_DBG_OBJS="enh_dbg.o gtk_enh_dbg_osdep.o" $as_echo "#define BX_DEBUGGER_GUI 1" >>confdefs.h elif test "$DEFAULT_GUI" = win32 -o "$with_win32" = yes; then ENH_DBG_OBJS="enh_dbg.o win32_enh_dbg_osdep.o" $as_echo "#define BX_DEBUGGER_GUI 1" >>confdefs.h else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: , disabling it" >&5 $as_echo "$as_me: WARNING: The Bochs debugger gui cannot be compiled here, disabling it" >&2;} $as_echo "#define BX_DEBUGGER_GUI 0" >>confdefs.h fi fi
可以进一步去查看
gui_debugger
标志和bx_have_gtk_version
标志的赋值逻辑,此处不详细赘述,最终结果为需要安装gtk2.0和gtk3.0的开发库,命令如下:sudo apt install libgtk-3-dev
sudo apt install libgtk2.0-dev
附录
bochs官方链接:https://bochs.sourceforge.io/
-
本文所使用的环境
软件名称 软件版本 Linux操作系统 Ubuntu 22.04 LTS(X64) gcc 11.4.0