一. bochs环境部署

配置要求

一台linux操作系统的机器即可,最好是32位的。因为我们实现的小kernel是32位的,在64的机器上进行编译和链接可能会出现某些问题。笔者这里使用的是Ubuntu16.4

环境配置

bochs安装与配置

安装

我们自制的操作系统也是运行在一个虚拟机中的,这里我们用的是bochs,bochs本身也是基于x86架构的,这也是我之前说我们的小kernel也是32位的原因
bochs下载地址

点击链接之后你会看到如下界面
bochs版本

我是使用的最新版本2.6.9的,大家也可以和我选择一样的版本

进入2.6.9版本的链接之后大家应该会看到如下界面mark

大家下载我标箭头的文件到你的虚拟机上即可。

其实我们也可以通过

1
sudo apt install bochs

这个命令进行安装,我不用这个方法安装的原因是安装之后的bochs文件比较分散,造成配置时比较麻烦,自己下载的文件进行安装时配置文件都在一起,管理起来方便

好了,文件下载好了之后

1
tar -zxvf bochs-2.6.9.tar.gz

解压之后的文件如图
mark

进入到bochs-2.6.9的目录中,输入

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

prefix中的路径请换成自己对应的安装路径

接下来输入

1
make

一段时间之后可能会出现如下错误

mark

因为我这里是一台全新的虚拟机,有许多库都没有安装,可能你们不会出现,如果出现了这个错误之后,安装x11的lib库即可

1
sudo apt install libx11-dev

继续make,出现如下错误

mark

1
sudo apt-get install libxrandr-dev

继续make

mark

看到这个就说明离成功只有一步之遥了,哈哈

在之前的配置中加上libs=’-lx11’,完整的配置如下

1
./configure --prefix=/home/ba/bochs --enable-debugger --enable-disasm --enable-iodebug --enable-iodebug --enable-x86-debugger --with-x --with-x11 libs='-lx11'

大家不要忘了把prefix的路径改为自己想安装的路径,接下来make。可以看到没有错误提示了。如果大家出行其他错误可以自行百度。

下一步

1
make install

mark

大家可以看看自己的安装目录下是否出现这个文件夹,安装目录参考自己配置文件中填写的路径

配置

安装好了bochs之后我们要对它进行配置,这个配置大家可以参考安装目录下的bochsrc-sample.txt,该文件的路径在bochs目录下的

1
share/doc/bochs/bochsrc-sample.txt

因为bochs在运行的时候要加载我们的配置文件,这个配置文件需要我们自己指定,所以我把配置文件放在了bochs目录下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
cd bochs
vim bochsrc.disk

// 配置如下
#首先设置 Bochs 在运行过程中能够使用的内存,本例为 32MB。
#关键字为 megs
megs 32

#设置对应真实机器的 BIOS 和 VGA BIOS 。
#对应两个关键字为 : romimage 和 vgaromimage
romimage: file=/home/ba/bochs/share/bochs/BIOS-bochs-latest
vgaromimage: file=/home/ba/bochs/share/bochs/VGABIOS-lgpl-latest

#选择启动盘符
boot: disk #从硬盘启动

# 设置日志文件的输入位置
log: bochs.out

# 关闭鼠标,打开键盘
mouse: enabled=0
keyboard: keymap=/home/ba/bochs/share/bochs/keymaps/x11-pc-us.map

# 设置硬盘
ata0: enabled=1,ioaddr1=0x1f0, ioaddr2=0x3f0, irq=14

大家在写配置文件的时候一定要把这些路径写成绝对路径,不要使用相对路径,因为bochs不认相对路径

配置文件写完了,那我们运行一下bochs试试, 看看是什么样子

在bochs的目录下输入

1
bin/bochs

接下来就会看到如下界面

mark

可以看到默认的选项是2,要求我们输入配置文件的名称,此时输入bochsrc.disk即可,也就是以前我们写的配置文件的名称。

mark

在我们输入配置文件按下回车之后可以看到,报了一个PANIC级别的错误,意思是我们没有启动盘,因为bochs是模拟的操作系统进行运行,此时我们还没有启动盘,所以它不知道从哪里开始运行,接下来我们就开始创建启动盘

mark

mark

图中需要我们输入的地方我用红色的方框标记出来了,60代表该硬盘的大小为60M,hd60M.img是我给改硬盘取得名字,最后一行用绿色标记的是我们需要加入到配置文件中的,这是我们硬盘配置好之后,bochs给我们自动生成的硬盘信息,接下来在配置文件的最后一行加上该硬盘的信息

完整的配置如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#关键字为 megs
megs 32

#设置对应真实机器的 BIOS 和 VGA BIOS 。
#对应两个关键字为 : romimage 和 vgaromimage
romimage: file=/home/ba/bochs/share/bochs/BIOS-bochs-latest
vgaromimage: file=/home/ba/bochs/share/bochs/VGABIOS-lgpl-latest

#选择启动盘符
boot: disk #从硬盘启动

# 设置日志文件的输入位置
log: /home/ba/bochs/bochs.out

# 关闭鼠标,打开键盘
mouse: enabled=0
keyboard: keymap=/home/ba/bochs/share/bochs/keymaps/x11-pc-us.map

# 设置硬盘
ata0: enabled=1,ioaddr1=0x1f0, ioaddr2=0x3f0, irq=14

# 启动盘信息
ata0-master: type=disk, path="home/ba/bochs/hd60M.img", mode=flat

硬盘信息配置好了之后我们初步的配置就已经搞定了,接下来我们在此启动一下试试

1
bin/bochs -f bochsrc.disk

通过-f 可以直接指定我们的配置文件的名称,如果嫌麻烦,每次必须进入bochs文件下,都要输入这么多字的话,可以直接用别名来代替

1
2
3
4
5
6
cd ~
vim .bashrc

alias bochs='/home/ba/bochs/bin/bochs -f /home/ba/bochs/bochsrc.disk'

source .bashrc

mark

当然,路径得改成你们自己的。接下来我们就可以在任意路径下输入bochs运行我们的虚拟机啦,此时如果你想运行看看结果的话,大概就是这样吧

mark

咳咳,这样其实说明一切都准备好了,属于正常现象,如果不是这样,可能您需要回头再看看自己是不是哪里配置出现了问题。

出现这用错误的原因是因为我们现在的硬盘还只是一个空的硬盘,没有任何数据,又如何能够运行呢,从图上可以看到,CPU一下就跑没影了。在我们平时开机的时候,是不是都要通过BIOS引导,进行硬件,内存的各项检测之后,再将我们的操作系统从硬盘上唤醒。此时操作系统才接管了我们的电脑。我们的配置讲完了,关于主引导的编写可能要等我研究透了之后再和大家分享啦