S33 · SOURCE-BOUND GATE EVIDENCE
RPi5 G7b pre-MMU mutex data-abort nedeni düzeltildi; reflash paketi hazırlandı
Operations --test hedefi → focused test içindeki include_str!/#[path] bağı → kaynak kesiti Bu sayfa yalnız S33 kapısına aittir; komşu kapıların kaynakları bu kabulün içine katılmaz.
S33Focused kod testiOperations id exactsource SHA exacttest target exact
operation: rpi5-g7b-pre-mmu-pmm-publish-fix-staged
uygulama/model · focused test · Operations · 3 exact excerpt
sequence-bound=true · implementation-bound=false
01 · Testin bağlı olduğu uygulama/model kodu
Kapının yürüttüğü gerçek kaynak
tam Rust öğesiL9–L65
kernel/src/mm/frame_allocator.rs::FrameAllocator
/// Fiziksel frame ayırma ve serbest bırakma arayüzü.
///
/// # Safety Notu
/// `deallocate_frame` çağrısı **unsafe**'dir çünkü çağrı yapan taraf,
/// verilen frame'in gerçekten bu allocator tarafından ayrıldığını ve
/// şu anda kullanımda olmadığını garanti etmek zorundadır.
pub trait FrameAllocator {
/// Yeni bir 4K fiziksel frame ayırmaya çalışır.
///
/// Başarılı olursa `Some(PhysFrame)`, bellek bittiğinde `None` döner.
fn allocate_frame(&mut self) -> Option<PhysFrame>;
/// Daha önce ayrılmış bir frame'i serbest bırakır.
///
/// # Safety
/// Çağıran aşağıdaki garantileri vermek **zorundadır**:
/// - `frame`, bu allocator tarafından daha önce ayrılmış olmalıdır.
/// - `frame` şu anda hiçbir yerde kullanılmamaktadır.
/// - Aynı frame birden fazla kez serbest bırakılmamalıdır (double free).
unsafe fn deallocate_frame(&mut self, frame: PhysFrame);
/// Temporarily expose one allocated frame for bounded kernel mutation.
///
/// Early boot allocators use the identity map. Runtime allocators override
/// this hook so loader writes pass through the reserved, non-global kmap
/// window and their access authority is closed before the call returns.
///
/// # Safety
///
/// `frame` must be live and owned by this allocator. `operation` must not
/// retain the pointer after returning.
unsafe fn with_frame_bytes_mut(
&mut self,
frame: PhysFrame,
operation: &mut dyn FnMut(*mut u8),
) -> Result<(), FrameAccessError> {
operation(frame.start_address().as_u64() as *mut u8);
Ok(())
}
}
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub enum FrameAccessError {
AccessUnavailable,
}
/// En basit fiziksel frame ayırıcısı: Bump (veya "watermark") allocator.
///
/// Belleği baştan sona doğru doğrusal olarak dağıtır.
/// Serbest bırakma (deallocate) desteklemez (henüz).
///
/// Bu allocator, erken kernel aşamasında (M2) kullanmak için idealdir
/// çünkü çok az kod ve state gerektirir.
/// Erken DT planlayıcısının üretebileceği azami usable aralık sayısıyla aynı
/// sabit kapasite. G7b yolu kapasiteyi aşan girdiyi kesmez; hata döndürür.
pub const MAX_BUMP_REGIONS: usize = 40;snippet sha256: 127c482a9ec0…file sha256: d9b1102db489…
02 · Doğrulayan test kodu
Operations komutuna bağlı focused test
tam Rust öğesiL89–L104
simulation/tests/rpi5_g7b_pmm.rs::accepts_the_fixed_capacity_without_losing_the_last_region
#[test]
fn accepts_the_fixed_capacity_without_losing_the_last_region() {
let regions = (0..MAX_BUMP_REGIONS)
.map(|index| (0x1000 + index as u64 * 0x2000, 0x1000))
.collect::<Vec<_>>();
let mut allocator = BumpAllocator::try_from_regions(®ions).expect("full capacity");
assert_eq!(allocator.region_count(), MAX_BUMP_REGIONS);
assert_eq!(allocator.remaining_frames(), MAX_BUMP_REGIONS as u64);
let mut last = 0;
while let Some(frame) = allocator.allocate_frame() {
last = frame.as_u64();
}
assert_eq!(last, regions[MAX_BUMP_REGIONS - 1].0);
}snippet sha256: 3a750ecfba1b…file sha256: 8d6f8cc91566…
03 · Kapı kimlik kaydı
Operations sıra, kimlik ve başlık bağı
tam Operations kaydıL34180–L34449
website/src/lib/operations.ts::rpi5-g7b-pre-mmu-pmm-publish-fix-staged
{
id: "rpi5-g7b-pre-mmu-pmm-publish-fix-staged",
date: "2026-08-20",
sequence: 33,
status: "fixed",
title:
"RPi5 G7b pre-MMU mutex data-abort nedeni düzeltildi; reflash paketi hazırlandı",
summary:
"Sıra 32'deki gerçek BCM2712 data abort bulgusu kaynak ve disassembly düzeyinde kapatıldı. G7b PMM artık MMU kapalıyken stack-owned ordinary state olarak hazırlanıyor; BOOT4 semantiği korunarak global spin::Mutex ve atomic publish yalnız SCTLR_EL1 enable ile final ISB sonrasında çalışıyor. Yeni c065bbd7…db5f paket image/build kapısını geçti; fiziksel kartta hâlâ başarısız 7f0ba2b9…1720e2 imajı bulunduğundan kayıt staged/fixed'tir, fiziksel PASS değildir.",
evidence: [
"Root cause: MMU kapalıyken RPI5_PMM.lock() spin::Mutex yolu LDAXRB/STXR exclusive atomikleri üretiyordu. Stage-1 öncesi veri erişimleri Device bellek semantiğindeyken gerçek BCM2712 bu exclusive erişimde EL1 data abort verdi.",
"prepare_rpi5_g7b_pmm artık BumpAllocator, probe, total_frames ve region_count değerlerini PreparedRpi5G7bPmm içinde ordinary stack-owned state olarak tutuyor; pre-MMU global mutex/atomic publish kaldırıldı.",
"MMU enable ile final ISB tamamlandıktan sonra önce mevcut BOOT4 MMU=ON marker semantiği korunuyor, ardından install_rpi5_g7b_pmm çağrılıyor. Global RPI5_PMM mutex'i bu noktada Normal memory mapping altında alınır; metadata store'larından sonra READY release marker'ı en son yazılır.",
"scripts/verify-rpi5-pre-mmu-atomics.sh disassembly kapısı _start_rust içinde SCTLR_EL1 yazımı ile install_rpi5_g7b_pmm çağrı sırasını doğruluyor ve MMU enable öncesindeki LDAXR/LDXR/STXR/CAS/SWP/LDADD ailesini fail-closed reddediyor.",
"make image-rpi5 compiled gate ile PASS verdi: PMM publish SCTLR_EL1 + final ISB sonrasında ve _start_rust pre-MMU bölümünde exclusive atomik yok.",
"Nihai aselsanos-rpi5.img exact 140432 bayt ve SHA-256 c065bbd704d836cd84f7ba9515bacd67664a947337d76a704643d6a58d17db5f olarak üretildi.",
"RPi5 ELF exact 6604088 bayt / SHA-256 45b95ee8cdd49596e2d446f9dabce5839707506d6c2bab56d983bd62dd9fedd9; DTB 40a2fbe9…abca00 ve config 1248275c…d76b değişmedi.",
"Yeni SHA256SUMS üç payload için 3/3 OK verdi; 248 bayt manifest SHA-256 6eb474f17acc8f0968f040892856a6e3140e1d66f3f98618362b589d28192bb5 oldu.",
],
commands: [
"make image-rpi5",
"scripts/verify-rpi5-pre-mmu-atomics.sh <llvm-objdump> target/rpi5/aarch64-unknown-none/debug/aselsan_kernel",
"cd build/rpi5 && shasum -a 256 -c SHA256SUMS",
"shasum -a 256 build/rpi5/aselsanos-rpi5.img target/rpi5/aarch64-unknown-none/debug/aselsan_kernel build/rpi5/SHA256SUMS",
],
terminalSessionsNote:
"Sıra 33'ün özgün stdout/stderr arşivi tutulmadı. Aşağıdaki oturumlar aynı sabit c065bbd7…db5f kaynak ve artefakt üzerinde 20 Ağustos 2026'da yeniden çalıştırıldı. Filtre kullanılan oturumlarda filtre komutun içinde görünür; workspace testi yalnız suite sonuç satırlarını gösterir.",
terminalSessions: [
{
id: "fmt",
title: "Rust biçim kapısı",
commandLines: ["cargo fmt --all -- --check"],
outputLines: [],
exitCode: 0,
outputMode: "complete",
},
{
id: "workspace-tests",
title: "Workspace test matrisi · 52/52",
commandLines: ["cargo test --workspace"],
outputLines: [
"Finished `test` profile [optimized + debuginfo] target(s) in 0.02s",
"running 0 tests",
"test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s",
"running 4 tests",
"test result: ok. 4 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s",
"running 13 tests",
"test result: ok. 13 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s",
"running 1 test",
"test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s",
"running 19 tests",
"test result: ok. 19 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s",
"running 5 tests",
"test result: ok. 5 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s",
"running 10 tests",
"test result: ok. 10 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s",
"running 0 tests",
"test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s",
],
exitCode: 0,
outputMode: "selected",
outputNote:
"Tam Cargo çıktısındaki suite başlangıç ve sonuç satırları; tek tek test adları bu önizlemede gösterilmez.",
},
{
id: "pmm-tests",
title: "G7b PMM hedef testleri",
commandLines: [
"cargo test -p aselsan_microkernel_simulation --test rpi5_g7b_pmm",
],
outputLines: [
"running 5 tests",
"test result: ok. 5 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s",
],
exitCode: 0,
outputMode: "selected",
outputNote: "Cargo çıktısının sonuç bloğu.",
},
{
id: "uart-tests",
title: "G7b UART doğrulayıcı testleri",
commandLines: [
"cargo test -p aselsan_microkernel_simulation --test rpi5_g7b_uart",
],
outputLines: [
"running 10 tests",
"test result: ok. 10 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s",
],
exitCode: 0,
outputMode: "selected",
outputNote: "Cargo çıktısının sonuç bloğu.",
},
{
id: "qemu-build",
title: "QEMU kernel derlemesi",
commandLines: [
"set -o pipefail",
"make kernel 2>&1 | grep -E '^(>>>|warning: .*generated| Finished)'",
],
outputLines: [
" Finished `release` profile [optimized] target(s) in 0.05s",
" Finished `release` profile [optimized] target(s) in 0.00s",
">>> ASELSAN Kernel derleniyor (QEMU virt)...",
'warning: `aselsan_kernel` (bin "aselsan_kernel") generated 226 warnings (run `cargo fix --bin "aselsan_kernel" -p aselsan_kernel` to apply 24 suggestions)',
" Finished `dev` profile [optimized + debuginfo] target(s) in 0.05s",
],
exitCode: 0,
outputMode: "filtered",
outputNote: "Çıktı, komutta görünen grep deseniyle filtrelendi.",
},
{
id: "qemu-smoke",
title: "QEMU runtime smoke",
commandLines: ["set -o pipefail", "make verify-qemu 2>&1 | tail -n 1"],
outputLines: [
"QEMU smoke PASS: hello ELF + IPC ELF + scheduler SEC 5; fault marker yok",
],
exitCode: 0,
outputMode: "filtered",
outputNote: "Komut yalnız son sonuç satırını gösterir.",
},
{
id: "rpi4-build",
title: "Raspberry Pi 4 kernel derlemesi",
commandLines: [
"set -o pipefail",
"make kernel-rpi4 2>&1 | grep -E '^(>>>|warning: .*generated| Finished)'",
],
outputLines: [
" Finished `release` profile [optimized] target(s) in 0.04s",
" Finished `release` profile [optimized] target(s) in 0.00s",
">>> ASELSAN Kernel derleniyor (Raspberry Pi 4 - BCM2711)...",
'warning: `aselsan_kernel` (bin "aselsan_kernel") generated 214 warnings (run `cargo fix --bin "aselsan_kernel" -p aselsan_kernel` to apply 24 suggestions)',
" Finished `dev` profile [optimized + debuginfo] target(s) in 0.05s",
],
exitCode: 0,
outputMode: "filtered",
outputNote: "Çıktı, komutta görünen grep deseniyle filtrelendi.",
},
{
id: "rpi5-build",
title: "Raspberry Pi 5 kernel derlemesi",
commandLines: [
"set -o pipefail",
"make kernel-rpi5 2>&1 | grep -E '^(>>>|warning: .*generated| Finished)'",
],
outputLines: [
" Finished `release` profile [optimized] target(s) in 0.04s",
" Finished `release` profile [optimized] target(s) in 0.00s",
">>> ASELSAN Kernel derleniyor (Raspberry Pi 5 - BCM2712)...",
'warning: `aselsan_kernel` (bin "aselsan_kernel") generated 159 warnings (run `cargo fix --bin "aselsan_kernel" -p aselsan_kernel` to apply 22 suggestions)',
" Finished `dev` profile [optimized + debuginfo] target(s) in 0.05s",
],
exitCode: 0,
outputMode: "filtered",
outputNote: "Çıktı, komutta görünen grep deseniyle filtrelendi.",
},
{
id: "marker-isolation",
title: "Board marker izolasyonu",
commandLines: [
"for board in qemu rpi4 rpi5; do",
' elf="target/$board/aarch64-unknown-none/debug/aselsan_kernel"',
" printf '%s ' \"$board\"",
" for marker in 'ASELSAN/G7B0 RANGES=' 'ASELSAN/G7BERR' 'ASELSAN/BOOT7B PMM=OK'; do",
' strings "$elf" | awk -v marker="$marker" \'index($0, marker) { count++ } END { printf "%d ", count + 0 }\'',
" done",
" printf '\\n'",
"done",
],
outputLines: ["qemu 0 0 0 ", "rpi4 0 0 0 ", "rpi5 1 1 1 "],
exitCode: 0,
outputMode: "complete",
},
{
id: "image",
title: "RPi5 imaj ve paket kapısı",
commandLines: [
"set -o pipefail",
"make image-rpi5 2>&1 | grep -E '^( Finished|>>>|warning: .*generated|PASS:|firmware/bcm|/.*llvm-objcopy|cp |aselsanos-rpi5\\.img:|bcm2712-rpi-5-b\\.dtb:|config\\.txt:|✅| SHA256:|-rw)'",
],
outputLines: [
" Finished `release` profile [optimized] target(s) in 0.04s",
" Finished `release` profile [optimized] target(s) in 0.00s",
">>> ASELSAN Kernel derleniyor (Raspberry Pi 5 - BCM2712)...",
'warning: `aselsan_kernel` (bin "aselsan_kernel") generated 159 warnings (run `cargo fix --bin "aselsan_kernel" -p aselsan_kernel` to apply 22 suggestions)',
" Finished `dev` profile [optimized + debuginfo] target(s) in 0.06s",
"firmware/bcm2712-rpi-5-b.dtb: OK",
"PASS: RPi5 PMM publish SCTLR_EL1 + ISB sonrasında; _start_rust pre-MMU gövdesinde exclusive atomik yok",
"/Users/onderozturk/.rustup/toolchains/nightly-aarch64-apple-darwin/lib/rustlib/aarch64-apple-darwin/bin/llvm-objcopy -O binary target/rpi5/aarch64-unknown-none/debug/aselsan_kernel build/rpi5/aselsanos-rpi5.img",
"cp firmware/bcm2712-rpi-5-b.dtb build/rpi5/bcm2712-rpi-5-b.dtb",
"cp firmware/config.txt build/rpi5/config.txt",
"aselsanos-rpi5.img: OK",
"bcm2712-rpi-5-b.dtb: OK",
"config.txt: OK",
"✅ RPi5 imajı: build/rpi5/aselsanos-rpi5.img",
" SHA256: c065bbd704d836cd84f7ba9515bacd67664a947337d76a704643d6a58d17db5f aselsanos-rpi5.img",
"-rw-r--r--@ 1 onderozturk staff 248B Aug 20 12:18 build/rpi5/SHA256SUMS",
"-rwxr-xr-x@ 1 onderozturk staff 137K Aug 20 12:18 build/rpi5/aselsanos-rpi5.img",
"-rw-r--r--@ 1 onderozturk staff 77K Aug 20 12:18 build/rpi5/bcm2712-rpi-5-b.dtb",
"-rw-r--r--@ 1 onderozturk staff 501B Aug 20 12:18 build/rpi5/config.txt",
],
exitCode: 0,
outputMode: "filtered",
outputNote: "Çıktı, komutta görünen grep deseniyle filtrelendi.",
},
{
id: "pre-mmu-gate",
title: "Pre-MMU exclusive-atomik disassembly kapısı",
commandLines: [
'OBJDUMP=$(find "$(rustc --print sysroot)" -name llvm-objdump -print -quit)',
"printf '%s\\n' \"$OBJDUMP\"",
'sh scripts/verify-rpi5-pre-mmu-atomics.sh "$OBJDUMP" target/rpi5/aarch64-unknown-none/debug/aselsan_kernel',
],
outputLines: [
"/Users/onderozturk/.rustup/toolchains/nightly-aarch64-apple-darwin/lib/rustlib/aarch64-apple-darwin/bin/llvm-objdump",
"PASS: RPi5 PMM publish SCTLR_EL1 + ISB sonrasında; _start_rust pre-MMU gövdesinde exclusive atomik yok",
],
exitCode: 0,
outputMode: "complete",
},
{
id: "fixture-validator",
title: "Strict G7b UART fixture doğrulaması",
commandLines: [
"cargo run --quiet -p aselsan_microkernel_simulation --example verify_rpi5_g7b_log -- simulation/tests/fixtures/rpi5_g7b_uart_pass.log",
],
outputLines: [
"G7b UART evidence PASS: regions=3 total_frames=155000 remaining_frames=154999 frame=0x18c5000 boot7_ticks=300 g7b_base_ticks=300 g7b_delta=100",
"G7b exclusion-scope limitation: host checks DTB+heap+guard ranges; kernel/reserved/CMA range lists are not logged",
],
exitCode: 0,
outputMode: "complete",
},
{
id: "manifest",
title: "Üç dosyalı SHA256 manifesti",
commandLines: ["cd build/rpi5", "shasum -a 256 -c SHA256SUMS"],
outputLines: [
"aselsanos-rpi5.img: OK",
"bcm2712-rpi-5-b.dtb: OK",
"config.txt: OK",
],
exitCode: 0,
outputMode: "complete",
},
{
id: "hashes",
title: "Artefakt SHA-256 değerleri",
commandLines: [
"shasum -a 256 build/rpi5/aselsanos-rpi5.img target/rpi5/aarch64-unknown-none/debug/aselsan_kernel build/rpi5/bcm2712-rpi-5-b.dtb build/rpi5/config.txt build/rpi5/SHA256SUMS",
],
outputLines: [
"c065bbd704d836cd84f7ba9515bacd67664a947337d76a704643d6a58d17db5f build/rpi5/aselsanos-rpi5.img",
"45b95ee8cdd49596e2d446f9dabce5839707506d6c2bab56d983bd62dd9fedd9 target/rpi5/aarch64-unknown-none/debug/aselsan_kernel",
"40a2fbe9c29e8b9a4912cf726a943068defb779fc052ec38e457a79c58abca00 build/rpi5/bcm2712-rpi-5-b.dtb",
"1248275cdc6f6ce951ce0ff2183471d194c5b9bb58c3dc3f66efa9156f91d76b build/rpi5/config.txt",
"6eb474f17acc8f0968f040892856a6e3140e1d66f3f98618362b589d28192bb5 build/rpi5/SHA256SUMS",
],
exitCode: 0,
outputMode: "complete",
},
],
limitations: [
"Yeni c065bbd7…db5f paket henüz fiziksel microSD'ye yazılmadı. Gücü kesilmiş kartta sıra 32'de data abort veren eski 7f0ba2b9…1720e2 imajı bulunuyor; exact disk kimliği yeniden çözülerek reflash gerekir.",
"Bu kaynak/build düzeltmesi gerçek Raspberry Pi 5 G7b PASS değildir. Reflash sonrası G7B0 ve BOOT7B marker'larının temiz UART10 capture'ında strict validator'dan geçmesi gerekir.",
"Son başarılı fiziksel runtime sınırı G7a BOOT7 SCHED=OK ORDER=ABAB STEPS=4 TICKS=202 olarak kalır.",
"Düzeltme yalnız pre-MMU exclusive-atomic data abort nedenini hedefler; tek-frame G7b smoke kapsamını exhaustion, free/reuse, bütün RAM, EL0, preemption veya SMP iddiasına genişletmez.",
],
},snippet sha256: 53ead60a5b15…file sha256: 9726dbf00f84…
Focused test komutu
cargo test -p aselsan_microkernel_simulation --test rpi5_g7b_pmmRegistry schema v5 · generator
website/scripts/generate-code-gates.mjs · Tam SHA-256: 91d38c7b6222f0b4c117be786454853543da55a160e543d9b951057cc20dcc06