| Filename | Latest commit message | Latest commit date |
|---|---|---|
The kernel goes at fixed physical addresses, 1 MB to about 34 MB with the RAM disk inside it. When AllocatePages refused part of that, the loader said "could not reserve" and read the kernel there anyway -- over the firmware's own memory, with the firmware still running on it. An HP all-in-one from 2012 froze at the start of the loading bar. Now every free page of the range is claimed first. A segment wholly on claimed pages is read straight home; one that is not is read into a buffer elsewhere and copied home after ExitBootServices, when boot-services memory is ours. Memory under the kernel that outlives the firmware (ACPI NVS, runtime services) is named, and so is the loader or its stack sitting in the range. Segments are read a megabyte at a time, so the bar moves through the RAM disk and shows where a machine stopped. Under OVMF the data segment (over ACPI NVS and boot-services data at 8 MB) is now staged, and it boots both as a CD and as a USB disk. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01S1giNvrHTrPMPw7V6x1kQ4 |
||
| .. | ||
| efi.h | ||
| main.c | ||
| README.md | ||
| startup.nsh | ||
UEFI loader
The loader. This directory once existed only so the BIOS path could be moved
into boot/bios/ without pretending the split was hypothetical; it is now the
only path there is.
See ../README.md for the hand-off contract a loader has to satisfy. The
short version: the kernel wants long mode with paging on, its ELF segments
placed, a 24-byte-entry E820-shaped memory map, and framebuffer geometry — and
it does not care which firmware produced them.
What this will need, in rough order:
- A PE/COFF target. clang can emit one directly
(
--target=x86_64-unknown-windows -fuse-ld=lld-link), so no new toolchain: the same LLVM install already builds every other target here. - The handful of UEFI structures actually used — the system table, boot
services,
LOADED_IMAGE,SIMPLE_FILE_SYSTEM,GRAPHICS_OUTPUT. Written from the specification rather than by importing gnu-efi or EDK II, which is both a licence question and a large dependency for something this small. GetMemoryMaptranslated into the same 24-byte entriese820.calready parses. Not a second format for the kernel to learn.ExitBootServicesbefore touching the memory it described.- Graphics Output Protocol for the framebuffer, filling the same
VBE_INFO_ADDRstructure the kernel reads.
The image goes at EFI/BOOT/BOOTX64.EFI on a FAT ESP, which also means the
ISO carries a single El Torito EFI entry.