Gömülü Linux bir kartın açılış (boot) sürecini güç verildiği andan kullanıcı uygulamasına kadar anlatın.

Cevap

Tipik bir ARM tabanlı gömülü Linux kartı şu zinciri izler: Boot ROM → SPL/ilk aşama bootloader → U-Boot → Linux kernel (+ device tree) → rootfs → init → uygulamalar.

  1. Boot ROM: SoC içinde fabrikada yazılı koddur. Boot pinlerine veya eFuse'lara bakarak boot kaynağını (eMMC, SD, QSPI, USB, UART) seçer ve ilk aşama bootloader'ı dahili SRAM'e yükler.
  2. SPL (Secondary Program Loader): DRAM henüz çalışmadığı için küçük olmak zorundadır. Saatleri ve DDR controller'ı başlatır, sonra tam U-Boot'u DRAM'e yükler. (ARM64'te arada TF-A/ATF ve OP-TEE gibi güvenli dünya bileşenleri de çalışabilir.)
  3. U-Boot: Ortam değişkenlerini (bootcmd, bootargs) okur, kernel imajını (zImage/Image/FIT), device tree blob'u (.dtb) ve gerekirse initramfs'i belleğe yükler ve kernel'e atlar.
  4. Kernel: Kendini açar, device tree'yi parse eder, sürücüleri probe eder ve root= parametresindeki kök dosya sistemini mount eder.
  5. init: Kernel PID 1 olarak /sbin/init'i çalıştırır (systemd, BusyBox init veya SysVinit). Init servisleri ve uygulamayı başlatır.
# U-Boot konsolunda tipik bir boot komutu
setenv bootargs console=ttyS0,115200 root=/dev/mmcblk0p2 rootwait
load mmc 0:1 ${kernel_addr_r} zImage
load mmc 0:1 ${fdt_addr_r} board.dtb
bootz ${kernel_addr_r} - ${fdt_addr_r}

Boot süresini kısaltmak için

  • U-Boot'ta bootdelay=0, gereksiz sürücüleri kapatmak
  • Kernel'i küçültmek, gereksiz modülleri çıkarmak, quiet parametresi
  • systemd yerine daha hafif init, servisleri paralel başlatmak (systemd-analyze blame ile ölçmek)
  1. Linux'ta user space'den GPIO kontrol etmek için sysfs mi libgpiod mu kullanılmalı? Neden?KolayGömülü LinuxEmbedded
  2. User space'den /dev/mem ve mmap ile donanım register'larına erişmek nasıl yapılır? Riskleri ve daha iyi alternatifleri nelerdir?ZorGömülü LinuxEmbedded
  3. Linux kernel'de kesme işleme neden top half ve bottom half olarak ikiye ayrılır? Softirq, tasklet, workqueue ve threaded IRQ arasındaki farklar nelerdir?ZorGömülü LinuxEmbedded
  4. Cross-compilation nedir? Bir cross toolchain hangi bileşenlerden oluşur ve sysroot ne işe yarar?KolayGömülü LinuxEmbedded
  5. Yocto Project ile Buildroot arasındaki farklar nelerdir? Bir ürün için hangisini seçersiniz?OrtaGömülü LinuxEmbedded
  6. Bir donanım için kernel modülü (kernel space driver) mi yoksa user space driver mı yazarsınız? Artıları ve eksileri nelerdir?OrtaGömülü LinuxEmbedded

Bu konuda başka bir soru biliyor musun?

Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.

Soru ekle