前言
学习完第一章后,成功运行了一个OS版的hello world,第二章主要是讲环境搭建以及之后实验在各种平台可能用到的各种工具,组合五花八门,因为是05年的书,我参考了网上近两年的博客后决定使用linux下的bochs作为之后os的调试工具
第一步:安装bochs
环境:VM14+Ubuntu16.04
1、配置bochs所需环境
Bochs 需要在 X11 环境下运行,因此你的 Linux 系统必须已经安装了X Window 系统才能使用Bochs
关于这一点可以在自己的linux通过ps -e|grep ‘tty’查看,可以看到ubuntu16运行了Xorg,这是X windows的一种(图形用户界面的一种)
因为 Bochs 是用C++写的,所以这里要安装GNU gcc/g++编译器。
1 | sudo apt-get install build-essential |
2、随后便是安装bochs了
先在https://sourceforge.net/projects/bochs/files/下载压缩文件(其实也可以用sudo apt-get install vgabios bochs bochs-x bximage来安装,但缺点是这样安装的bochs默认是不能进行调试的)
之后解压
1 | sudo tar zxvf bochs-2.6.9.tar.gz |
随后进入bochs-2.6.9目录,运行configure脚本,它会测试你的机器,C/C++编译器以及一些库,用来判断何种配置适合于你的机器。运行:
1 | sudo ./configure --enable-debugger --enable-disasm |
(这两个是用来开启调试和反汇编功能)
第3步正确运行后,会产生一个Makefile文件,然后
1 | sudo make |
最后安装bochs
1 | sudo make install |
安装成功后就可以在终端内输入bochs启动了
3、bochs2.6.9运行遇到的各种错误及解决方法
这里运行成功,但是最后却报错了,安装过程应该没问题,但是配置出现了错误,因此修改bochsrc文件(能运行bochs但出错了,基本都是配置的错误)
先备份bochrc
1 | cp ./.bochsrc /home/stars/bochsrc.bak |
根据报错信息
1 | 00000000000e[ ] .bochsrc:187: wrong value for parameter 'model' |
可见是cpu的model设置错了
解决方法如下:
先查看bochs有哪些cpu model
1 | bochs -help cpu |
因为我的cpu是intel core所以我把cpu model改成core_duo_t2400_yonah
注释内容是默认配置
修改配置后又遇到了新的错误:
1 | .bochsrc:915: Bochs is not compiled with lowlevel sound support |
解决方法如下:
注释掉915行的sound(vim小技巧, : n 可以直接跳到第n行)
再次运行bochs
成功运行
安装步骤参考https://www.linuxidc.com/Linux/2016-10/135905.htm
错误调试步骤参考https://www.cnblogs.com/lr-ting/p/10585836.html
第二步:在bochs上加载img
首先是在**/bochs-2.6.9目录下创建新目录minios,然后把要运行的镜像boot.img拷贝进去
随后在minios目录下创建配置文件bochsrc
1 | vim bochsrc |
配置内容如下
1 | #注意'#'后面为注注释内容 |
配置文件写好后就执行
1 | bochs -f bochsrc (-f 选项表示指定配置文件,后面跟着我们刚写好的配置文件名) |
之后输入c,也就是continue,就能运行boot.img
可以看到虚拟机界面左上角出现了hello world,运行成功,之所以界面很乱,是因为我们的boot.img只是在屏幕的左上角显示hello world,在此之前并没有清空屏幕,所以bochs初始化遗留的内容还保留在屏幕上
在加载虚拟机之前
[0x0000fffffff0] f000:fff0 (unk. ctxt): jmpf 0xf000:e05b ; ea5be000f0
其中jmpf 0xf000:e05b指的是跳转到ROM-BIOS的地址,随后我们输入c,才会加载镜像。
加载boot.img镜像的步骤参考自https://blog.csdn.net/the_chosen_1/article/details/88918766#linux011_48
评论加载中