Note · budding
A boot ROM that downloads its kernel
- Stage
- budding
- Links
- 1 out, 1 in
The first IRIX 7 ROM held the kernel inside itself, compressed. An Indy’s PROM is 512 KB, and that ROM came to 523,816 of the 524,288 bytes available. There was no room left to grow.
The replacement is a ROM that fetches the kernel. It sizes and maps memory, tests it, brings up the Ethernet controller, gets an address by DHCP, resolves a name, opens a TLS connection, downloads the latest kernel image from the project’s GitHub releases and jumps to it.
The kernel can now be any size, and a machine picks up a new kernel by rebooting.
The costs are stated in the decision record and are worth repeating. The machine cannot boot without a network. And the ROM does not check the integrity of what it downloads: TLS protects the transfer, but nothing verifies that the image is the one that was built. It must not be described as secure boot.
Some things about the Indy that the ROM has to get right before any of that works:
- Main memory is not mapped at reset. The ROM has to configure the memory controller before it can use RAM at all.
- The cached kernel segment cannot be used for device DMA, because the device would read stale memory. DMA buffers go through the uncached segment.
Projects
- IRIX 7 A Rust operating system for the SGI Indy, meant to run IRIX 6.5 applications unchanged.
Projects
- IRIX 7 A Rust operating system for the SGI Indy, meant to run IRIX 6.5 applications unchanged.