2019-05-28 | UNLOCK

2019-5-28-自己动手写操作系统(2)

前言

学习完第一章后,成功运行了一个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的一种(图形用户界面的一种)
avatar

因为 Bochs 是用C++写的,所以这里要安装GNU gcc/g++编译器。

1
2
3
4
sudo apt-get install build-essential 
sudo apt-get install xorg-dev
sudo apt-get install bison
sudo apt-get install g++

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启动了
avatar

3、bochs2.6.9运行遇到的各种错误及解决方法

这里运行成功,但是最后却报错了,安装过程应该没问题,但是配置出现了错误,因此修改bochsrc文件(能运行bochs但出错了,基本都是配置的错误)
先备份bochrc

1
cp ./.bochsrc /home/stars/bochsrc.bak

根据报错信息

1
2
00000000000e[      ] .bochsrc:187: wrong value for parameter 'model'
00000000000p[ ] >>PANIC<< .bochsrc:187: cpu directive malformed.

可见是cpu的model设置错了
解决方法如下:
先查看bochs有哪些cpu model

1
bochs -help cpu

avatar
因为我的cpu是intel core所以我把cpu model改成core_duo_t2400_yonah
avatar
注释内容是默认配置

修改配置后又遇到了新的错误:

1
.bochsrc:915: Bochs is not compiled with lowlevel sound support

avatar
解决方法如下:
注释掉915行的sound(vim小技巧, : n 可以直接跳到第n行)
avatar

再次运行bochs
avatar
成功运行

安装步骤参考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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#注意'#'后面为注注释内容

#模拟器的内存
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

#这个是启动软盘,就是我们下载的那个,就在当前目录下,如果不在当前目录,需要指明路径
floppya:1_44=boot.img,status=inserted

#表示从软盘启动
boot:floppy

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

#选项还有很多,想了解更多可以参照原始的.bochsrc文件(在bochs-2.6.9/目录下)

配置文件写好后就执行

1
bochs -f bochsrc (-f 选项表示指定配置文件,后面跟着我们刚写好的配置文件名)

之后输入c,也就是continue,就能运行boot.img
avatar
可以看到虚拟机界面左上角出现了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

评论加载中