GELİŞTİRME GÜNLÜĞÜ
M9 — Device Tree
D + E + M9.1 paralel denetim
RPi5 + QEMU virt cilalama + DT walk debug — 18 paralel araştırma
Aynı yöntemle 3 başlık paralel keşif: gerçek donanım yolu net.
18/18 RAPOR · YOL HARİTASI HAZIR
D · RPi5 / BCM2712 (6 rapor)
- SoC: Cortex-A76 ARMv8.2, EL2 entry, x0=DTB; RAM @ 0x0, kernel @ 0x80000
- UART: PL011 UART10 @
0x10_7D00_1000(40-bit PA gerek, TCR_EL1.IPS=0b101) - GIC-400 (GICv2) @
0x10_7FFF_9000/0x10_7FFF_A000 - Boot:
kernel_2712.img+ ARM64 Linux Image header (64 byte) +config.txtenable_uart=1 - Board abstraction:
arch/aarch64/board/qemu_virt.rs+rpi5.rs+ ayrı linker scripts
E · QEMU virt cilalama (6 rapor)
- GICv3: atlanabilir — RPi5 zaten GICv2 (yatırım boşa gitmez)
- Timer: CNTV+CVAL drift-free ✓; sadece per-CPU init helper eksik (SMP için)
- PSCI:
system_off/reset/cpu_onSMC tabanlı; 100 satır - ramfb:
fw_cfg@0x09020000DMA +RamFbCfg(28 B BE); GTK pencerede pixel çıkışı - virtio-blk: defer —
virtio-driverscrate ile M9.5'te - SMP:
percpu.rshazır; PSCICPU_ON+secondary_startasm
M9.1 walk() bug (6 rapor)
- Kök neden:
ptr::add()allocation dışı = UB; LLVMopt-level=z + lto=trueile loop kapatılıyor - Padding spec: offset-from-DTB-base (mutlak değil); aligned DTB'de eşdeğer ✓
- Çözüm: byte-offset
&[u8]slice + bound-check'li iter (repnop/fdt patterni). walk_v2 yazıldı, gerçek DTB'de validate edilecek - Synthetic 103-byte test DTB hazır; M9.1 mini-test bench için
Net yol haritası (paralel araştırmadan çıkan)
M9.2 Board abstraction (arch/aarch64/board/{mod,qemu_virt,rpi5}.rs) M9.3 PSCI shutdown/reset + panic handler integration (~150 LoC) M9.4 Per-CPU timer init helper + secondary entry asm + PSCI CPU_ON M9.5 Linker_rpi5.ld + ARM64 Linux Image header + kernel_2712.img build M9.6 RPi5 ilk boot: SD kart + config.txt + serial → "HELLO from BCM2712" M9.7 walk_v2 RPi5 gerçek DTB ile validate (TCG bug bypass) M10 ramfb framebuffer (GTK'da pixel çıkışı, ASELSAN UI fundamenti) M11 virtio-blk (persistent storage, dynamic ELF loading) M12 SMP bring-up: 4 core round-robin schedulingM6.4 regression durumu
[M9.1] DTB header: magic=0xd00dfeed totalsize=0x100000 struct=0x1b88 version=17 boot_cpu=0 [M9.1] walk_v2 QEMU TCG'de geçici disabled — RPi5/U-Boot DTB ile validate edilecek [IPC-Client] reply DOGRU (echo+1) - hedef ile esleshme PASS x3 ← regression-free [IPC-Client] 3 cagri tamam, exit task_exit() name='IPC-Server'/'IPC-Client' state=Dead
M9.1
Device Tree parser — RPi5 + telefon SoC için temel yatırım
QEMU virt'i aşıp gerçek donanıma çıkmanın ilk adımı. U-Boot/Linux aarch64 boot protokolü.
HEADER PARSE OK + BOOT PROTOKOLÜ
Kazanım
-
kernel/src/dt.rsmodülü: FdtHeader + walk + memory + bootargs API'leri -
boot.S: x0 (DTB phys) callee-savedx19'a save →_start_rust(dtb_phys: u64)imzası - Linux/U-Boot/QEMU aarch64 standart boot protokolü destekleniyor
QEMU self-test
- Gömülü
qemu-virt.dtb(1 MiB, 8-byte aligned) ile self-test - Header doğrulandı:
magic=0xd00dfeed v17 size=0x1b88 - walk() QEMU TCG'de hang üretiyor — RPi5/U-Boot'ta validate edilecek
Yol haritası
- D — Raspberry Pi 5 target/linker/boot iskeleti
- E — QEMU virt GICv3 + timer + framebuffer cilalama
- B — SMP bring-up (RPi5'te gerçek secondary core)
QEMU log
[M9.1] DTB phys=0x0000000000000000 (boot protokolünden x0) [M9.1] x0=0 / invalid magic (QEMU ELF boot beklenen). Gömülü QEMU virt DTB ile self-test: [M9.1] embedded DTB phys=0x0000000040021cd0 size=1048576 bytes (align8=true) [M9.1] DTB header: magic=0xd00dfeed totalsize=0x100000 struct=0x1b88 version=17 boot_cpu=0 [M9.1] walk() QEMU TCG'de geçici disabled — header parse OK, memory/bootargs RPi5 testinde validate edilecek [IPC-Client] reply DOGRU (echo+1) - hedef ile esleshme PASS x3 ← M6.4 regression-free [IPC-Client] 3 cagri tamam, exit task_exit() name='IPC-Server'/'IPC-Client' state=Dead
Niye bu önemli
QEMU'dan ilk çıkış
DT olmayan kernel = QEMU virt'e çakılı. M9.1 ile RPi5 ve telefon SoC'leri için aynı parser kullanılır — tek seferlik yatırım.
Standart boot protokolü
U-Boot / Linux aarch64 convention'ı tam destekleniyor: x0=DTB phys. RPi5 + Snapdragon U-Boot port'ları doğrudan boot edebilir.
Audit borç temizliği önceden
M9.1'den önce task_exit TTBR0 cleanup + ELF kernel essentials map fix'leri yapıldı → temiz zemin üzerinde DT inşası.
SIRADAKİ
Kalan açık uçlar
M5 tek küçük gap + M6/M7 multi-core + 2 bağımsız task lifecycle bug'ı
DEVAM
- ✅ M5.1–5.4 — Generic Capability + provenance + CNode + mint/derive/revoke + 5 object kind hazır
- ✅ M6.1 · M6.3 · M6.4 — Endpoint cap + kernel msg queue + Reply Cap + tam EL0 IPC akışı
- ✅ M7.1–M7.5 — IPC ABI + rights enforcement + reply cap one-shot + revoke wake — 10/10 audit yeşil
- ✅ M5.5 + M7.4 + M8.2 stack mapping — Kapsamlı denetimle çözüldü (üst kartta detay). User stack USER_NORMAL + guard unmapped + per-task TTBR0/ASID. Kernel hung gitti. M7-Server EL0'da sys_write çalışıyor, hello-elf ELF EL0'da "He" yazıp exit ediyor.
- 🟡 M5.5 stack guard fault handler — Guard page map edilmiyor (Strategy A), overflow translation fault üretir; handler'da "stack overflow in task #N" branch'i opsiyonel.
- 🟡 M7.4 demo helper bug — M7-Server
u_list_my_endpoints + u_print_hexEL0 abort (kapsam dışı, helper'lar basitleştirilince çalışır). - ✅ Task exit TTBR0 cleanup —
task_exit()artıkswitch_to_kernel_address_space()çağırıyor; ELF kernel essentials mapping de 2 MiB → 128 MiB'a çıkarıldı. M6.4 0 DATA ABORT ile geçiyor. - ✅ M9.1 Device Tree parser — kernel/src/dt.rs + boot.S x0 protokolü + QEMU self-test (üst kartta detay).
- 🟡 M9.1 walk() TCG hang — Gömülü DTB ile QEMU TCG'de hang; RPi5/U-Boot'ta validate edilecek.
- 🟡 M8 ELF demo — hello-elf entry'de undefined instruction (binary'nin kendi prologue bug'ı). Geçici disable.
- 🟡 M6/M7 multi-core — Single-core OK; SMP'de
ipc_blocked_tasks+ENDPOINT_REGISTRYiçin per-CPU lock