diff options
| author | claude <[email protected]> | 2026-07-12 01:19:32 +0000 |
|---|---|---|
| committer | claude <[email protected]> | 2026-07-12 01:19:32 +0000 |
| commit | a4dce7f4d920e492d38c32ad3e42efdcfef3b3f1 (patch) | |
| tree | b0a0ad513792f5c0ddc524d67f6ab89e2044c642 /efi/README.md | |
| download | plan9-kencc-linux-a4dce7f4d920e492d38c32ad3e42efdcfef3b3f1.tar.gz plan9-kencc-linux-a4dce7f4d920e492d38c32ad3e42efdcfef3b3f1.zip | |
🌭 plan9-kencc-linux: кросс-тулчейн Plan9 (cc/as/ld) + EFI-болванка
- build_arch.sh / build_al.sh: сборка kencc-компиляторов, ассемблеров,
линкеров всех арок (5/6/8/v/q/k) на Linux-хосте через plan9port.
- патчи под musl/gcc: sbrk->mmap, round/log2->p9*, Runemask, swcmp const,
-fcommon, machcap/omachcap, /sys рантайм-файлы. Подробно в PATCHES.md.
- bin/: готовые 8c 6c 5c vc qc kc + 6a 6l (Linux/musl x86_64).
- efi/: болваночный bootx64.efi (PE32+) тем же тулчейном (6a+6c+6l+dd),
референс — 9legacy nboot/efi; ESP-образ через mkesp.py.
Co-Authored-By: Claude Opus 4.8 <[email protected]>
Diffstat (limited to 'efi/README.md')
| -rw-r--r-- | efi/README.md | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/efi/README.md b/efi/README.md new file mode 100644 index 0000000..fa1cdd1 --- /dev/null +++ b/efi/README.md @@ -0,0 +1,35 @@ +# efi — болваночный UEFI-апп на портированном тулчейне Plan 9 + +Минимальное `bootx64.efi` (amd64, формат **PE32+**), собранное **только** +портированными Plan 9 kencc `6a`/`6c`/`6l` — без юниксовых компиляторов/линкеров. + +## Цепочка +| шаг | утилита | что делает | +|-----|---------|-----------| +| 1 | **6a** | ассемблирует `pe64min.s` — DOS/PE32+ заголовок + entry + `eficall` | +| 2 | **6c** | компилирует `hello.c` (плановские `<u.h>` и т.д.) | +| 3 | **6l** | линкует свободностоящий образ по `-T0x8000` | +| 4 | `dd skip=40` | срезает 40-байтный plan9 a.out заголовок → обнажает PE32+ | + +`pe64.s` кладёт DOS+PE32+ заголовки первыми в текст-сегмент; линкер раскладывает +образ от `IMAGEBASE`, а `dd` срезает плановский заголовок — остаётся чистый PE, +который прошивка грузит из `/EFI/BOOT/BOOTX64.EFI`. + +## Сборка +```sh +./fetch_ref.sh # pe64.s/efi.h/mem.h из 9legacy +PLAN9SRC=.../plan9foundation ./efi_build.sh # -> bootx64.efi +python3 mkesp.py bootx64.efi esp.img # -> загрузочный ESP (FAT16) +qemu-system-x86_64 -bios OVMF.fd -drive format=raw,file=esp.img +``` + +## Что своё, что референс +* `hello.c`, `efi_build.sh`, `mkesp.py`, `fetch_ref.sh` — наш код. +* `pe64.s`, `efi.h`, `mem.h` — из 9legacy `nboot/efi` (тянутся, не хранятся). + Для болванки от `pe64.s` берём только заголовки+entry+`eficall` (`head -162`); + машинерию загрузки ядра (`jump`/`_warp32`/`_gdt`) отбрасываем — ей тут нечего делать. + +## Проверка +`MZ` + `PE\0\0` + Machine `0x8664` + Magic `0x20B` (PE32+) + Subsystem `10` +(EFI_APPLICATION). `mkesp.py` дополнительно сам обходит FAT обратно и сверяет +`/EFI/BOOT/BOOTX64.EFI` байт-в-байт с исходным `.efi`. |
