İndirme, yazma ve devreye alma farklı aşamalardır
Uzaktan güncellemede dosyanın tamamının sunucudan gelmesi başarı sayılmaz. İmajın doğru hedefe ait olduğu doğrulanmalı, belleğe eksiksiz yazılmalı, önyükleme yolu tutarlı değişmeli ve yeni uygulama gerçek görevini yapmalıdır. Elektrik bu aşamaların her birinde kesilebilir. Tasarımın sorusu yalnızca güncellemenin yeniden denenmesi değil, kesinti sonrasında cihazın hangi bilinen durumdan çalışmaya devam edeceğidir. Günlükte indirme tamamlandı kaydı bunun cevabını vermez.
En tehlikeli yaklaşım çalışan tek kopyayı silip yeni dosyayı aynı yere yazmaktır. Bellek düzeni başka seçenek sunmuyorsa kurtarma yolu, servis erişimi ve risk açıkça değerlendirilmelidir. Her cihazda A/B uygulanabileceği varsayılmaz; işlemcinin önyükleme yeteneği, flash sektörleri ve haricî bellek güveni seçeneği sınırlar. Sistem tasarımında firmware, kart ve güç davranışı birlikte ele alınmalıdır; yalnızca uygulama kodunu değiştirmek yeterli olmayabilir.
A/B düzeninde değişmez koşul: doğrulanmış bir yol kalsın
Kavramsal A/B düzeninde bir yuva çalışan imajı, diğeri adayı tutar. Doğrulama tamamlanmadan aday çalıştırılabilir sayılmaz. Doğrudan iki adresten yürütme, kopyalama ve takas yöntemlerinin gereksinimleri farklıdır. Yuva sayısını ikiye çıkarmak tek başına atomik geçiş sağlamaz. Hangi sektörün ne zaman silindiği ve kesinti sonrasında hangi işaretin yetkili kabul edildiği ayrı tasarlanır; bu bilgi güç kaybından sonra korunmalıdır.
MCUboot dokümantasyonu imaj yuvaları, deneme geçişi ve onay gibi kavramların somut bir uygulamasını gösterir. Burada anlatılan model onun bütün algoritmalarının eşdeğeri değildir. Seçilen önyükleyicinin donanım portu ve yapılandırması ayrıca incelenmelidir. Uygulama ekibinin belleği doğrusal dosya gibi varsayması; sektör boyutu, yazma hizası ve silme davranışından kaynaklanan hataları gizleyebilir. Kurtarma mantığı gerçek sürücü üzerinde test edilmeden kanıtlanmış sayılmaz.
Bölüm kaynakları: MCUboot · Bootloader design ↗
Hash, imza ve hedef uyumluluğu aynı kontrol değildir
Hash dosyanın beklenen içerikle eşleşmesini kontrol eder; beklenen hash saldırgan tarafından değiştirilebiliyorsa yazılımın kaynağını doğrulamaz. İmza, güvenilen anahtar ve doğrulama zinciriyle birlikte anlam kazanır. Ayrıca kart revizyonu, bellek yerleşimi ve gerekli bağımlılıklar kontrol edilir. Geçerli imzalı ama yanlış donanıma ait bir imaj yine kullanılamaz. İmza anahtarının korunması ve döndürülmesi uygulamadan ayrı işletim sorumluluğudur.
Geri dönüş de sınırsız eski sürüme dönmek demek değildir. Güvenlik nedeniyle engellenmiş bir sürüm ile son bilinen sağlıklı sürüm ayrılmalıdır. Kalıcı güvenlik sayacı gibi mekanizmalar donanıma ve önyükleme düzenine göre değerlendirilir. Normal uygulama geri alması ile güvenlik sürümü politikasının çelişmemesi gerekir. Hangi sürümlerin kabul edildiği, kimlerin yayın yapabildiği ve kayıp anahtarda ne yapılacağı test planına eklenir; yalnızca dosya aktarımı konuşulmaz.
Bellek hesabı: iki imajdan fazlası gerekir
Tamamen varsayımsal 2.048 KiB flash içinde 128 KiB önyükleyici, iki adet 768 KiB yuva, 64 KiB geçiş kaydı ve 128 KiB yapılandırma alanı ayıralım. Toplam 1.856 KiB kullanılır, 192 KiB kalır. Bu kaba bütçe gerçek yerleşimi doğrulamaz: sektör hizası, imaj üstbilgisi, imza, günlük ve seçilen algoritmanın ek alanı hesaplanmalıdır. Sayılar herhangi bir Gokbilge cihazının bellek özelliği değildir.
Uygulama boyutu büyüdüğünde sonradan ikinci yuva eklemek zor olabilir. İmaj sınırı derleme aşamasında kontrol edilmeli; taşan yazılım sahaya gönderilmemelidir. Ayrıca flash ömrü ve yazma sıklığı incelenir. Her açılışta aynı sektöre durum yazmak aşınma yaratabilir. Kalıcı durum alanının bozulması, sadece uygulama imajının bozulmasından farklı bir hata sınıfıdır. Bellek bütçesi kapasite, dayanıklılık ve kurtarma gereksinimlerini birlikte karşılamalıdır.
| Alan | Kapasite | Kontrol |
|---|---|---|
| Önyükleyici | 128 KiB | Koruma ve kurtarma yolu |
| İki imaj yuvası | 1.536 KiB | Başlık ve imza yuva içine sığmalı |
| Durum ve yapılandırma | 192 KiB | Atomiklik ve sürüm uyumu |
| Kalan | 192 KiB | Hizalama sonrası yeniden hesaplanır |
Yeni uygulama ne zaman onaylanmalı?
İlk komutun çalışması sağlık kanıtı değildir. Deneme açılışında uygulamanın kritik depoya erişmesi, yapılandırmayı okuyabilmesi ve temel veri yolunu çalıştırması beklenebilir. Onay koşulları ürün gereksinimine göre seçilir. Haricî sunucu o anda yok diye sağlam imajı sürekli geri almak da yanlış olabilir; yerel sağlık ile ağ erişimi ayrılır. Onay çok erken verilirse çalışmayan sürüm kalıcılaşabilir; çok geç verilirse gereksiz geri dönüşler oluşur.
Aşağıdaki çalıştırılabilir örnek yalnızca mantıksal bir durum modelidir. Doğrulanmış indirme olayı, dışarıda yapılmış doğrulamanın sonucu olarak kabul edilir; kod kriptografi veya flash yazımı uygulamaz. Güç kesintisi RAM'i sıfırlayan bir donanım simülasyonu değildir; kalıcı mantıksal duruma etkisiz olaydır. Örnek, onaysız denemenin sonraki açılışta A'ya dönmesini ve geçerli onayın B'yi kalıcı yapmasını sınar. Gerçek sistemde atomik kayıt ayrıca kanıtlanmalıdır.
const assert = require('node:assert/strict');
// Logical state model only: no flash driver or cryptographic verification.
function initial() {
return { confirmed: 'A', candidate: null, trialStarted: false };
}
function apply(state, event) {
const next = structuredClone(state);
if (event === 'verified-download') next.candidate = 'B';
if (event === 'power-loss') return next;
if (event === 'boot') {
if (next.candidate && next.trialStarted) {
next.candidate = null; next.trialStarted = false;
} else if (next.candidate) next.trialStarted = true;
}
if (event === 'confirm') {
assert(next.candidate && next.trialStarted);
next.confirmed = next.candidate;
next.candidate = null; next.trialStarted = false;
}
return next;
}
let state = initial();
state = apply(state, 'power-loss');
assert.equal(state.confirmed, 'A');
state = apply(state, 'verified-download');
state = apply(state, 'boot');
state = apply(state, 'power-loss');
state = apply(state, 'boot');
assert.equal(state.confirmed, 'A');
assert.equal(state.candidate, null);
state = apply(state, 'verified-download');
state = apply(state, 'boot');
state = apply(state, 'confirm');
assert.equal(state.confirmed, 'B');
assert.throws(() => apply(initial(), 'confirm'));
const requiredKiB = 128 + 2 * 768 + 64 + 128;
assert.equal(requiredKiB, 1856);
assert.equal(2048 - requiredKiB, 192);
console.log('Trial, rollback and capacity examples pass');Firmware geri alınsa da yapılandırma geri alınabiliyor mu?
Yeni uygulama yapılandırmayı geri dönüşsüz dönüştürürse eski imaj çalışsa bile cihaz iş yapamayabilir. Şema sürümü ve dönüştürme stratejisi belirlenir. Eski sürümün okuyacağı kopyayı korumak veya uyumlu eklemeler yapmak seçenekler arasındadır. Güncelleme başarısızlığında uygulama, yapılandırma ve kalibrasyonun hangi tutarlı kombinasyona döneceği yazılır. Kalibrasyon kaydını fabrika varsayılanıyla değiştirmek kurtarma sayılmayabilir; ölçüm işlevi bozulabilir.
Sunucu tarafı da eski ve yeni cihaz sürümlerinin bir süre birlikte çalışacağını kabul etmelidir. Komut biçimi ve kayıt şeması değişiklikleri geçiş penceresiyle yönetilir. Merkez bütün cihazların aynı anda yükseltildiğini varsayarsa çevrimdışı kalan birim bağlantı geldiğinde dışlanabilir. Hedef sürüm, gerçek çalışan sürüm ve son onay durumu ayrı alanlardır. Filo ekranında yalnızca güncel işareti görmek bu geçişin izlenebilirliğini sağlamaz.
Güç kesintisi testi rastgele fiş çekmekten ibaret değildir
Test; indirme, sektör silme, yazma, geçiş kaydı, ilk açılış ve onay noktalarını kapsayacak biçimde tasarlanır. Kesinti süresi ve yeniden besleme koşulları kayda alınır. Aynı sınırda tekrar eden deney, nadir bir tutarsızlığı yakalayabilir. Kısmi gerilim düşmesi ile tam güç kaybı farklı davranabilir; reset ve brownout yapılandırması incelenir. Deney donanım revizyonu ve önyükleyici yapılandırmasıyla ilişkilendirilir; sonuçlar başka karta doğrudan taşınmaz.
Her deneyden sonra cihazın yalnızca açılması değil, doğru imajı ve doğru veriyi kullanması kontrol edilir. Kurtarma sırasında aygıt kimliği veya ölçüm verisi kaybolmamalıdır. Başarısız kurtarmalar saklanır; son başarılı deneme önceki hatayı silmez. Kabul ölçütü denenen sınırlar ve tekrar sayısıyla raporlanır. Hiç hata görülmemiş olması, denenmemiş bütün elektriksel koşullarda kusursuz güncelleme garantisi değildir; kalan kapsam sınırları açıkça yazılır.
- Çalışan imaj ve kalıcı geçiş kaydı kesintilerde korunuyor mu?
- Onay koşulları gerçek yerel işlevi ölçüyor mu?
- Yapılandırma ve kalibrasyon eski sürümle uyumlu mu?
- Güç kesintisi deneyleri gerçek kart ve flash üzerinde yapıldı mı?
Gömülü yazılımı kart ve işletim bilgisiyle geliştirmek
Gokbilge Tech gömülü yazılımı elektronik kart, test ve sistem yaşam döngüsünden ayrı ele almaz. Yerli kart tasarımı ve firmware bilgisi; bellek seçimi, güç davranışı, programlama erişimi ve bakım yönteminin birlikte değerlendirilmesini sağlar. Küresel bileşenlerin kullanıldığı bir sistemde de bu tasarım ve doğrulama katkısı yerli mühendisliktir. Belirli bir önyükleyiciyi kullanmak otomatik güvenlik sertifikası veya bütün arızalara dayanıklılık iddiası oluşturmaz.
Teknik ön çalışmada kart revizyonu, mevcut bellek haritası, güncelleme yolu, bağlantı koşulları ve sahada kurtarma olanağı incelenebilir. Ardından uygulanabilir durum modeli, imaj kabul kuralları ve güç kesintisi deneyleri belirlenir. Bu makale herhangi bir mevcut ürünün A/B özelliğini kullandığını iddia etmez. Amacı, gömülü sistem hizmetinin somut riskler ve ölçülebilir kabul kanıtları üzerinden nasıl kapsamlandırılacağını açıklamaktır.
Teknik kaynaklar
Bu yaklaşımı kendi sisteminize uyarlamak ister misiniz?
Teknik ihtiyacınızı paylaşın →