Operating system development on the Raspberry Pi
Summary
Sergey Matyukevich uses executable lessons to lead from ARM64 boot code through interrupts and the scheduler to user space and virtual memory. The series uses a Raspberry Pi 3. The example kernel targets the ARM64 architecture.
Ideas
- Early assembly code sets up the stack and processor state.
- UART provides diagnostic output before complex drivers exist.
- Timer interrupts enable preemptive process switching.
- Page tables separate virtual and physical address spaces.
Insights
- Bare-metal development reveals hidden operating system assumptions.
- A serial console remains available when higher layers fail.
- Small steps that build on each other make hardware debugging easier.
Facts
- Source code and explanations are freely accessible.
Recommendations
- Use UART for the first boot messages.
- Test kernel changes on a separate SD card.
References
Links to the original source and the Web Archive open in a new tab.