文章目录
Visual Studio 2019 编译 bochs
笔者喜欢折腾,其实在Windows上使用Cygwin和MinGW都是可以直接编译bochs的,尽管你也可以直接下载官网已经编译好的bochs二进制安装文件,其中包含了不带调试(bochs.exe)和带调试(bochsdbg.exe)的bochs程序足以满足大部分需求,但是如果你需要启用一些额外的功能,则必须添加一些参数重新编译才行。
下载安装Cygwin或者MinGW/Msys2
Cygwin
MinGW/Msys2
我安装的是cygwin,需要安装以下软件:
- 安装gcc软件
- 安装make
- 安装subversion
- 安装vim
- 安装unzip
下载bochs源码
# Cygwin的终端中执行
# 进入E盘根目录
cd /cygwin/drivers/e/
# 检出bochs2.7版本源码
svn co http://svn.code.sf.net/p/bochs/code/tags/REL_2_7_FINAL/bochs
生成Visual Studio 2019 项目解决方案
我根据bochs官方文档在Win32上编译Bochs完成编译步骤:
# 进入 bochs根目录
cd bochs
# 备份.conf.win64-vcpp
cp .conf.win64-vcpp .conf.win64-vcpp2
# 使用vim编辑.conf.win64-vcpp2,如果你不熟悉vim,可以选择其他文本编译软件
# 注意:你在VIM中可能看到:
# ./configure --option1 \
# --option2 \
# --option3 --option4
# 每行的结尾\作用是表明该行还没有结束哦,注意\斜杠之后不能有其他字符哦。
vim .conf.win64-vcpp2
.conf.win64-vcpp2的configure参数如下(注意:斜杠之后不能有其他字符,如果你有其他参数,可以自行添加):
./configure --target=x86_64-windows \
--enable-sb16 \
--enable-ne2000 \
--enable-all-optimizations \
--enable-cpu-level=6 \
--enable-x86-64 \
--enable-vmx=2 \
--enable-pci \
--enable-clgd54xx \
--enable-voodoo \
--enable-usb \
--enable-usb-ohci \
--enable-usb-ehci \
--enable-usb-xhci \
--enable-busmouse \
--enable-es1370 \
--enable-e1000 \
--enable-show-ips \
--disable-readline \
--without-x \
--with-win32 \
--with-rfb \
--with-nogui \
--enable-debugger-gui \
--enable-debugger \
--enable-x86-64 \
--enable-a20-pin \
--enable-long-phy-address \
--enable-ltdl-install \
--enable-smp \
--enable-large-ramfile \
--enable-repeat-speedups \
--enable-fast-function-calls \
--enable-trace-linking \
--enable-configurable-msrs \
--enable-show-ips \
--enable-iodebug \
--enable-logging \
--enable-assert-checks \
--enable-fpu \
--enable-svm \
--enable-3dnow \
--enable-alignment-check \
--enable-monitor-mwait
修改完成后,生成VC解决方案:
# 执行以下命令
# 进入bochs源码根目录
cd bochs
# 运行sh脚本,或者执行:sh .conf.win64-vcpp2
./.conf.win64-vcpp2
# 然后执行
make win32_snap
# 如果你多次执行此步骤会出现是否覆盖的提示消息,输入A,回车就好了
# 例如:
# replace vs2019/avx.vcxproj? [y]es, [n]o, [A]ll, [N]one, [r]ename: A
# 当构建完成会在bochs的源码根目录下生成一个bocs-msvc-src.zip文
# 件。
# 切换到bochs源码根目录的上级目录
cd ..
# 清理并创建VS解决方案目录bochs_win
rm -rf bochs_win && mkdir bochs_win
# 解压vs2019解决方案到bochs_win
unzip -q -d bochs_win bochs-msvc-src.zip
# 解决vs2019解决方案编译时找不到文件的问题,将cpp文件重命名位cc
# 文件
find bochs_win/bochs/ -name "*.cpp" | while read id; do mv ${id} ${id%%.cpp}.cc; done
实际上我们可以直接执行:
# 在bochs源码根目录的同级目录下执行:
cd bochs && \
./.conf.win64-vcpp2 && \
make win32_snap && \
cd .. && \
rm -rf bochs_win/ && \
mkdir bochs_win/ && \
unzip -q -d bochs_win bochs-msvc-src.zip && \
find bochs_win/bochs/ -name "*.cpp" | while read id; do mv ${id} ${id%%.cpp}.cc; done
最终在bochs_win目录下生成:bochs的vs2019解决方案,用vs2019打开就行了。由于我们使用的是64位编译的,我们必须把解决方案的平台改成x64才能编译成功。具体编译方式如下:
-
打开配置管理器
-
创建新的解决方案平台为x64
-
设置bochs为启动项目,再点击重新生成。
-
第三步可以如下替代,设置启动项目,然后生成解决方案:
最终会在解决方的根目录下生成一个obj-release或者obj-debug目录,里面会有4个exe文件:bochs.exe、bxhub.exe、bgimage.exe、niclist.exe。我们用这四个文件替换bochs安装目录下的文件就可以了。
可能遇到的错误的解决方法
如果用vs2019编译发生了错误,最可能的是configure参数存在问题,找出这些参数,不使用就行了,然后重新configure和make一下,生成新的解决方案,下面是官方总结的一些在configure或者make或者编译时会出现的问题:Bochs编译错误解决方法