0 本机环境
- macOS Big Sur 11.1
- Bochs 2.6.2
1 Bochs下载解压
- 去「Bochs官网下载地址」下载
bochs-2.6.2.tar.gz
- 手动解压
bochs-2.6.2.tar.gz
压缩包 或 终端解压tar zxvf bochs-2.6.2.tar.gz
下面进入到Bochs的安装目录:
代码语言:javascript复制$ cd bochs-2.6.2
即将进行
- configure(配置 && 检测当前平台是否拥有所需依赖软件包,完成后生成Makefile)
- make(由Makefile进行编译)
- make install(安装)
2 configure
代码语言:javascript复制$ ./configure
> --prefix=/<自定义目录>/bochs # 指定bochs的安装目录
> --enable-debugger # 打开bochs调试器
> --enable-disasm # 使bochs支持反汇编
> --enable-iodebug # 启用IO接口调试器
> --enable-x86-debugger # 支持x86调试器
> --with-x # 使用x-windows
> --with-x11 # 使用x11图形用户窗口
> <按回车>
configure之后,会生成Makefile,遂即可进行编译
3 make前的软件包准备
需要本机提前装有gcc, sdl, gtk , libxrandr
软件包,否则make编译时会报错
brew install gcc
brew install sdl
brew install gtk
brew install libxrandr
例如:
- 缺少
gtk
在make时可能会报错如下(gtk是基于界面底层库x11的一个界面库,用于在 linux 中绘制窗口界面,若是报错之后再安装gtk,则需要重新按第二步configure一下)
gtk_enh_dbg_osdep.cc:19:10: fatal error: 'gtk/gtk.h' file not found
#include <gtk/gtk.h>
- 缺少
libxrandr
在make时可能会报错如下
x.cc:42:10: fatal error: 'X11/extensions/Xrandr.h' file not found
#include <X11/extensions/Xrandr.h>
此外,笔者在进行gcc
等软件包的安装时由于Homebrew问题频频报错,最终选择重装Homebrew后得以解决。当然,之前安装过的软件包也需要重装啦~
附Mac重装Homebrew无痛指南
- Github链接超时报错
Failed to connect to github.com port 443 after 75004 ms: Operation timed out
修改hosts
文件
vim /etc/hosts
在hosts
文件中添加以下信息(2022.4.30更新)
140.82.114.4 github.com
199.232.69.194 github.global.ssl.fastly.net
185.199.108.153 assets-cdn.github.com
185.199.109.153 assets-cdn.github.com
185.199.110.153 assets-cdn.github.com
185.199.111.153 assets-cdn.github.com
4 Bochs的编译与安装
现在我们可以进行bochs的编译与安装啦
代码语言:javascript复制$ make && make install
此时依然可能会报错
代码语言:javascript复制报错一
cdrom_osx.cc:194:18: error: assigning to 'char ' from incompatible type 'const ch
解决方法:打开bochs-<版本号>/iodev/hdimage/cdrom_osx.cc
文件193
行,进行如下修改
if ((devname = strrchr(devpath, '/')) != NULL) {
改为:
if ((devname = (char *) strrchr(devpath, '/')) != NULL) {
代码语言:javascript复制报错二
onfig.cc:3261:55: error: ordered comparison between pointer and zero
('char *' and 'int')
if (SIM->get_param_string("model", base)->getptr()>0) {
解决方法:打开bochs-<版本号>/config.cc
文件3261
行,进行如下修改
if (SIM->get_param_string("model", base)->getptr()>0) {
改为
if (SIM->get_param_string("model", base)->getptr()>(char *)0) {
再进行make && make install
之后Bochs安装成功!
5 配置Bochs硬盘启动文件
Bochs编译安装成功之后,需要配置Bochs启动信息,比如是从软盘还是从硬盘启动?可使用内存大小多少bulabula
在安装目录下有配置文件的模板文件: bochs/share/doc/bochs/bochsrc-sample.txt
可供参考,得到如下配置信息,保存为bochs/bochsrc.disk
即可,.disk
表示从硬盘启动,也可自定义文件名和后缀名,后期启动Bochs时输入该配置文件名即可
# Bochs启动配置文件
# 1.Bochs在运行中可使用的内存,设为32MB
megs: 32
# 2.设置对应真实机器的BIOS和VGA BIOS; 须为绝对路径,Bochs不识相对路径
romimage: file=/Users/sparks_fly/Documents/操作系统实战/bochs/share/bochs/BIOS-bochs-latest
vgaromimage: file=/Users/sparks_fly/Documents/操作系统实战/bochs/share/bochs/VGABIOS-lgpl-latest
# 3.选择启动盘符为硬件启动
boot: disk
# 4.日志输出
log: bochs.out
# 5.关闭鼠标,打开键盘
mouse: enabled=0
keyboard: keymap=/Users/sparks_fly/Documents/操作系统实战/bochs/share/bochs/keymaps/x11-pc-us.map
# 6.硬盘设置
ata0: enabled=1, ioaddr1=0x1f0, ioaddr2=0x3f0, irq=14
# ata0-master: type=disk, path="hd60M.img", mode=flat, cylinders=121, heads=16, spt=63
6 运行Bochs
6.1 bochs运行初尝试
- 在bochs安装目录中,命令行输入
bin/bochs -f bochsrc.disk
继续回车后,x11图形界面被打开,但目前为黑屏,需键入c再回车后即可出现书P50如下界面
6.2 创建启动盘
按书中提示,Boot Failed: could not read the boot disk
意味之前我们只是写了硬件启动盘的配置文件,但压根没有实际创建该启动盘,因此在点击Quit后,键入如下命令创建启动盘
bin/bximage -hd -mode="flat" -size=60 -q hd60M.img
各个参数解释如下
-hd 创建硬盘 -mode 硬盘类型,有flat,sparse和growing三种 -size 硬盘大小,单位为MB -q 静态模式创建,创建过程中不会和用户交互
即在bochsrc.disk
中的硬盘设置中新增如下启动盘信息
# 6.硬盘设置
ata0: enabled=1, ioaddr1=0x1f0, ioaddr2=0x3f0, irq=14
ata0-master: type=disk, path="hd60M.img", mode=flat, cylinders=121, heads=16, spt=63
此时重新启动后报错信息成功转变为not a bootable disk