summaryrefslogtreecommitdiff
path: root/kernel/mkboot.sh
diff options
context:
space:
mode:
authorclaude <[email protected]>2026-07-12 01:31:26 +0000
committerclaude <[email protected]>2026-07-12 01:31:26 +0000
commitc480e76433f9bb8ce8ce9d5802cdada8883db184 (patch)
treef84928e5a12c234ec44e899198dca9a41d02170b /kernel/mkboot.sh
parenta4dce7f4d920e492d38c32ad3e42efdcfef3b3f1 (diff)
downloadplan9-kencc-linux-c480e76433f9bb8ce8ce9d5802cdada8883db184.tar.gz
plan9-kencc-linux-c480e76433f9bb8ce8ce9d5802cdada8883db184.zip
🌭 kernel/: болваночное ядро (пишет в 0xB8000) + загрузчик Plan9 a.out
- kernel.c + kern.s: 386-ядро, пишет строку в VGA-текстбуфер 0xB8000, halt. Собирается 8a+8c+8l в Plan9 a.out (I_MAGIC, entry 0x100000). - loader.c: загрузчик a.out (не ELF — выхлоп у нас a.out): разбор big-endian заголовка, загрузка сегментов по entry, зануление bss, прыжок. - проверено: kernel = валидный a.out с 0xB8000 в коде; loader.aout_parse корректно разбирает реальное ядро (entry/размеры сходятся). - bin/: добавлены 8a, 8l (386 ассемблер + линкер). Co-Authored-By: Claude Opus 4.8 <[email protected]>
Diffstat (limited to 'kernel/mkboot.sh')
-rw-r--r--kernel/mkboot.sh25
1 files changed, 25 insertions, 0 deletions
diff --git a/kernel/mkboot.sh b/kernel/mkboot.sh
new file mode 100644
index 0000000..27544f8
--- /dev/null
+++ b/kernel/mkboot.sh
@@ -0,0 +1,25 @@
+#!/bin/bash
+# Собирает kernel-болванку (пишет в VGA 0xB8000) и загрузчик — всё в Plan9 a.out.
+# Тулчейн: 8a/8c/8l (386) из ../bin. "Выхлоп у нас в а.аут" — потому и формат a.out.
+set -e
+cd "$(dirname "$0")"
+BINDIR="${BINDIR:-$PWD/../bin}"
+export objtype=386
+
+echo "1) 8a kern.s — энтрипоинт (стек + вызов kmain)"; "$BINDIR/8a" kern.s
+echo "2) 8c kernel.c — ядро (пишет строку в 0xB8000)"; "$BINDIR/8c" kernel.c
+echo "3) 8l -H2 -T1M — линк в Plan9 a.out, entry=_start"; "$BINDIR/8l" -o kernel -H2 -T0x100000 -E _start kern.8 kernel.8
+echo "4) 8c loader.c — загрузчик a.out (тоже a.out)"; "$BINDIR/8c" loader.c
+
+echo
+echo "=== kernel: $(ls -la kernel | awk '{print $5}') байт (Plan9 a.out) ==="
+python3 - <<'PY'
+import struct
+d=open('kernel','rb').read()
+m,t,da,b,s,e,sp,pc=struct.unpack('>8L',d[:32])
+IM=(((4*11)+0)*11)+7
+print(f" magic=0x{m:X} {'= I_MAGIC(386) OK' if m==IM else '(?)'} text={t} data={da} bss={b} entry=0x{e:X}")
+print(" константа 0xB8000 в коде:", "да" if d.find(bytes([0,0x80,0x0B,0]),32)>=0 else "нет")
+PY
+echo
+echo "проверка разбора загрузчиком (хостовый gcc): gcc -w -o loader_test loader_test.c && ./loader_test kernel"