从零(并不是)开始的ARMv8操作系统内核实践 序
轮子哥曾经说程序员的三大浪漫:操作系统,编译原理,计算机图形学. 我已经写过了玩具级别的编译器,基于光追的玩具渲染器,那么接下来就只有操作系统没试过了.
所以,在毕业设计上,我选择了在ARMv8实现一个支持多核心的操作系统.
我们的最终目标,是实现一个可以在树莓派3b上启动的操作系统内核. 会参考很多Xv6的内容,但是Xv6支持的平台是x86或RISC-V,而我们要运行在ARMv8上.或者,将这个实现过程理解为Xv6在ARMv8的移植,也非常恰当.
在这一系列文章中,我会记录下我遇到的坑,尽量逐行解释代码的目的.
编程语言上,可用的有C/C++/Rust,我一开始打算使用Rust实现,但在实践中,发现以我的水平并没法驾驭,而且Rust在实现上需要使用一些不稳定特性(Unstable feature).很可能这版代码能用,编译器一更新就废了(没错我Cue的就是rCore),是我知道Rust可以指定工具链,但是我还是希望自己的代码可以稍微减小一点对编译器的依赖.而如果使用C++的话,在裸机上,因为没有一些运行时支持,所以RTTI(运行时类型识别),异常,STL都是没办法用的.模板倒是还可以,但是在这种使用场景上应该没什么太多用处.
所以,初步暂时只使用纯C加内联汇编实现.后续我也会试着实现内存分配器,这样就可以使用一部分STL了.
在实现操作系统时,这里有三个非常好的项目非常值得学习:
6.S081 / Fall 2021
rCore
raspberry-pi-os
另外,有关这个的代码我都会放在GitHub上,与这一系列同步更新
RiversJin/ToyOS: A simple SMP OS on ARMv8a (github.com)

浙公网安备 33010602011771号