从零开始写 OS 内核 - 准备工做

系列目录

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

安装 Bochs

Bochs 是一个硬件模拟器,咱们写的内核将运行在上面,后续全部的开发调试工做也将在这上面进行,因此第一步就是安装它。个人开发环境是 Linux Mint 系统,你用 Ubuntu 也同样,能够直接安装:git

sudo apt install bochs

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

至于其它系统我没试过,可是编译源码包安装的方式确定是行得通的。bash

运行 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 和内核镜像盘,系统就是用该盘启动。固然这不是真的磁盘。就是一个镜像文件。app

其中 path="scroll.img" 就是镜像文件,这里和配置文件 bochsrc.txt 在同一路径下,因此就很简单。名字你随便起,个人叫 scroll,至于为何后面再说。固然如今咱们尚未内核镜像文件,你能够随便找个空文件。工具

后面的 cylindersheadsspt 几个都是硬盘硬件相关的一些参数了,什么柱面柱头之类的没必要深究。Bochs 有一个命令行工具 bximage,能够帮你肯定这个参数,你只须要告诉它你的镜像文件会有多大。gitlab

一切就绪,能够运行 Bochs 了:spa

bochs -f bochsrc.txt

创建项目

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

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

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

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

相关文章
相关标签/搜索