S5 · SOURCE-BOUND GATE EVIDENCE
RPi5 imaj ve boot paketi doğrulandı
Operations komutu/kapı ailesi → gerçek repository yürütme sözleşmesi Bu sayfa yalnız S5 kapısına aittir; komşu kapıların kaynakları bu kabulün içine katılmaz.
S5Komut / fiziksel sözleşmeOperations id exactsource SHA exact
operation: rpi5-image-package
script/Makefile/config · Operations · 2 exact excerpt
sequence-bound=true · implementation-bound=false
01 · Yürütme sözleşmesi
Gerçek script / Makefile / config kaynağı
tam Make hedefiL724–L894
Makefile::image-rpi5
image-rpi5: verify-rpi5-g8h-image-input verify-rpi5-g7c-host verify-rpi5-g7d-host verify-rpi5-g8-host verify-rpi5-g8b-host verify-rpi5-g8c-host verify-rpi5-g8d-host verify-rpi5-g8e-host verify-rpi5-g8f-host $(RPI5_DTB) $(RPI5_CONFIG)
@if [ -z "$(OBJCOPY)" ] || [ ! -x "$(OBJCOPY)" ]; then \
echo "llvm-objcopy bulunamadı. rustup component add llvm-tools-preview"; \
exit 1; \
fi
@if [ -z "$(READOBJ)" ] || [ ! -x "$(READOBJ)" ]; then \
echo "llvm-readobj bulunamadı. rustup component add llvm-tools-preview"; \
exit 1; \
fi
@if [ -z "$(OBJDUMP)" ] || [ ! -x "$(OBJDUMP)" ]; then \
echo "llvm-objdump bulunamadı. rustup component add llvm-tools-preview"; \
exit 1; \
fi
@ENTRY=$$($(READOBJ) --file-headers $(RPI5_ELF) | awk '/Entry:/ {print $$2; exit}'); \
[ "$$ENTRY" = "$(RPI5_ENTRY)" ] || \
(echo "HATA: RPi5 ELF entry $(RPI5_ENTRY) değil: $$ENTRY"; exit 1)
@grep -qx 'arm_64bit=1' $(RPI5_CONFIG) || \
(echo "HATA: RPi5 config arm_64bit=1 sözleşmesini taşımıyor"; exit 1)
@grep -qx 'kernel_address=$(RPI5_ENTRY)' $(RPI5_CONFIG) || \
(echo "HATA: RPi5 config kernel_address=$(RPI5_ENTRY) sözleşmesini taşımıyor"; exit 1)
@sh scripts/verify-rpi5-pre-mmu-atomics.sh "$(OBJDUMP)" "$(RPI5_ELF)"
@sh scripts/verify-rpi5-g7c-layout.sh "$(READOBJ)" "$(OBJDUMP)" \
userspace/hello/target/$(TARGET)/release/hello "$(RPI5_ELF)"
@sh scripts/verify-rpi5-g7d-layout.sh "$(OBJDUMP)" "$(RPI5_ELF)"
@sh scripts/verify-rpi5-g8-layout.sh "$(READOBJ)" "$(OBJDUMP)" "$(RPI5_ELF)"
@sh scripts/verify-rpi5-g8b-layout.sh "$(OBJDUMP)" "$(RPI5_ELF)"
@sh scripts/verify-rpi5-g8c-layout.sh "$(OBJDUMP)" "$(RPI5_ELF)"
@sh scripts/verify-rpi5-g8d-layout.sh "$(OBJDUMP)" "$(RPI5_ELF)"
@sh scripts/verify-rpi5-g8e-layout.sh "$(OBJDUMP)" "$(RPI5_ELF)"
@sh scripts/verify-rpi5-g8f-layout.sh "$(OBJDUMP)" "$(RPI5_ELF)"
@sh scripts/verify-rpi5-g8g-layout.sh "$(OBJDUMP)" "$(RPI5_ELF)"
@sh scripts/verify-rpi5-g8h-layout.sh "$(OBJDUMP)" "$(RPI5_ELF)"
@strings $(RPI5_ELF) | grep -q "ASELSAN/BOOT0 BCM2712" || \
(echo "HATA: RPi5 board marker ELF içinde yok"; exit 1)
@for MARKER in \
"ASELSAN/RAM0" \
"ASELSAN/RAM1" \
"ASELSAN/GIC0" \
"ASELSAN/TIMER0" \
"ASELSAN/IRQ0 INTID=27" \
"ASELSAN/BOOT5 GIC+TIMER=OK" \
"ASELSAN/BOOT6 DT+RAM+HEAP=OK" \
"ASELSAN/G7S0" \
"ASELSAN/BOOT7 SCHED=OK" \
"ASELSAN/G7B0 RANGES=" \
"ASELSAN/BOOT7B PMM=OK TIMER=OK ALLOC=1 BASE_TICKS=" \
"ASELSAN/G7C0 CPU=0 MODE=EL0 ROOT=SHARED ASID=0 ELF=TRUSTED PMM_ALLOC=3" \
"ASELSAN/G7C1 SVC=WRITE ELR=0x" \
"ASELSAN/G7C2 SVC=EXIT ELR=0x" \
"ASELSAN/BOOT7C EL0=OK SVC_WRITE=OK SVC_EXIT=OK SWITCH=EL1H TIMER=OK MAPS=OK" \
"ASELSAN/G7D0 CPU=0 MODE=PREEMPT IRQ=PPI27 TASKS=2" \
"ASELSAN/G7D1" \
"ASELSAN/G7D2" \
"ASELSAN/G7D3" \
"ASELSAN/G7D4" \
"ASELSAN/BOOT7D PREEMPT=OK IRQ=PPI27 ORDER=ABABA SWITCHES=4" \
"ASELSAN/G8S0 CPU=0 DT=PSCI-1.0 CONDUIT=SMC CPUS=4 TARGET=0x" \
"ASELSAN/G8S1 CPU=1 MPIDR=0x" \
"ASELSAN/BOOT8 PSCI=OK CPU_ON=OK SECONDARY=CPU1" \
"ASELSAN/G8B0 CPU=0 TARGET=CPU1 MPIDR=0x" \
"ASELSAN/G8B1 CPU=1 MPIDR=0x" \
"ASELSAN/BOOT8B GIC=OK TIMER=OK CPU1_IRQ=1" \
"ASELSAN/G8C0 CPU=0 TARGET=CPU1 MPIDR=0x" \
"ASELSAN/G8C1 CPU=1 MPIDR=0x" \
"ASELSAN/BOOT8C SCHED=LOCAL CPU1_TASK=1" \
"ASELSAN/G8D0 CPU=0 SOURCE=CPU0 TARGET=CPU1" \
"ASELSAN/G8D1 CPU=1 MPIDR=0x" \
"ASELSAN/G8D2 CPU=1 MPIDR=0x" \
"ASELSAN/BOOT8D IPI=SGI1 CPU0_TO_CPU1=1" \
"ASELSAN/G8E0 CPU=0 ROUND1=G8D ROUND2=G8E" \
"ASELSAN/G8E1 ROUND=2 CPU=1 MPIDR=0x" \
"ASELSAN/G8E2 ROUND=2 CPU=1 MPIDR=0x" \
"ASELSAN/BOOT8E IPI=SGI1 CPU0_TO_CPU1=2" \
"ASELSAN/G8F0 CPU=0 PREREQ=BOOT8E SOURCE=CPU0 TARGET=CPU1" \
"ASELSAN/G8F1 REPORTER=CPU0 CPU=1 MPIDR=0x" \
"ASELSAN/BOOT8F HANDOFF=POST_BOOT8E SOURCE=CPU0 TARGET=CPU1"; do \
strings $(RPI5_ELF) | grep -Fq "$$MARKER" || \
{ echo "HATA: RPi5 proof marker ELF içinde yok: $$MARKER"; exit 1; }; \
done
@for MARKER in \
"ASELSAN/G8G0 " \
"ASELSAN/G8G1 " \
"ASELSAN/G8G2 " \
"ASELSAN/BOOT8G "; do \
COUNT=$$(LC_ALL=C strings "$(RPI5_ELF)" | grep -Fo -- "$$MARKER" | wc -l | tr -d '[:space:]'); \
[ "$$COUNT" -eq 1 ] || \
{ echo "HATA: G8g proof marker ELF exact-once değil: $$MARKER ($$COUNT)"; exit 1; }; \
done
@G8G_ERROR_MARKER="ASELSAN/G8GERR CODE="; \
COUNT=$$(LC_ALL=C strings "$(RPI5_ELF)" | grep -Fo -- "$$G8G_ERROR_MARKER" | wc -l | tr -d '[:space:]'); \
[ "$$COUNT" -eq 1 ] || \
{ echo "HATA: G8g hata markerı ELF exact-once değil: $$COUNT"; exit 1; }
@G8F_FIXTURE=simulation/tests/fixtures/rpi5_g8f_uart_suffix.log; \
for MARKER in "ASELSAN/G8F0 " "ASELSAN/G8F1 " "ASELSAN/BOOT8F "; do \
COUNT=$$(grep -Fc "$$MARKER" "$$G8F_FIXTURE" || true); \
[ "$$COUNT" -eq 1 ] || \
{ echo "HATA: canonical G8f UART marker exact-once değil: $$MARKER ($$COUNT)"; exit 1; }; \
done; \
if grep -Fq "ASELSAN/G8FERR" "$$G8F_FIXTURE"; then \
echo "HATA: canonical G8f UART success fixture hata markerı içeriyor"; \
exit 1; \
fi
@printf '%s %s\n' "$(RPI5_G8G_FIXTURE_SHA256)" "$(RPI5_G8G_FIXTURE)" | \
shasum -a 256 -c - >/dev/null || \
{ echo "HATA: canonical G8g UART success fixture SHA256 uyuşmuyor"; exit 1; }
@G8G_FIXTURE="$(RPI5_G8G_FIXTURE)"; \
BYTES=$$(wc -c < "$$G8G_FIXTURE" | tr -d '[:space:]'); \
[ "$$BYTES" -eq "$(RPI5_G8G_FIXTURE_BYTES)" ] || \
{ echo "HATA: G8g UART success fixture byte sayısı exact değil: $$BYTES"; exit 1; }; \
LINES=$$(wc -l < "$$G8G_FIXTURE" | tr -d '[:space:]'); \
[ "$$LINES" -eq 4 ] || \
{ echo "HATA: G8g UART success fixture satır sayısı exact değil: $$LINES"; exit 1; }; \
for MARKER in "ASELSAN/G8G0 " "ASELSAN/G8G1 " "ASELSAN/G8G2 " "ASELSAN/BOOT8G "; do \
COUNT=$$(grep -Fo -- "$$MARKER" "$$G8G_FIXTURE" | wc -l | tr -d '[:space:]'); \
[ "$$COUNT" -eq 1 ] || \
{ echo "HATA: canonical G8g UART marker exact-once değil: $$MARKER ($$COUNT)"; exit 1; }; \
done; \
if grep -Fq "ASELSAN/G8GERR" "$$G8G_FIXTURE"; then \
echo "HATA: canonical G8g UART success fixture hata markerı içeriyor"; \
exit 1; \
fi
@mkdir -p build/rpi5
$(OBJCOPY) -O binary $(RPI5_ELF) $(RPI5_IMG)
@for MARKER in \
"ASELSAN/G8F0 CPU=0 PREREQ=BOOT8E SOURCE=CPU0 TARGET=CPU1" \
"ASELSAN/G8F1 REPORTER=CPU0 CPU=1 MPIDR=0x" \
"ASELSAN/BOOT8F HANDOFF=POST_BOOT8E SOURCE=CPU0 TARGET=CPU1"; do \
COUNT=$$(strings $(RPI5_IMG) | grep -Fc "$$MARKER" || true); \
[ "$$COUNT" -eq 1 ] || \
{ echo "HATA: RPi5 paket marker exact-once değil: $$MARKER ($$COUNT)"; exit 1; }; \
done
@for MARKER in \
"ASELSAN/G8G0 " \
"ASELSAN/G8G1 " \
"ASELSAN/G8G2 " \
"ASELSAN/BOOT8G "; do \
COUNT=$$(LC_ALL=C strings "$(RPI5_IMG)" | grep -Fo -- "$$MARKER" | wc -l | tr -d '[:space:]'); \
[ "$$COUNT" -eq 1 ] || \
{ echo "HATA: G8g proof marker raw image exact-once değil: $$MARKER ($$COUNT)"; exit 1; }; \
done
@G8G_ERROR_MARKER="ASELSAN/G8GERR CODE="; \
COUNT=$$(LC_ALL=C strings "$(RPI5_IMG)" | grep -Fo -- "$$G8G_ERROR_MARKER" | wc -l | tr -d '[:space:]'); \
[ "$$COUNT" -eq 1 ] || \
{ echo "HATA: G8g hata markerı raw image exact-once değil: $$COUNT"; exit 1; }
cp $(RPI5_DTB) $(RPI5_PACKAGE_DTB)
cp $(RPI5_CONFIG) $(RPI5_PACKAGE_CONFIG)
@cd build/rpi5 && shasum -a 256 \
aselsanos-rpi5.img bcm2712-rpi-5-b.dtb config.txt > SHA256SUMS
@cd build/rpi5 && \
LINES=$$(wc -l < SHA256SUMS | tr -d '[:space:]'); \
[ "$$LINES" -eq 3 ] || \
{ echo "HATA: RPi5 SHA256SUMS exact üç kayıt taşımıyor: $$LINES"; exit 1; }; \
for FILE in aselsanos-rpi5.img bcm2712-rpi-5-b.dtb config.txt; do \
COUNT=$$(awk -v file="$$FILE" '$$2 == file { count++ } END { print count + 0 }' SHA256SUMS); \
[ "$$COUNT" -eq 1 ] || \
{ echo "HATA: RPi5 SHA256SUMS kaydı exact-once değil: $$FILE ($$COUNT)"; exit 1; }; \
done; \
awk 'NF != 2 || length($$1) != 64 || $$1 !~ /^[0-9a-f]+$$/ || \
$$2 !~ /^(aselsanos-rpi5[.]img|bcm2712-rpi-5-b[.]dtb|config[.]txt)$$/ { bad = 1 } \
END { exit bad }' SHA256SUMS || \
{ echo "HATA: RPi5 SHA256SUMS beklenmeyen veya bozuk kayıt içeriyor"; exit 1; }
@cd build/rpi5 && shasum -a 256 -c SHA256SUMS
@echo ""
@echo "✅ RPi5 imajı: $(RPI5_IMG)"
@echo " SHA256: $$(cat $(RPI5_SUMS))"
@ls -lh $(RPI5_IMG) $(RPI5_PACKAGE_DTB) $(RPI5_PACKAGE_CONFIG) $(RPI5_SUMS)
@echo ""
@echo "Kart için: make flash-rpi5"
# Screen bring-up is intentionally a separate target. It never runs the
# historical G8h layout gate and never overwrites build/rpi5 (S575/S570).snippet sha256: 6487dc5fd5ff…file sha256: 7308784eb395…
02 · Kapı kimlik kaydı
Operations sıra, kimlik ve başlık bağı
tam Operations kaydıL35195–L35219
website/src/lib/operations.ts::rpi5-image-package
{
id: "rpi5-image-package",
date: "2026-08-19",
sequence: 5,
status: "verified",
title: "RPi5 imaj ve boot paketi doğrulandı",
summary:
"BCM2712 hedefi için raw kernel imajı üretildi; yükleme adresi, giriş talimatı, DTB, config ve SHA-256 zinciri statik olarak denetlendi.",
evidence: [
"make image-rpi5 exit 0 verdi ve 90.368 baytlık aselsanos-rpi5.img üretti.",
"Bu ilk tarihsel artefact'ta ELF yükleme ve giriş adresi 0x0020_0000 idi; _start ilk talimatı DTB işaretçisini koruyan mov x19, x0. Sonraki fiziksel log final 0x80000 adresini kanıtladı ve sözleşme düzeltildi.",
"Güncel imaj SHA-256 değeri 8acacb283f917b0a7d8e9b7b9c96068a05264faff0df89fd5dd8eec9147787bf ve manifest kontrolü eşleşti.",
"78.703 baytlık bcm2712-rpi-5-b.dtb geçerli sürüm 17 DTB olarak açıldı; SHA-256 değeri 40a2fbe9c29e8b9a4912cf726a943068defb779fc052ec38e457a79c58abca00.",
"301 baytlık config.txt özel kernel adı ve uart_2ndstage=1 sözleşmesini taşıyor; SHA-256 değeri 89a270eb1429ecbc01dc010b3eca79ea77a92fd915e9098223de6689f1249a06.",
],
commands: [
"make image-rpi5",
"readelf / objdump",
"dtc / sha256 doğrulaması",
],
limitations: [
"microSD fiziksel olarak formatlanmadı veya yazılmadı; yıkıcı hedefler yalnızca make -n ve sahte aygıtla incelendi.",
"Gerçek Raspberry Pi 5 boot ve UART10 çıktısı henüz donanım üzerinde test edilmedi.",
],
},snippet sha256: 39e2cf09683b…file sha256: 9726dbf00f84…
Kayıtlı yürütme/kanıt komutu
make image-rpi5Registry schema v5 · generator
website/scripts/generate-code-gates.mjs · Tam SHA-256: 91d38c7b6222f0b4c117be786454853543da55a160e543d9b951057cc20dcc06