2

系列目录

安装 Bochs

Bochs 是一个硬件模拟器,我们写的内核将运行在上面,后续所有的开发调试工作也将在这上面进行,所以第一步就是安装它。我的开发环境是 Linux Mint 系统,你用 Ubuntu 也一样,可以直接安装:

sudo apt install bochs

要是这种方法不行的话,可以直接去官网下载源码包编译安装,这种方法我也试过是 ok 的。不过在安装过程中会遇到一些第三方依赖的库不全的问题,那就逢山开路遇水搭桥,把依赖都安装上就行,在这里我就不细说了,需要你自己动手想想办法,不会很难的,网上也有一些教程可以参考。

至于其它系统我没试过,但是编译源码包安装的方式肯定是行得通的,我亲自试过的。

运行 Bochs

首先你需一个 Bochs 运行的配置文件 bochsrc.txt,这是我用的:

# RAM size
megs: 32
# Change to your Bochs installation path
romimage: file=/usr/share/bochs/BIOS-bochs-latest
vgaromimage: file=/usr/share/bochs/VGABIOS-lgpl-latest

# Disk
boot: disk
ata0: enabled=1, ioaddr1=0x01f0, ioaddr2=0x03f0, irq=14
ata0-master: type=disk, path="scroll.img", mode=flat, cylinders=6, heads=16, spt=63

log: bochsout.txt

mouse: enabled=0
keyboard_mapping: enabled=1, map=/usr/share/bochs/keymaps/x11-pc-us.map
clock: sync=realtime
cpu: ips=1000000

这里最重要的部分就是 Disk 相关配置,我们这里用到了一个磁盘,这也是后面的 boot loader 和内核镜像盘,系统就是用该盘启动。当然这不是真的磁盘。就是一个镜像文件。

其中 path="scroll.img" 就是镜像文件,这里和配置文件 bochsrc.txt 在同一路径下,所以就很简单。名字你随便起,我的叫 scroll,至于为什么后面再说。 cylindersheadsspt 几个都是硬盘硬件相关的一些参数了,什么柱面柱头之类的不必深究。

当然现在我们还没有内核镜像文件,Bochs 自带了一个命令行工具 bximage,可以为你制作一个写满了 0 的镜像文件,并且帮你确定上述的这几个参数,你只需要告诉它你的镜像文件需要多大,以 MB 为单位:

>> bximage
========================================================================
                                bximage
                  Disk Image Creation Tool for Bochs
          $Id: bximage.c 11315 2012-08-05 18:13:38Z vruppert $
========================================================================

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

What kind of image should I create?
Please type flat, sparse or growing. [flat] flat

Enter the hard disk size in megabytes, between 1 and 8257535
[10] 1

I will create a 'flat' hard disk image with
  cyl=2
  heads=16
  sectors per track=63
  total sectors=2016
  total size=0.98 megabytes

What should I name the image?
[c.img] test

Writing: [] Done.

I wrote 1032192 bytes to test.

The following line should appear in your bochsrc:
  ata0-master: type=disk, path="test", mode=flat, cylinders=2, heads=16, spt=63

一切就绪,可以运行 Bochs 了:

bochs -f bochsrc.txt

运气好的话可以看到这个界面,说明启动成功了:

建立项目

话说目前为止我们的项目还没建起来,所以先去 Git 建一个吧。我先给出我的 Git 项目地址,你可以先参考下,也可以下载下来运行里面的 ./start.sh 脚本,看下运行效果。

我给这个项目起的名字叫 scroll,中文意思就是卷轴,就是这东西:

卷轴,就是一张纸,一幅画卷。在我们这里就是内存,磁盘,从一片空白开始,而那支画笔就是 CPU。整个内核的启动,运行,本质上就是 CPU 和内存之间的一场对话,CPU 在内存上来回跳跃,翻转腾挪,勾画出一个庞大复杂的工程系统,这就是 OS。

下一篇开始,我们将正式进入 OS 的启动:BIOS 启动到实模式


navi
612 声望191 粉丝

naive