diff options
| author | claude <[email protected]> | 2026-07-12 10:27:24 +0000 |
|---|---|---|
| committer | claude <[email protected]> | 2026-07-12 10:27:24 +0000 |
| commit | 3caf5e9682807b9579938431cca4446d7efcf615 (patch) | |
| tree | 119845f998ad6dbf36cc486bad7f2bb646660c7b /efi-kernel/kernel.c | |
| parent | c480e76433f9bb8ce8ce9d5802cdada8883db184 (diff) | |
| download | plan9-kencc-linux-3caf5e9682807b9579938431cca4446d7efcf615.tar.gz plan9-kencc-linux-3caf5e9682807b9579938431cca4446d7efcf615.zip | |
По уточнению @lzcnt (нужен EFI-загрузчик, не a.out-парсер, и amd64-ядро):
- kernel.c + kern64.s -> 6c/6a/6l -> amd64 Plan9 a.out (S_MAGIC 0x8A97, entry 0x100000),
kmain пишет строку в VGA 0xB8000.
- efi_load.c -> PE32+ bootx64.efi (через pe64.s из 9legacy + dd skip=40): под UEFI
печатает через ConOut, разбирает встроенный a.out (big-endian 40-байтный заголовок),
копирует сегменты по entry, прыгает в ядро (long mode).
- Проверено: валидный PE32+ x64 EFI_APPLICATION, ядро встроено и парсится, ESP собран.
Co-Authored-By: Claude Opus 4.8 <[email protected]>
Diffstat (limited to 'efi-kernel/kernel.c')
| -rw-r--r-- | efi-kernel/kernel.c | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/efi-kernel/kernel.c b/efi-kernel/kernel.c new file mode 100644 index 0000000..83c9479 --- /dev/null +++ b/efi-kernel/kernel.c @@ -0,0 +1,21 @@ +/* Plan9 C, amd64 — kernel-болванка: пишет строку в VGA-текстбуфер 0xB8000. + * Грузится EFI-загрузчиком (bootx64.efi), исполняется в long mode. */ +typedef unsigned short ushort; +typedef unsigned char uchar; + +void +kmain(void) +{ + ushort *vga; + char *s; + int i; + + vga = (ushort*)0xB8000; /* VGA text framebuffer (long mode, identity-mapped) */ + for(i = 0; i < 80*25; i++) + vga[i] = (0x1F<<8) | ' '; /* очистить: белым по синему */ + s = "PLAN9 amd64 KERNEL loaded by EFI -> writes 0xB8000"; + for(i = 0; s[i]; i++) + vga[i] = (0x1F<<8) | (uchar)s[i]; + for(;;) /* halt */ + ; +} |
