A tiny, modern kernel for Raspberry Pi 3
Experiment descriptions are for you to read & reproduce. The assignments will be on Collab. They include Q&A and coding assignments.
Get the code:
git clone https://github.com/fxlin/p1-kernel
A tiny kernel incrementally built for OS education.
Start with minimal, baremetal code. Then add kernel features in small doses.
Each experiment is a self-contained and can run on both Rpi3 hardware and QEMU.
Rationale
The kernel must run on cheap & modern hardware.
Showing the kernel's evolution path is important. Along the path, each version must be self-contained runnable.
We deem the following kernel functions crucial to implement: * protection modes * interrupt handling * preemptive scheduling * virtual memory
Experimenting with these features is difficult with commodity kernels due to their complexity.
Goals
Primary: * Learning by doing: the core concepts of a modern OS kernel * Experiencing OS engineering: hands-on programming & debugging at the hardware/software boundary * Daring to plumb: working with baremetal hardware: CPU protection modes, registers, IO, MMU, etc.
Secondary: * Armv8 programming. Arm is everywhere, including future Mac. * Working with C and assembly * Cross-platform development
Non-goals:
- Non-core or advanced functions of OS kernel, e.g. filesystem or power management, which can be learnt via experimenting with commodity OS.
- Rpi3-specific hardware details. The SoC of Rpi3 is notoriously unfriendly to kernel hackers.
- Implementation details of commodity kernels, e.g. Linux or Windows.
Experiments
- Sharpen your tools! (p1 exp0)
- Helloworld from baremetal (p1 exp1)
- Exception elevated (p1 exp2)
- Heartbeats on (p1 exp3)
- Process scheduler (p1 exp4)
- A world of two lands (p1 exp5)
- Into virtual (p1 exp6)
Assignment weights
Exp | Weights |
---|---|
00 Sharpen your tools | 10 |
01 Helloworld from baremetal | 10 |
02 Exception elevated | 10 |
03 Heartbeats on | 10 |
04a Process scheduler - cooperative | 10 |
04b Process scheduler - preemptive | 10 |
05 A world of two lands | 20 |
06 Into virtual | 20 |
The weights are relative and may not necessarily add up to 100.
Acknowledgement
Derived from the RPi OS project and its tutorials, which is modeled after the Linux kernel.