1.7 KiB
1.7 KiB
Sylva OS — Agent Guide
x86_64 UEFI hobby OS. C17 boot → C++17 kernel, ELF64 → PE32+ via objcopy.
Build & Run
| Command | What |
|---|---|
make |
Build build/BOOTX64.EFI + build/Kernel.elf |
make run |
QEMU + OVMF, serial 1 → serial.log, serial 2 → stdio, paused for GDB (:1234) |
make vdir |
Stage both binaries into vdir/EFI/BOOT/ for manual boot |
make clean |
Always before commit — untracked build artifacts leak outside build/ |
Architecture
- Two-stage boot:
boot.c(UEFI app) loadsKernel.elffrom FAT volume, parses ELF PHDRs, jumps to entry kernel/entry.cpp—_startsavesSystemTable, callskernel_main()kernel/main.cpp—extern "C" kernel_main(): init GOP → serial → PMM → heap → idle (hlt)kernel/serial.cpp— UEFI serial protocol wrapper (write/read/hex)kernel/memory/pmm.cpp— bitmap + free-list physical page allocatorkernel/memory/heap.cpp— kmalloc/kfree/kcalloc/krealloc (first-fit w/ coalescing)graphics/— GOP framebuffer,fonts/— Hankaku 8×16 font viapf_print()efi/— bundled gnu-efi sources:gnuefi/(crt0, lds, reloc),lib/,inc/- Kernel linked at
0x100000(kernel/kernel.ld)
Conventions
- Commits:
[type] messagewith typesfeat,fix,chore,docs(git log) #define ASM asm volatileininclude/common.h- C17 (
boot.c), C++17 (kernel/) —-ffreestanding -fno-stack-protector -fshort-wchar -mno-red-zone uefi_call_wrapperrequired for all UEFI protocol calls (omission → page-fault)kernel_mainmust beextern "C"(C→C++ linkage)- QEMU starts paused: connect GDB to
:1234to proceed - No tests, no CI, no lint config