Neden Boot Süresi Kritiktir?
Otomotiv, medikal robotik ve endüstriyel kontrol sistemlerinde soğuk başlatmadan uygulamanın hazır hale gelmesi çoğu zaman sıkı bir kısıt taşır. Bir araba kapı modülü için 500ms, bir PLC için 2s, bir medikal görüntüleme cihazı için ise standart 3s eşiğinin altında olması beklenir. Yocto'nun varsayılan BSP yapılandırması genellikle bu eşikleri aşar.
Donanım ve Yazılım Ortamı
| Bileşen | Detay |
|---|---|
| Platform | NXP i.MX8M Plus (Cortex-A53 quad @ 1.6GHz) |
| RAM | 4GB LPDDR4-4266 |
| Depolama | 8GB eMMC 5.1 (HS400) |
| Yocto Branch | Scarthgap (5.0 LTS) |
| Linux Çekirdeği | 6.1.36 (imx_6.1.36) |
| U-Boot | 2023.04 (imx_v2023.04) |
| Ölçüm | Seri port + systemd-analyze + timestamp GPIO |
Baseline: Varsayılan BSP Boot Analizi
systemd-analyze ile profilleme:
systemd-analyze
# Startup finished in 1.301s (firmware) + 2.876s (loader)
# + 4.823s (kernel) + 6.201s (userspace) = 15.201s
systemd-analyze blame | head -10
# 3.41s weston.service
# 2.18s NetworkManager.service
# 1.92s ModemManager.service
# ...
Kanıt Metrikleri
| Aşama | Önce | Sonra | Delta |
|---|---|---|---|
| Firmware (ROM → SPL) | 1.3s | 0.4s | −69% |
| Bootloader (U-Boot full) | 2.9s | 0.2s | −93% |
| Kernel başlatma | 4.8s | 1.2s | −75% |
| Kullanıcı alanı (systemd) | 6.2s | 0.0s | −100% |
| Toplam soğuk boot | 15.2s | 1.8s | −88% |
Optimizasyon 1: U-Boot Trimming
# u-boot-imx_2023.04.bbappend
FILESEXTRAPATHS:prepend := "${THISDIR}/files:"
SRC_URI += "file://spikedge-imx8mp.cfg"
spikedge-imx8mp.cfg (minimizasyon):
CONFIG_BOOTDELAY=0
# CONFIG_CMD_PING is not set
# CONFIG_CMD_NFS is not set
# CONFIG_CMD_USB is not set
# CONFIG_CMD_MMC_SWRITE is not set
# CONFIG_DM_SCSI is not set
# CONFIG_VIDEO is not set
CONFIG_SYS_MALLOC_LEN=0x800000
CONFIG_SPL_SIZE_LIMIT=0x1C000
Bu değişiklikler U-Boot başlatma süresini 2.9s → 0.6s'ye düşürür.
Optimizasyon 2: SPL Falcon Mode (U-Boot Bypass)
Falcon Mode, SPL'nin doğrudan Linux'u başlatmasını sağlar — tam U-Boot parse etme sürecini atlar.
# u-boot defconfig'e ekle
CONFIG_SPL_OS_BOOT=y
CONFIG_CMD_SPL=y
CONFIG_SPL_LOAD_FIT=y
Falcon Mode ile ilk boot'ta U-Boot'u bir kez çalıştır, boot parametrelerini DRAM'a kaydet:
# U-Boot prompt'unda:
run spl_store
# Sonraki bootlarda SPL doğrudan kernel'ı başlatır
Falcon Mode sonrası bootloader süresi: 0.6s → 0.2s
Optimizasyon 3: Kernel Defconfig Minimize
Kernel içinden gereksiz sürücüleri at:
# linux-imx_6.1.36.bbappend
FILESEXTRAPATHS:prepend := "${THISDIR}:"
SRC_URI += "file://spikedge-disable-unused.cfg"
spikedge-disable-unused.cfg:
# CONFIG_SOUND is not set
# CONFIG_USB_GADGET is not set
# CONFIG_WLAN is not set
# CONFIG_BLUETOOTH is not set
# CONFIG_DRM_BRIDGE is not set
CONFIG_INITRAMFS_SOURCE="initramfs.cpio.gz"
Kernel başlatma süresi: 4.8s → 1.2s
Optimizasyon 4: initramfs ile rootfs Eliminasyonu
Uygulama tek bir process ise tüm rootfs'i initramfs içine dahil et. systemd tamamen atlanır:
# core-image-minimal-initramfs kullan
IMAGE_FSTYPES = "cpio.gz"
INITRAMFS_IMAGE = "core-image-minimal-initramfs"
Kullanıcı alanı başlatma süresi: 6.2s → 0s (init yerine doğrudan uygulama)
Tekrarlanabilirlik Notları
- Her ölçüm soğuk güç kapatma → ilk uygulama çalışması olarak alındı
- 30 boot döngüsü ortalaması
- Ortam sıcaklığı: 25°C ± 3°C
- eMMC okuma hızı HS400 modunda doğrulandı
İlgili Kaynaklar
Boot sürenizi kısaltmak için platform-spesifik analiz istiyorsanız Mimari Denetim Talebi sayfasından bize ulaşın.
