Ubuntu18.10安装bochs

bochs -f bochrush.txt

Posted by 婷 on March 23, 2020 本文总阅读量

前言

自从上次安装了跟哈工大李治军老师操作系统课程实验环境的一个docker后,因为x11ssh配置的原因,一直无法启动bochs模拟器,总是黑屏,所以索性自己不在docker里面操作了,直接在本机安装bochs

下载bochs

点击下载网址,我选择的是旧版的2.4.5。因为没发现自己apt源的问题导致自己以为最新版的bochs无法安装才选择了2.4.5。(事实证明并不是……)

1.png

点进去后选择bochs-2.4.5.tar.gz

2.png

编译bochs

我选择的是下载到自己的主用户目录下,下载后解压,在解压出来的文件夹下输入命令

./configure  -enable-debugger  -enable-disasm

3.png

命令执行后如果没有出现Makefile文件的话,可以自行去上网搜索问题的解决方法,这里就不赘述了,但是在安装的过程中,自己出现的一个无法安装libgtk2.0-dev的问题,网上没找到解决的方法,最后是猜测是软件源的问题,解决方法可以看上一个博客

一切编译中的问题解决后,有了Makefile文件,执行

sudo make

4.png

make结束后报错:DOS missing from command line

5.png

解决方法: 在MakefileLIBS = 这一行的最后面添加如下内容 : -lz -lrt -lm -lpthread

未添加前:

6.png

添加后

7.png

也即最后的内容是

LIBS =  -lm -lgtk-x11-2.0 -lgdk-x11-2.0 -lpangocairo-1.0 -latk-1.0 -lcairo -lgdk_pixbuf-2.0 -lgio-2.0 -lpangoft2-1.0 -lpango-1.0 -lgobject-2.0 -lglib-2.0 -lfontconfig -lfreetype -lz -lrt -lm -lpthread

修改之后一定要先make clean然后在执行make

make成功

8.png

执行安装命令

sudo make install

9.png

安装完成后,记住最后一行的显示信息,记住这个路径。

10.png

ok到这里bochs就安装结束了。

下载Linux0.11镜像

下载网址:点击这里

最终得到的镜像文件名字叫做bootroot-0.11

启动bochs

配置文件

在解压包出来的那个路径下,编写bochs启动的配置文件,我命名为bochrush.txt。(如果没有编写的话,会默认使用该目录下的一个配置文件,可以去上网搜索)

11.png

bochrush.txt:

#模拟器的内存  
megs:128  

#BIOS-bochs-latest的路径
romimage:file=/usr/local/share/bochs/BIOS-bochs-latest

#VGABIOS-lgpl-latest的路径
vgaromimage:file=/usr/local/share/bochs/VGABIOS-lgpl-latest  

#启动软盘,1_44后面就是我们下载的linux0.11镜像文件
floppya:1_44=bootroot-0.11,status=inserted 

#表示从软盘启动
boot:floppy   

#日志输出文件
log:bochsout.txt   

#友情提示不要设置为1
mouse: enabled=0

编写bochs配置文件的选项还有很多,可以参照原始的.bochsrc文件或者自己上网搜索。

关于vgaromimageromimage的路径,在上面提到的make install的时候,命令执行完成后显示的那个路径。

12.png

在上面的配置文件中没有指定bootroot-0.11镜像的路径,所以默认是跟bochrush.txt同个路径下,所以也要把镜像放在同个目录下。

13.png

启动

在刚刚的目录下启动bochs-f表示指定某个配置文件

bochs -f bochrush.txt

敲入命令后,选择6,开始模拟

14.png

按下6之后,出现了一个黑屏

15.png

这时候在终端的输入框里面输入c后再按回车

16.png

当当当,出来啦。如果想关闭bochs的话可以按下这个power按钮。

17.png

后续工作

安装bochs本意是为了完成操作系统的实验,现在加载的是已经从官网下载好的了linux0.11的镜像,接下来准备下载linux-0.11的源代码,编译出需要实现“自己功能”的镜像,同时放到bochs里面去模拟。