Bir bootloader nasıl çalışır? Uygulamaya atlama ve güvenli firmware güncellemesi nasıl tasarlanır?

Cevap

Bootloader, reset sonrası ilk çalışan küçük programdır. Görevleri: geçerli bir uygulama olup olmadığını kontrol etmek, gerekiyorsa yeni firmware'i (UART, USB, CAN, OTA) alıp Flash'a yazmak ve uygulamaya atlamak.

Flash yerleşimi

BölgeAdres (örnek)İçerik
Bootloader0x0800000032 KB
Uygulama0x08008000Vektör tablosu + kod
MetadataSon sektörVersiyon, CRC, imza, boot bayrakları

Uygulama linker script'inde Flash başlangıcı 0x08008000 olarak ayarlanmalıdır.

Uygulamaya atlama (Cortex-M)

#define APP_ADDR 0x08008000UL
typedef void (*app_entry_t)(void);

void jump_to_app(void) {
    uint32_t sp    = *(volatile uint32_t *)APP_ADDR;
    uint32_t reset = *(volatile uint32_t *)(APP_ADDR + 4);

    if ((sp & 0x2FFE0000UL) != 0x20000000UL) return;  /* geçerli SRAM mı? */

    __disable_irq();
    SysTick->CTRL = 0;
    /* kullanılan çevresel birimleri ve saatleri sıfırla, NVIC bekleyenleri temizle */
    for (int i = 0; i < 8; i++) { NVIC->ICER[i] = 0xFFFFFFFF; NVIC->ICPR[i] = 0xFFFFFFFF; }

    SCB->VTOR = APP_ADDR;        /* vektör tablosunu taşı */
    __set_MSP(sp);
    __enable_irq();
    ((app_entry_t)reset)();
}

Sık yapılan hatalar: VTOR'u güncellememek (interrupt'lar bootloader handler'larına gider), SysTick veya bir çevresel birimin interrupt'ını açık bırakmak.

Güvenli güncelleme tasarımı

  • Bütünlük: Her imaj için CRC32 veya SHA-256; atlamadan önce doğrulanır.
  • Özgünlük (secure boot): İmaj ECDSA/Ed25519 ile imzalanır; bootloader açık anahtarı içerir. Bootloader bölgesi yazma korumalı (RDP/WRP) olmalıdır.
  • A/B (dual bank) şeması: Yeni imaj pasif slota yazılır; doğrulama başarılıysa aktif slot değiştirilir. Güncelleme yarıda kesilirse eski imaj çalışmaya devam eder.
  • Rollback / deneme sayacı: Yeni imaj ilk açılışta kendini "onaylanmış" olarak işaretlemezse (watchdog reset sonrası) bootloader eski sürüme döner.
  • Anti-rollback: Eski ve zafiyetli bir sürümün yüklenmesini versiyon sayacıyla engellemek.
  • Güncelleme sırasında güç kesintisine karşı her adım idempotent olmalıdır.

Hazır çözümler: MCUboot (Zephyr, A/B ve imza desteği), ST'nin ROM bootloader'ı (System Memory), ESP-IDF OTA.

  1. Kesme (interrupt) nedir? ISR yazarken nelere dikkat edilir?OrtaMikrodenetleyicilerEmbedded
  2. Watchdog timer nedir, ne işe yarar?KolayMikrodenetleyicilerEmbedded
  3. Mekanik bir butonun debounce işlemi neden gereklidir ve yazılımda nasıl yapılır?KolayMikrodenetleyicilerEmbedded
  4. DMA nedir, ne zaman kullanılır? DMA kullanırken cache coherency ve double buffering gibi konularda nelere dikkat edilmelidir?ZorMikrodenetleyicilerEmbedded
  5. ADC çözünürlüğü, referans voltajı ve örnekleme hızı nedir? ADC okumasında doğruluğu etkileyen faktörler nelerdir?OrtaMikrodenetleyicilerEmbedded
  6. Timer ile PWM sinyali nasıl üretilir? Frekans ve duty cycle nasıl hesaplanır?OrtaMikrodenetleyicilerEmbedded

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