Bochs安装

谨以此篇博客记录长达一个星期之久的bochs安装之旅

实测Ubuntu18.04及Ubuntu20.04均可通过自带软件仓库顺利安装并使用,安装指令,远离折腾烦恼

sudo apt-get install bochs bochs-x

问题

选用系统:debian11
debian11自带软件仓库按理来说也是可以通过以上命令进行安装的,要是如此简单恐怕一分钟就可以完结收工了,可偏偏事与愿违。
助教进行实验讲解时就说了,Ubuntu22.04会出现问题,如这个链接所示,表明了其Ubuntu22.04安装软件仓库中自带的Bochs2.7所遭遇的问题,无法正常启动。

先前也没当回事,毕竟debian以稳定著称,想必包管理器中所提供的应该是较为稳定可以运行的版本。可等我敲完命令,竟也遭遇了相同的问题。Bochs无论输入多少次c,始终没有输出期许的结果,可以看到以下报错
problem1.png
problem2.png
真奇怪,明明Bochs的版本是2.6.11,看来不只是2.7版本存在问题,2.6.11同样存在问题

problem4.png

试了很多次,看来依靠本来的包管理器是不行了,只能尝试自己下载编译一份了。

操作

官网下载2.7版本

https://sourceforge.net/projects/bochs/files/bochs/2.7/bochs-2.7.tar.gz/download

进入下载的目标目录,比如我这里就是“下载”目录,打开终端执行解压缩

tar -zxvf bochs-2.7.tar.gz

获得解压后的文件夹bochs-2.7

xxx@debian:~/下载$ ls
1-lexer-antlr.pdf bochs-2.7
2-lexer-re.pdf bochs-2.7.tar.gz
3-lexer-handwritten.pdf code_1.76.2-1678817801_amd64.deb
4-lexer-automata.pdf google-chrome-stable_current_amd64.deb

进入解压后文件夹

cd bochs-2.7

执行

./configure --prefix=/home/xxx/bochs --enable-debugger --enable-iodebug --enable-iodebug --enable-x86-debugger --with-x --with-x11
# xxx替换为自己的用户名即可

原本看的教程是

./configure --prefix=/home/xxx/bochs --enable-debugger --enable-disasm --enable-iodebug --enable-iodebug --enable-x86-debugger --with-x --with-x11

但会报一个小的Warning

WARNING: unrecognized options: --enable-disasm

使用以下命令查看可选项

./configure -help

会发现2.7版本为

--enable-show-ips       show IPS in Bochs status bar / log file (yes)
--enable-cpp use .cpp as C++ suffix (no)
--enable-debugger compile in support for Bochs internal debugger (no)
--enable-debugger-gui compile in support for Bochs internal debugger GUI
(yes, if debugger is on)

2.6.11对应位置为

--enable-show-ips       show IPS in Bochs status bar / log file (yes)
--enable-cpp use .cpp as C++ suffix (no)
--enable-debugger compile in support for Bochs internal debugger (no)
--enable-disasm compile in support for disassembler (no)
--enable-debugger-gui compile in support for Bochs internal debugger GUI
(yes, if debugger is on)

正好缺少–enable-disasm选项,也不知道什么情况,可能已经不是可选项了?还是写文档疏忽大意了?

确保你的操作系统已经安装有gcc,g++,查看方式

gcc -v

没有则使用如下命令进行安装

sudo apt update
sudo apt install build-essential

执行

make

没有报错继续执行

make install

当然你可能碰到许多奇奇怪怪的报错,我也一样,这里是我所参考的教程
https://zhuanlan.zhihu.com/p/35437842 很多可能的报错也都指出了。

要说这篇文章没被解决的问题,倒是有一个
problem5.png

如上图所示,不过也找到了解决方法

额,想复现错误好像不行了,原本的解决方法是要更改某.cc文件的头文件的,好奇怪。而且重新看了参考的教程,其实该问题很有可能是上面某问题的一种表现形式。

至此安装就算完成了,可以查看一下文件存放的位置,如果都是按照我的步骤来的话,应该会看到用户目录下多出一个bochs目录

xxx@debian:~/桌面$ cd
xxx@debian:~$ ls
公共 模板 视频 图片 文档 下载 音乐 桌面 bochs
xxx@debian:~$ cd bochs
xxx@debian:~/bochs$ ls
bin share

验证安装成功

随便打开一个终端,敲入

/home/xxx/bochs/bin/bochs
# xxx处填用户名

出现

========================================================================
Bochs x86 Emulator 2.7
Built from SVN snapshot on August 1, 2021
Timestamp: Sun Aug 1 10:07:00 CEST 2021
========================================================================

至此安装成功

改进

每次都得敲一长串命令,显然费时费力,将其设置别名也可直接添加到环境变量中

vim ~/.bashrc

添加

alias bochs='/home/xxx/bochs/bin/bochs'
alias bximage='/home/xxx/bochs/bin/bximage'

立即生效

source ~/.bashrc

测试

随便在某一位置打开终端,输入

bochs

出现

========================================================================
Bochs x86 Emulator 2.7
Built from SVN snapshot on August 1, 2021
Timestamp: Sun Aug 1 10:07:00 CEST 2021
========================================================================

配置完成

实操

创建软盘

xxx@debian:~/桌面/OS/lab1/t2$ bximage
========================================================================
bximage
Disk Image Creation / Conversion / Resize and Commit Tool for Bochs
$Id: bximage.cc 14091 2021-01-30 17:37:42Z sshwarts $
========================================================================

1. Create new floppy or hard disk image
2. Convert hard disk image to other format (mode)
3. Resize hard disk image
4. Commit 'undoable' redolog to base image
5. Disk image info

0. Quit

Please choose one [0] 1

Create image

Do you want to create a floppy disk image or a hard disk image?
Please type hd or fd. [hd] fd

Choose the size of floppy disk image to create.
Please type 160k, 180k, 320k, 360k, 720k, 1.2M, 1.44M, 1.68M, 1.72M, or 2.88M.
[1.44M]

What should be the name of the image?
[a.img]

Creating floppy image 'a.img' with 2880 sectors

The following line should appear in your bochsrc:
floppya: image="a.img", status=inserted



创建boot.asm

touch boot.asm

该文件中写入以下内容

	org 07c00h
mov ax, cs
mov ds, ax
mov es, ax
call DispStr
jmp $
DispStr:
mov ax, BootMessage
mov bp, ax
mov cx, 16
mov ax, 01301h
mov bx, 000ch
mov dl, 0
int 10h
ret
BootMessage: db "Hello, OS World"
times 510-($-$$) db 0
dw 0xaa55

终端执行

nasm boot.asm -o boot.bin

写入软盘

xxx@debian:~/桌面/OS/lab1/t2$ dd if=boot.bin of=a.img bs=512 count=1 conv=notrunc
记录了1+0 的读入
记录了1+0 的写出
512字节已复制,0.000373033 s,1.4 MB/s

创建bochsrc

touch bochsrc

该文件写入

megs: 32
display_library: x
floppya: 1_44=a.img, status=inserted
boot: floppy

执行

xxx@debian:~/桌面/OS/lab1/t2$ bochs -f bochsrc 

Please choose one: [6]
回车

<bochs:1> c
# 输入c回车

成功
success.png

至此全部结束,我们已经成功在debian11上安装启动了Bochs