乐趣区

关于操作系统:从零开始写-OS-内核-准备工作

系列目录

  • 筹备工作
  • 从 BIOS 开始启动到实模式
  • 进入保护模式
  • 加载并进入内核
  • 显示与打印
  • GDT 和 IDT,中断解决
  • 关上虚拟内存
  • 实现堆和 malloc
  • 创立第一个内核线程
  • 多线程运行与切换
  • 锁与多线程同步
  • 过程的实现
  • 进入用户态
  • 一个简略的文件系统
  • 加载可执行程序
  • 零碎调用的实现
  • 键盘驱动
  • 运行 shell

装置 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,能够帮你确定这个参数,你只须要通知它你的镜像文件会有多大。

所有就绪,能够运行 Bochs 了:

bochs -f bochsrc.txt

建设我的项目

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

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

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

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

退出移动版