51 lines
1.6 KiB
Markdown
51 lines
1.6 KiB
Markdown
# Phase 20 - Linux
|
|
|
|
## Context
|
|
|
|
This is the summit: boot a minimal Linux kernel with a BusyBox initramfs to a shell over
|
|
UART on the CPU and SoC you built.
|
|
|
|
## Goals
|
|
|
|
- Build a kernel matching the implemented ISA and platform.
|
|
- Provide DTB and initramfs.
|
|
- Reach an interactive shell or a controlled init process.
|
|
|
|
## New Concepts
|
|
|
|
- Kernel config: set of build-time options selecting architecture and drivers.
|
|
- Initramfs: initial root filesystem bundled or loaded with the kernel.
|
|
- BusyBox: compact Unix userland used in embedded systems.
|
|
- Early console: minimal logging path before normal console drivers initialize.
|
|
- Root filesystem: filesystem mounted as `/` by Linux.
|
|
|
|
## How To Think About It
|
|
|
|
Linux bring-up is system debugging under poor visibility. Work from known-good layers:
|
|
CPU tests, DRAM test, boot firmware, DTB validation, early console, then userspace.
|
|
|
|
## Learning Tasks
|
|
|
|
- Understand the kernel image format and load addresses for RV32.
|
|
- Build the smallest kernel config that matches your hardware.
|
|
- Trace boot log milestones and map them to hardware dependencies.
|
|
|
|
## Pitfalls
|
|
|
|
- Debugging Linux before compliance tests and DRAM tests are clean.
|
|
- Enabling drivers for devices you do not actually implement.
|
|
- Losing console output because UART binding or clock frequency is wrong.
|
|
|
|
## Tooling And Testing
|
|
|
|
- Use earlycon/earlyprintk-style mechanisms where applicable.
|
|
- Keep kernel, DTB, firmware, and bitstream versions tied together.
|
|
- Save full boot logs and compare against previous attempts.
|
|
|
|
## References
|
|
|
|
- Linux RISC-V documentation: https://docs.kernel.org/arch/riscv/
|
|
- Buildroot: https://buildroot.org/
|
|
- BusyBox: https://busybox.net/
|
|
|