引言: 从一个伟大而遥远的梦想说起

人们常说不要老是做白日梦了,意思就是不要老是幻想一些不切实际的事实,但我却不这么觉得,做人没有梦想和咸鱼有什么区别? ——qwe

我记得我小学三年级的时候有一个梦想,梦想做一个国产的操作系统。一个小学生,当时为什么会这么想呢,其实原因也很简单,因为google退出了中国大陆,当时的安卓系统有很多google play支持的游戏不能玩,于是我就有了一个大胆的想法,可惜当年的我英语太差,去书城抱着一本c语言从入门到精通,读了半天看到main这个单词就不认识,索性放弃了。再后来由于学业和时间的阻碍,我一直没能实现我的这个曾经的梦想。

上了大学后,我一直在思考,在国内这种考试的体系下,我们在学习的过程中舍弃了自己本身的爱好,本身的兴趣,丧失了自我,这其实是不对的。不能抱着一种现在当下的任务就是考试要紧,其他的东西到大学再说,你就会发现和很多优秀同龄人相比,你少了很多本该应有的积累。你在大学里没有自己的爱好,兴趣不知道干什么,天天打游戏混日子,这是很多大学生当下的写照。

扯远了,其实我想说的是,你无论在什么时候,都应该有一个属于你自己的梦想,哪怕遥不可及,你也应该努力的去尝试。对于我来说,我觉得我算是这么做的,我喜欢幻想我成功或者实现的瞬间,这能给予我前进的动力。你也可以说是中二病,但是不管怎么样,我确实实现了很多我幻想成功的事情。回过头来看,其实这些事情也没有那么难。

回过头来看《操作系统真相还原》这本书,其实我也不知道做出一个简单的miniOS难不难,但是我觉得自己能行,于是就去做了,也算是为曾经的自己圆一个梦吧(虽然距离曾经的想法还差得很远呢!)

工作环境和准备工作

我的操作系统是Ubuntu22.04 ,因为版本太新,其实还吃了不少亏,但都有解决办法,看个人喜好了。
使用windows的同学弄一个虚拟机就行了,这里我推荐我用过的vmware。

1
2
3
4
5
# 安装必要的编译器和依赖库
sudo apt install gcc
sudo apt install make
sudo apt install nasm
sudo apt install libx11-dev libxrandr-dev libxpm-dev

选择合适的bochs版本并安装

如果你和我一样是ubuntu22.04一定要用下载源码编译安装,不然会出现奇奇怪怪的问题。

直接在google上搜索bochs进入官网,书上采用的是2.6.2的版本,为了方便你也可以采用书上的版本,但是中间可能会出现错误,比如一些库不存在需要安装,我这里采用的是2.7版本。

记得选择tar.gz后缀的文件下载,和书上保持一致。下载到downloads文件夹里,直接鼠标右键解压就行了,然后 cd 切换到解压的文件夹目录,记得修改用户名。

1
2
3
4
5
6
7
8
9
10
11
12
13
# 编译bochs并安装
./configure \
--prefix=/home/[你的用户名]/bochs \
--enable-debugger \
--enable-disasm \
--enable-iodebug \
--enable-x86-debugger \
--with-x \
--with-x11



make -j $(nproc) && make install

运行完后如果没有报错,在home目录下会有一个bochs文件夹,点开bochs目录,cd 切换到bin目录下。在这里创建一个配置文件。

1
2
# 我安装了vscode,可以不用蹩脚的vim和nano来创建编辑文本文件了,当然根据你的喜好选择
code bochsrc.disk

复制一下配置文本,我已经修改过书上的过时的配置,均为最新的正确的配置,记得修改用户名。

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
# bochs configuration file 
# bochsrc.disk

# memory size: 32MB
megs: 32

# BIOS and VGA BIOS
romimage: file=/home/[你的用户名]/bochs/share/bochs/BIOS-bochs-latest
vgaromimage: file=/home/[你的用户名]/bochs/share/bochs/VGABIOS-lgpl-latest

# boot from hard disk (rather than floppy disk)
boot: disk

# log file
log: bochs.out

# disable mouse, enable keyboard
mouse: enabled=0
keyboard:keymap=/home/[你的用户名]/bochs/share/bochs/keymaps/x11-pc-us.map

# hard disk setting
ata0: enabled=1, ioaddr1=0x1f0, ioaddr2=0x3f0, irq=14

# gdb part setting
#gdbstub: enabled=1, port=1234, text_base=0, data_base=0, bss_base=0

然后在当前目录下,直接输入命令

1
./bochs -f bochsrc.disk

得到输出结果如下
成功

我们之间输入6

然后就成功启动了bochs,怎么回事?没有反应,别慌我们在终端输入c就成功了。
111

因为我这里已经创建过硬盘了,所以输出可能有点不一样,接下来创建硬盘的步骤,大家就照着书上来就行,我也给出我参考的的配置,先运行bximage就是和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
26
27
28
29
30
31
32
33

1. Create new floppy or hard disk image
2. Convert hard disk image to other format (mode)
3. Resize hard disk image
4. Commit 'undoable' redolog to base image
5. Disk image info

0. Quit

Please choose one [0] 1

Create image

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, growing, vpc or vmware4. [flat] flat

Choose the size of hard disk sectors.
Please type 512, 1024 or 4096. [512]

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

What should be the name of the image?
[c.img] hd60M.img

Creating hard disk image 'hd60M.img' with CHS=121/16/63 (sector size = 512)

The following line should appear in your bochsrc:
ata0-master: type=disk, path="hd60M.img", mode=flat

第一章序幕就此完美结束!