前言
前不久朋友推荐了一本书,叫做《操作系统真象还原》,看了一部分后觉得还蛮有趣的,想试着着手写一个操作系统,一边学习一边写。
本专栏会慢慢更新实现的过程,由于本人只能在工作之余钻研这本书,更新速度可能较慢,望各位读者理解。如果有心急的小伙伴可以购买这本书进行学习。
Bochs安装
先讲两句
Bochs是一个x86硬件平台的开源模拟器。它可以模拟各种硬件的配置。Bochs模拟的是整个PC平台,包括I/O设备、内存和BIOS等。
首先我们需要在ubuntu上部署Bochs,条件好的小伙伴可以给空闲的电脑装个ubuntu系统然后部署Bochs,像我这种只有一台windows电脑的小伙伴可以安装个虚拟机,在虚拟机里面安装ubuntu系统然后部署Bochs。
虚拟机推荐virtualBox(免费) 或者 vmware,我个人喜欢vmware的界面,所以就用了vmware。
ubuntu系统我没有选择最新的ubuntu22.04,怕不是很稳定,选择了ubuntu20.04,官网链接在这里大家自行下载安装:Ubuntu系统下载 | Ubuntu。
开干
完成了操作系统的安装,现在到了安装Bochs的环节,这是我们的操作系统的宿主机。
直接上下载链接:Bochs x86 PC emulator download | SourceForge.net,用ubuntu自带的火狐浏览器就可以下载,我下载的2.6.8版本,选择bochs-2.6.8.tar.gz下载。
然后解压到想要的目录
tar zxvf bochs-2.6.8.tar.gz
接下来进入bochs-2.6.8目录,开始configure、make、make install三部曲。
先更新安装一下gcc、g++、make和相关依赖,不然有可能报错。
sudo apt-get install gcc
sudo apt-get install g++
sudo apt-get install make
sudo apt-get install build-essential
sudo apt-get install xorg-dev
sudo apt-get install libgtk2.0-dev
配置configure
./configure --prefix=/安装路径/bochs --enable-debugger --enable-disasm --enable-iodebug --enable-x86-debugger --with-x --with-x11
这里如若想使用gdb进行调试,则需要将--enable-debugger替换为--enable-gdb-stub,不过我这里不建议大家使用gdb,因而环境一致可能造成许多不同的问题,我们直接用bochs本身自带的调试功能即可。
接下来make编译,make无误后make install安装。
配置Bochs
Bochs的配置是通过配置文件完成的,这个配置文件类似BIOS,既然bochs是模拟硬件的,他就要知道模拟的计算机是什么样的,有哪些硬件,启动顺序是什么等等。bochs启动时会找到此文件,根据文件内容创建自己。
我们在bochs目录下创建一个名为bochsrc.disk的配置文件(文件名可以改,并且.disk可加可不加,这里为了表示是从硬盘启动,就加了一个方便查看)
下面是给大家参考的配置文件内容(不同版本的bochs关键字可能不同):
# 第一步,首先设置 Bochs 在运行过程中能够使用的内存,本例为 32MB
# 关键字为 me gs
megs :512
# 第二步,设置对应真实机器的 BIOS VGA BIOS
# 对应两个关键字为 romimage vgaromimage
romimage: file=/实际路径/bochs/share/bochs/BIOS-bochs-latest
vgaromimage: file=/实际路径/bochs/share/bochs/VGABIOS-lgpl-latest
# 第三步,设置 Bochs 所使用的磁盘,软盘的关键字为 floppy
# 若只有一个软盘,使用 floppy 即可,若有多个,则为 floppya, floppyb…
#floppya: 1_44=a.img, status=inserted
# 第四步,选择启动盘符。
#boot: floppy #默认从软盘启动,将其注释
boot: disk #改为从硬盘启动。我们的任何代码都将直接写在硬盘上,所以不会再有读写软盘的操作。
# 第五步,设置日志文件的输出。
log: bochs.out
# 第六步,开启或关闭某些功能。
# 下面是关闭鼠标,并打开键盘。
mouse: enabled=0
keyboard:keymap=/实际路径/bochs/share/bochs/keymaps/x11-pc-us.map
# 硬盘设置
ata0: enabled=1, ioaddr1=0x1f0, ioaddr2=0x3f0, irq=14
ata0-master: type=disk, path="hd60M.img", mode=flat, cylinders=121, heads=16, spt=63
# 下面的是增加的 bochs gdb 的支持,这样 gdb 可以远程连接到此机器的 234 口调试了
#gdbstub : enabled=l, port=l234, text_base=O, data_base=O, bss_base=O
################### 配置文件结束 #####################
运行Bochs
仅有一个配置文件还不够,我们需要运用bochs自带的功能生成一个虚拟的磁盘,他位于在你们bochs目录下bin目录里面。通过使用--help指令来查看
接下来我们用 -hd= 创建一块60M的硬盘(过程按提示操作,type选flat),这里我将其命名为 hd60M.img。
bin/bximage -hd=60
通过刚刚的配置文件启动
bin/bochs -f bochsrc.disk
可以看到启动起来了,但是我们的硬盘中什么都没有,所以是黑的。
至此环境搭建完成,接下来就是想办法制作启动盘了...