S30 · SOURCE-BOUND GATE EVIDENCE
RPi5 G7b reserved-aware monotonic PMM paketi hazırlandı
Operations --test hedefi → focused test içindeki include_str!/#[path] bağı → kaynak kesiti Bu sayfa yalnız S30 kapısına aittir; komşu kapıların kaynakları bu kabulün içine katılmaz.
S30Focused kod testiOperations id exactsource SHA exacttest target exact
operation: rpi5-g7b-reserved-aware-pmm-package-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 öğesiL74–L88
simulation/tests/rpi5_g7b_pmm.rs::bounded_constructor_rejects_a_high_later_region_without_retaining_a_partial_plan
#[test]
fn bounded_constructor_rejects_a_high_later_region_without_retaining_a_partial_plan() {
const RPI5_PHYS_END: u64 = 1u64 << 40;
let valid_edge = [(0x1000, 0x1000), (RPI5_PHYS_END - 0x1000, 0x1000)];
assert!(BumpAllocator::try_from_regions_bounded(&valid_edge, RPI5_PHYS_END).is_ok());
// İlk bölge geçerli olsa bile ikinci bölgenin end'i 40-bit sınırını
// aşıyorsa constructor hiçbir allocator döndürmemeli.
let high_second = [(0x1000, 0x1000), (RPI5_PHYS_END - 0x1000, 0x2000)];
assert_eq!(
BumpAllocator::try_from_regions_bounded(&high_second, RPI5_PHYS_END).err(),
Some(BumpAllocatorInitError::AddressLimit)
);
}snippet sha256: 0098806c025e…file sha256: 8d6f8cc91566…
03 · Kapı kimlik kaydı
Operations sıra, kimlik ve başlık bağı
tam Operations kaydıL34520–L34557
website/src/lib/operations.ts::rpi5-g7b-reserved-aware-pmm-package-staged
{
id: "rpi5-g7b-reserved-aware-pmm-package-staged",
date: "2026-08-20",
sequence: 30,
status: "partial",
title: "RPi5 G7b reserved-aware monotonic PMM paketi hazırlandı",
summary:
"G7a fiziksel BOOT7 sınırı korunarak runtime DTB planındaki bütün usable aralıkları fail-closed alan, yalnız bir 4 KiB probe frame ayırıp exact KERNEL_DATA mapping ve üç noktada volatile read/write yapan G7b yolu hazırlandı. Kod, 52/52 simülasyon testi, tam make verify ve 3/3 paket bütünlüğü geçti; 7f0ba2b9…1720e2 imajı henüz fiziksel microSD'ye yazılmadığı ve gerçek Pi 5'te G7B0/BOOT7B alınmadığı için kayıt staged/partial tutuluyor.",
evidence: [
"BumpAllocator kapasitesi DT erken bellek planının MAX_USABLE_RANGES=40 sınırıyla eşitlendi. Kurucu; boş, 40'tan fazla, sıfır boyutlu, hizasız, base+size taşmalı, sırasız/çakışan veya 40-bit fiziksel adres sınırını aşan girdileri sessiz truncation yapmadan reddediyor.",
"RPi5 yolu plan.usable() içindeki bütün aralıkları monotonik PMM'e aktarıyor; toplam frame sayısını kaydedip tam bir 4 KiB frame ayırıyor ve REMAINING+1=TOTAL_FRAMES muhasebesini doğruluyor.",
"Ayrılan frame'in tam bir usable sahibi olduğu ve kernel, runtime DTB, reserved-memory, CMA, 4 KiB guard ile 8 MiB heap aralıklarının hiçbirine taşmadığı kernel içinde fail-closed denetleniyor.",
"Yalnız bu probe frame initial page table'a identity-mapped exact KERNEL_DATA olarak ekleniyor. Sayfanın 0, 0x7f8 ve 0xff8 offsetlerine üç ayrı u64 pattern volatile yazılıp geri okunuyor.",
"Başarı sözleşmesi BOOT7'den sonra tek ASELSAN/G7B0 RANGES=<1..40> TOTAL_FRAMES=<n> ALLOC=1 FRAME=0x<4K-aligned> MAP=KERNEL_DATA RW=OK EXCLUDED=OK REMAINING=<n-1> marker'ı ve G7B0 sonrasındaki baseline'dan en az 100 tick sonra ASELSAN/BOOT7B PMM=OK TIMER=OK ALLOC=1 BASE_TICKS=<b> TICKS=<t> marker'ıdır.",
"Strict host validator; BOOT0–BOOT7 prerequisite zincirini, exact marker alanlarını/sayaçlarını, BOOT7<G7B0<BOOT7B sırasını, logged frame/TOTAL/topology muhasebesini, bağımsız DTB/heap/guard overlap sözleşmesini, G7B0 sonrası BASE_TICKS'i ve ilişkili SEC örneğini fail-closed denetliyor. Retained bütün aralıkların 40-bit sınırı allocator runtime/source ve birim test sözleşmesidir; UART marker bu aralık uçlarının tamamını host'a taşımaz.",
"PMM hedef testleri 5/5, strict G7b UART testleri 10/10 ve tam workspace matrisi 52/52 PASS verdi. On iki adversarial transcript mutantının tamamı validator'dan exit 1 aldı.",
"Root make verify exit 0 ile QEMU runtime, QEMU/RPi4/RPi5 build-image kapıları ve web doğrulamalarını birlikte geçti; rustfmt ve diff kontrolü temiz kaldı. QEMU/RPi4 binary'lerinde G7B0/G7BERR/BOOT7B marker sayıları 0/0/0, yalnız RPi5 binary'sinde 1/1/1 bulundu.",
"Yeni aselsanos-rpi5.img 140432 bayt ve SHA-256 7f0ba2b9c6c5490a455d7406c70e24c5066d6b9f05fd416e60be32e2e71720e2 olarak üretildi.",
"Sabitlenmiş bcm2712-rpi-5-b.dtb 78703 bayt / 40a2fbe9c29e8b9a4912cf726a943068defb779fc052ec38e457a79c58abca00 ve config.txt 501 bayt / 1248275cdc6f6ce951ce0ff2183471d194c5b9bb58c3dc3f66efa9156f91d76b olarak kaldı; SHA256SUMS üç payload için 3/3 OK verdi.",
],
commands: [
"make verify",
"cargo test --workspace",
"cargo test -p aselsan_microkernel_simulation --test rpi5_g7b_pmm",
"cargo test -p aselsan_microkernel_simulation --test rpi5_g7b_uart",
"cargo run -p aselsan_microkernel_simulation --example verify_rpi5_g7b_log -- simulation/tests/fixtures/rpi5_g7b_uart_pass.log",
"make image-rpi5",
"cd build/rpi5 && shasum -a 256 -c SHA256SUMS",
],
limitations: [
"7f0ba2b9…1720e2 G7b paketi henüz fiziksel microSD'ye yazılmadı; kartta fiziksel BOOT7 PASS veren 131264 baytlık 50a802e7…b266 G7a paketi bulunuyor.",
"G7B0 ve BOOT7B marker'ları gerçek Raspberry Pi 5 UART10 kaydında henüz gözlenmedi; G7b fiziksel PASS değildir. Fixture'daki RANGES/frame/tick değerleri yalnız sentetik validator girdisidir.",
"Host validator DTB, heap ve guard çakışmalarını bağımsız hesaplar; usable RAM, kernel, reserved ve CMA somut aralıkları UART'ta loglanmadığından kalan EXCLUDED=OK dışlamaları kernel runtime self-check'i ve kaynak auditine dayanır.",
"Bu dilim yalnız bir monotonik allocation ve tek 4 KiB sayfanın üç u64 noktasındaki read/write smoke kanıtıdır. Exhaustion, region traversal, deallocation/free-reuse, zeroing, cache-PoC, DMA, ECC, bütün RAM, SMP veya soak kanıtlanmaz.",
"QEMU yalnız regression/cfg izolasyonudur ve RPi5 donanım kanıtı değildir; Makefile marker kapısı ELF string presence kontrolüdür.",
"G7a'daki iki sabit 64 KiB kernel stack toplam 128 KiB sınırlı leak olarak kalır. G7c EL0 hello/SVC/exit, G7d timer-preemptive scheduling ve G8 PSCI/SMP ayrı fiziksel kapılardır.",
],
},snippet sha256: 7a05011528a2…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: 3050638b71a684d8f8f947a8a6faa237a17fa8db5dc0db04fb207b668b462af9