ASELSANMicrokernel
M8.1 - TECHNICAL DOC

Raspberry Pi 4 - İlk Donanım Testi

QEMU'dan gerçek karta ilk çıkış. Amaç: ilk denemede UART üzerinden temiz log alabilmek. Aşağıdaki akışı sırayla takip et.

Build
SD Kart
Bağlantı
Güç
Log
En kritik kural: UART adapter 3.3V olmalı

5V bir adapter RPi4'ün GPIO pinlerini kalıcı olarak yakar. Bağlamadan önce adapterin 3.3V'a ayarlı olduğunu doğrula. TX/RX her zaman çapraz bağlanır.

QEMU'dan Gerçek Karta: İlk Çıkış

Şimdiye kadar tüm geliştirme QEMU virt makinesi üzerinde yapıldı. M0'dan M7'ye kadar olan tüm yetenekler (boot, exception handling, MMU, scheduler, capability sistemi, IPC, user-space) simülasyon ortamında test edildi ve doğrulandı.

QEMU'da Tamamlananlar
  • • EL1 bare-metal boot + VBAR + GICv2
  • • MMU + 4K paging + kernel heap
  • • CFS-lite scheduler + EL0 user task'ler
  • • Capability sistemi (CNode + mint/revoke)
  • • User-space IPC (SYS_IPC_CALL)
RPi4'te Yeni Karşılaşılacaklar
  • • Kernel EL2'de başlar (armstub + firmware)
  • • EL2 - EL1 geçişi zorunlu
  • • Peripheral base 0xFE00_0000
  • • UART clock Mailbox ile ayarlanmalı
  • • Gerçek Device Tree + GIC-400

QEMU'da Yapılanlar: M0-M7 Teknik Özet

Aşağıdaki işler sadece plan değil; QEMU virt üzerinde log, smoke test ve audit çıktılarıyla doğrulanan kernel yetenekleri. RPi4 testi bu temelin gerçek donanımda tekrar kanıtlanmasıdır.

M0-M1

Boot, exception ve timer altyapısı

  • aarch64 bare-metal kernel iskeleti, linker script ve boot.S QEMU virt üzerinde ayağa kaldırıldı.
  • PL011 UART ile ilk boot logu alındı; VBAR_EL1 exception vector table aktif edildi.
  • Exception handler policy EC bazlı çalışır hale getirildi; sync exception yolu test edildi.
  • ARM Generic Timer + GICv2 ile IRQ hattı açıldı, 100 Hz drift-free tick ve irq_lock! altyapısı eklendi.
Kanıt: QEMU kanıtı: VBAR_EL1 adresi basıldı, GICD/GICC init logları görüldü, periyodik timer tick sayacı çalıştı.
M2

Memory management ve MMU

  • PhysAddr, VirtAddr, PhysFrame ve FrameAllocator tipleriyle fiziksel/sanal adres ayrımı zorlandı.
  • BumpAllocator ile kernel sonrası RAM aralığından 4 KiB frame dağıtımı yapıldı.
  • 4 seviyeli aarch64 4K page table walker yazıldı; L0-L3 descriptor doğrulaması loglandı.
  • MAIR_EL1, TCR_EL1, TTBR0_EL1, TLBI ve SCTLR_EL1 sırasıyla MMU + cache enable akışı doğrulandı.
  • Kernel RAM normal memory, UART/GIC device memory olarak identity mapped edildi; LockedHeap ve alloc::Box çalıştırıldı.
Kanıt: QEMU kanıtı: RAM/UART/GIC için L3 descriptor değerleri basıldı, MMU enable sonrası log akışı devam etti.
M3

Task modeli, context switch ve scheduler

  • Task, TaskContext, FP/SIMD state ve context_switch.S ile gerçek task geçiş altyapısı kuruldu.
  • CFS-lite scheduler BinaryHeap üzerinde weight, aging ve min_vruntime mantığıyla çalıştırıldı.
  • Soft preemption ile timer tick NEED_RESCHED bayrağına dönüştürüldü; sonra IRQ-driven preemption yolu düzeltildi.
  • Audit sırasında TaskContext offset, TCR shareability ve dead-task queue sızıntısı dahil kritik buglar kapatıldı.
Kanıt: QEMU kanıtı: HIGH/MED/LOW task logları interleave oldu; min_vruntime arttı ve task çıkışları temizlendi.
M4

EL0 user mode ve syscall yolu

  • EL0 user task çalıştırıldı; SVC tabanlı syscall dispatch yolu kuruldu.
  • User/kernel boundary için register sözleşmesi, task stack boyutu ve return path düzeltildi.
  • Framebuffer capability modeliyle UI server/client ayrımı ve sınırlı grant/revoke akışı denendi.
  • Region-based kernel mapping ile .text/.rodata/.data ayrımı için linker symbol tabanlı haritalama hazırlandı.
Kanıt: QEMU kanıtı: EL0 task syscall attı, framebuffer grant/revoke smoke test tamamlandı, user task temiz exit verdi.
M5

Capability sistemi ve provenance

  • Generic Capability modeli, CNode yapısı ve capability provenance metadata katmanı eklendi.
  • Memory, TCB, Untyped, Framebuffer ve Endpoint object kindleri aynı cap sistemi altında toplandı.
  • Mint, derive ve revoke akışları loglanabilir hale getirildi; forensic bilgi için parent/lifetime/revoker alanları tutuldu.
  • EL0 IRQ preempt senaryosu ile user taskların timer altında kesilip tekrar schedule edilebildiği gösterildi.
Kanıt: QEMU kanıtı: cap mint/revoke logları, EL0 busy task preemption logları ve temiz task_exit kayıtları alındı.
M6-M7

EL0 IPC, rights enforcement ve reply cap lifecycle

  • Endpoint capability üzerinden SYS_IPC_CALL, SYS_IPC_RECV ve SYS_IPC_REPLY uçtan uca çalıştırıldı.
  • Server/client iki ayrı EL0 task olarak mesajlaştı; CALL block, RECV pickup, REPLY wake semantiği doğrulandı.
  • Endpoint ownership, reply_cap doğrulaması, pending queue ve revoke drain davranışları audit ile sertleştirildi.
  • RECV/REPLY rights checks, one-shot reply_cap cleanup ve mesaj kaybı riskini kapatan pending queue düzeltmeleri eklendi.
Kanıt: QEMU kanıtı: üç Call/Reply round-trip PASS verdi; server/client dead state ile temiz kapandı, reply_cap leak kalmadı.

Bu sayfa, QEMU'da çalışan sistemin ilk kez gerçek silikon üzerinde (Raspberry Pi 4) ayağa kalkması için gereken adımları içerir. Amaç: ilk denemede UART üzerinden temiz, okunabilir log alabilmek.

1. Gerekli Donanım

Raspberry Pi 4 (Herhangi bir RAM)

İlk gerçek donanım bring-up hedef kartı.

Satın alma
Raspberry Pi 4 - 4GB referans modeli
5.827,85 TLRobotistan
microSD Kart (Min 8GB, A1/A2)

FAT32 boot partition ve kernel8.img için kullanılır.

Satın alma
Kingston Canvas Select Plus 32GB A1
USB to TTL UART Adapter (3.3V!)

Boot loglarını seri port üzerinden almak için gerekir.

Satın alma
PL2303 USB-TTL / RS232 3.3V-5V seçilebilir
3x Dişi-Dişi Jumper Kablo

TX, RX ve GND hatlarını çapraz bağlamak için kullanılır.

Satın alma
40 Pin Ayrılabilen Dişi-Dişi F-F Jumper Kablo - 200 mm
44,92 TLRobotistan

Fiyatlar 21 Mayıs 2026 tarihinde kontrol edilen referans değerlerdir; stok, kargo ve kampanya bilgileri satıcı tarafında değişebilir.

2. Derleme Süreci

Board-specific feature'ları aktif ederek RPi4 imajını oluşturun:

make clean
make image-rpi4

Bu komut linker-rpi4.ld dosyasını kullanır ve çıktı olarak kernel8.img üretir.

3. SD Kart Hazırlığı

Gerçek laboratuvar ortamında microSD kart ve Raspberry Pi 4 hazırlığı

Kartı FAT32 (tek partition) olarak biçimlendirin ve şu dosyaları köke kopyalayın:

kernel8.img
config.txt
bootcode.bin
start4.elf
fixup4.dat

Önerilen config.txt

arm_64bit=1
kernel=kernel8.img
enable_uart=1
dtoverlay=disable-bt
uart_2ndstage=1

4. UART Bağlantısı

Raspberry Pi 4 ve 3.3V USB TTL UART adapter bağlantısı

Pin Şeması (çapraz)

  • GPIO 14 (TX) → Adapter RX
  • GPIO 15 (RX) → Adapter TX
  • GND → Adapter GND

Terminal Ayarı

  • Baud: 115200
  • 8-N-1 (Data-Parity-Stop)
  • picocom -b 115200 /dev/ttyUSB0

5. Pre-Flight Checklist

Güç vermeden önce her maddeyi tek tek doğrula ve işaretle. İşaretler tarayıcında saklanır.

0/10 tamam%0

6. Test Sırasında: Beklenen Senaryolar

İlk denemede en olası 4 durum ve nasıl tepki vereceğimiz. Hangisini gördüğünü bana bildir, oradan ilerleriz.

Hiçbir şey çıkmıyor (boş ekran)

Olası sebep: config.txt eksik/yanlış, UART pinleri ters bağlı veya disable-bt yok.

Ne yapalım: config.txt'i doğrula, TX/RX çapraz mı kontrol et, dtoverlay=disable-bt ekle.

Çöp / bozuk karakterler

Olası sebep: UART clock (mailbox) baud hızıyla uyuşmuyor.

Ne yapalım: 115200 baud'u doğrula, mailbox clock log'una bak, uart_2ndstage=1 ekle.

İlk birkaç satır gelip duruyor

Olası sebep: EL2 to EL1 geçişi veya stack kurulumu sorunu.

Ne yapalım: Erken boot log'larını paylaş; exception vector + stack init'i gözden geçirelim.

Loglar akıyor ama bir yerde takılıyor

Olası sebep: GIC / Timer / Scheduler init'inde kilitlenme.

Ne yapalım: Takıldığı son satırı not et; hangi init aşamasında durduğunu bildir.

7. Logları Yakalama ve Raporlama

İlk 20-30 saniyelik logu mutlaka dosyaya kaydet. Analiz için en değerli veri budur.

Log kaydı için seçenekler

# picocom ile (önerilen)
picocom -b 115200 /dev/ttyUSB0 --logfile rpi4-test.log

# veya screen
screen -L /dev/ttyUSB0 115200

# veya basit tee
cat /dev/ttyUSB0 | tee rpi4-test.log

Sonra şu şablonu doldurup bana gönder:

=== RPi4 İlk Test Raporu ===
Build komutu: make image-rpi4
config.txt içeriği: (yukarıdaki gibi mi?)

UART çıktısı (en önemli kısım):
[Buraya logları yapıştır]

Son gördüğün satır:
[örn: [M8.1] UART Clock (from mailbox): 48000000 Hz]

Çıkan sorun:
[ ] Hiçbir şey çıkmadı
[ ] Çöp karakter çıkıyor
[ ] Belli bir yere kadar log geldi sonra durdu
[ ] Kernel panic / reset attı

Ek notlar:
...