(本文尚在建设中/WIP,催更请走邮件)

本科时在课程中学过《操作系统》,理论知道一些,这次突发奇想,买了个树莓派,打算自己尝试从头写一个玩具级的OS,因此起了本系列。资料参考是《操作系统设计与实现》,参考minix和redox-os这类微内核操作系统。

  1. linker & loader
  2. 状态提示:点灯 & 串口
  3. bootloader
  4. 硬件检测
  5. 内核:init和vfs
  6. 驱动和服务

一口吃不成胖子,所以我们就一口一口吃吧。先讲一个熟悉的概念:计算机的启动。

  1. 主板硬件运行BIOS,进行基本硬件检测(BIOS里面可设置跳过,技嘉主板中为fastboot),加载制定储存设备的指定文件,装载bootloader
  2. bootloader进行基本硬件检测,设置堆栈环境,加载OS kernel,使用蹦床机制将pc设置到OS kernel偏移
  3. OS kernel进行硬件检测,装在驱动,初始服务
  4. 常规服务启动,进入服务自己的运行状态。譬如键鼠等待外部输入、显示器发出显示信号、终端服务等待登陆等

关于调试:软件环境下,BIOS可以使用仿真器调试,OS使用虚拟机调试。硬件条件下当然使用实体机调试咯。

但是树莓派的启动步骤在细节部分略有差异,启动流程如下(参考1参考2参考3):

  1. First stage bootloader (SoC ROM)
  2. Second stage bootloader (bootcode.bin)
  3. GPU firmware (start.elf)
  4. User code (kernel8.img)

因为树莓派是由GPU负责引导载入引导文件,而我又不想在引导中做vfs,所以就把bootloader和kernel做到一起了。