【操作系统真象还原】Mac安装配置bochs

2022-05-06 15:48:40 浏览数 (1)

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编译时会报错

代码语言:javascript复制
brew install gcc
brew install sdl
brew install gtk 
brew install libxrandr

例如:

  • 缺少gtk 在make时可能会报错如下(gtk是基于界面底层库x11的一个界面库,用于在 linux 中绘制窗口界面,若是报错之后再安装gtk,则需要重新按第二步configure一下
代码语言:javascript复制
gtk_enh_dbg_osdep.cc:19:10: fatal error: 'gtk/gtk.h' file not found
#include <gtk/gtk.h>
  • 缺少libxrandr在make时可能会报错如下
代码语言:javascript复制
x.cc:42:10: fatal error: 'X11/extensions/Xrandr.h' file not found
#include <X11/extensions/Xrandr.h>

此外,笔者在进行gcc等软件包的安装时由于Homebrew问题频频报错,最终选择重装Homebrew后得以解决。当然,之前安装过的软件包也需要重装啦~

附Mac重装Homebrew无痛指南

  • Github链接超时报错
代码语言:javascript复制
Failed to connect to github.com port 443 after 75004 ms: Operation timed out

修改hosts文件

代码语言:javascript复制
vim /etc/hosts

hosts文件中添加以下信息(2022.4.30更新)

代码语言:javascript复制
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行,进行如下修改

代码语言:javascript复制
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行,进行如下修改

代码语言:javascript复制
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时输入该配置文件名即可

代码语言:javascript复制
# 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后,键入如下命令创建启动盘

代码语言:javascript复制
bin/bximage -hd -mode="flat" -size=60 -q hd60M.img

各个参数解释如下

-hd 创建硬盘 -mode 硬盘类型,有flat,sparse和growing三种 -size 硬盘大小,单位为MB -q 静态模式创建,创建过程中不会和用户交互

即在bochsrc.disk中的硬盘设置中新增如下启动盘信息

代码语言:javascript复制
# 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

0 人点赞