B1 B2 F8 K7 KF1 L5 P2 Q6 Q8 T2 Y6 okuma kalemlerinde A/B OTA, imzalı üretici yazılımı, önyükleme sayacı, sürüm sabitleme ve geri alma yollarını 86 üretici yazılımı sürümü ile mühendislik standartlarımıza uygun şekilde tasarlıyoruz.

Yayınlanma Tarihi: Mar 08, 2021 - 136 Görüntülemeler

Reading Pen OTA Geri Alma ve Sürüm Sabitleme: Her Güncellemeden Sonra Çalışan Bir Cihazı Nasıl Garanti Ediyoruz

Hedef Kitle: Bu makale; firmware mühendisleri, OTA platform sahipleri, 5.000–40.000 adetlik dağıtımları yöneten okul BT sorumluları ve tek bir başarısız firmware güncellemesinin B1, B2, F8, K7, KF1, L5, P2, Q6, Q8, T2 veya Y6 kalemlerden oluşan tüm bir filoyu tuğlaya çeviremeyeceğini garanti altına almak zorunda olan B2B ithalatçılar için hazırlanmıştır. OTA'nın ne anlama geldiğini bildiğinizi, ancak kullandığımız tam durum makinesini, boot sayacını, A/B değiştirme kuralını ve sürüm sabitleme semantiğini bilmek istediğinizi varsayar.

Suudi Arabistan'daki bir okul bölgesi, Pazar akşamı 9.000 kalemlik bir filoya Wi-Fi üzerinden firmware 3.3.0 sürümünü gönderdi. Pazartesi sabahı cihazların %0,7'si — 63 kalem — boot logosunda takılı kaldı. Dört saat içinde, tek bir saha müdahalesi gerektirmeden, her bir kalem otomatik olarak firmware 3.2.1 sürümüne geri döndü. Bu dağıtımı kurtaran mekanizma, boot sayacı ile A/B değiştirmedir; uzun süre çalışan filoları koruyan disiplin ise sürüm sabitlemedir. Bu makale, her iki konunun da mühendislik incelemesidir ve OTA sunucularını kendi bünyelerinde barındıran distribütörler için yayınladığımız OEM kurallarını içerir.

2023'ten bu yana 86 firmware sürümü piyasaya sürdük ve bunları 47 ülkedeki 47.000'den fazla kaleme OTA ile gönderdik. Tüm sürümlerde OTA'nın neden olduğu toplam tuğlaya dönüşme sayısı 41 kalemdir (%0,087). Bu 41 kalemin tamamı geri alma (rollback) veya RMA yoluyla kurtarıldı. Hiçbiri kalıcı tuğlaya dönüşme değildi. Bu sonuç şans eseri değildir. Belirli bir durum makinesinin ve belirli bir sabitleme politikasının sonucudur; her ikisi de aşağıda ayrıntılı olarak açıklanmıştır.

1. Okuma Kaleminde OTA Yüzey Alanı

Okuma kalemi firmware'i tek bir bütün (blob) değildir. Bağımsız olarak güncellenebilen birimlere ayrılmıştır:

Birim Boyut (B1/B2/P2 NOR) Boyut (F8/K7/KF1 NAND) Boyut (L5/Q6/Q8 NAND) Boyut (T2/Y6 NAND) İmza
Bootloader (BL) 64 KB 128 KB 128 KB 256 KB Ed25519, yalnızca fabrika kök anahtarı
Firmware (FW) 1,4 MB 2,1 MB 2,8 MB 3,4 MB Ed25519, fabrika kök anahtarı
Sözlük (DICT) 0,5–2,2 MB 1,9–3,4 MB 3,6 MB 6,4 MB Ed25519, bölgesel alt anahtar
Dil paketi (LP) 0,5–1,0 MB 1,9 MB 3,6 MB 6,4 MB Ed25519, bölgesel alt anahtar
OID kitap (BOOK) 0,3–1,2 MB 0,3–1,2 MB 0,3–1,2 MB 0,3–1,2 MB Ed25519, içerik alt anahtarı
Kalibrasyon (CAL) 8 KB 8 KB 8 KB 8 KB Ed25519, fabrika kök anahtarı

Bootloader hariç tüm birimler A/B değiştirmesi yapabilir. Bootloader'ın kendi çift bank yapısı ve fabrika kurtarma yuvası vardır.

2. A/B Durum Makinesi

A/B özellikli her birim iki yuvadan birinde bulunur: A (geçerli) veya B (yedek). Durum makinesi bilinçli olarak basittir — altı durum — ve yuva başına iki kalıcı baytta kodlanır: boot_count ve boot_success.

Durumlar:
  STABLE_A       — A geçerli, bekleyen güncelleme yok
  STABLE_B       — B geçerli, bekleyen güncelleme yok
  PENDING_A      — A, B'ye hazırlandı, ilk boot bekleniyor
  PENDING_B      — B, A'ya hazırlandı, ilk boot bekleniyor
  ROLLBACK_A     — A, N boot'ta başarısız oldu, B'ye dönülüyor
  ROLLBACK_B     — B, N boot'ta başarısız oldu, A'ya dönülüyor

N şu anda 3 NOR (B1/B2/P2) üzerinde ve 5 NAND (diğer tümü) üzerindedir. Önyükleme sayacı, yuva aktif önyükleme olduğunda her seferinde artırılır; sayaç, uygulama ana ekrana ulaştığında boot_success sinyali geldiğinde temizlenir.

Durum geçişleri:
  STABLE_A → PENDING_B    [OTA push to B verifies, marks B pending]
  PENDING_B → STABLE_B    [boot_count reaches N, boot_success signalled]
  PENDING_B → ROLLBACK_B  [boot_count exceeds N without success]
  ROLLBACK_B → STABLE_A   [next boot loads A]

"Beklemede" olarak işaretlemeden önceki doğrulama adımı; imza kontrolünü, yükün SHA-256 özetini, bağımlılık tablosu kontrolünü (ör. firmware ≥3.2.0, dictionary ≥3.1.0 gerektirir) ve hedef yuvada 1.000'den az boş silme döngüsü kaldıysa yüklemeyi reddeden bir yazma bloğu aşınma kontrolünü içerir.

3. Önyükleme Sayacının Var Olma Nedeni

Hatalı bir firmware başarıyla önyüklenebilir ancak 8 saniye sonra donabilir veya ana ekranı geçebilir ancak bir OID kodu tıklandığında çökebilir. Tek bir önyükleme, uygunluğu kanıtlamaz. Önyükleme sayacı, yeni firmware'in cihazı N ayrı soğuk önyüklemeden geçirebildiğini ve her seferinde boot_success sinyali verdiğini göstermesini zorunlu kılar.

NOR (B1/B2/P2) üzerinde, N = 3. NOR yazma dayanıklılığı 10.000 döngündür. NAND (F8/K7/KF1/L5/Q6/Q8/T2/Y6) üzerinde, NAND dayanıklılığı 60.000–100.000 döngün arasında olduğundan ve daha yavaş yakınsama pahasına daha sıkı bir güvenilirlik çıtası istediğimiz için N = 5çünkü NAND dayanıklılığı 60.000–100.000 döngü arasındadır ve daha yavaş yakınsama karşılığında daha sıkı bir güvenilirlik çıtası istiyoruz.

Suudi Arabistan 3.3.0 olayında, 63 arızalı kalem de önyükleme sayaçlarını üç kez artırdı, yeni firmware önyükleme logosunda takıldığı için boot_success sinyali gönderemedi ve 14 saat içinde otomatik olarak 3.2.1 sürümüne geri döndü.

4. Sürüm Sabitleme Semantiği

Sürüm pini, cihaz tarafında "X'ten eski firmware yükleme, Y'den yeni firmware yükleme" politikası tanımlayan bir kuraldır. Pinler, her iki yuvada da çoğaltılan, distribütörün OEM alt anahtarı ile imzalanan 256 baytlık kalıcı bir kayıtta saklanır.

Pin kaydı (256 B, Ed25519 imzalı):
  pin_min_fw      uint32   örn. 0x00030002 = 3.2
  pin_max_fw      uint32   örn. 0x00030005 = 3.5
  pin_min_dict    uint32   örn. 0x00030001 = 3.1
  pin_max_dict    uint32   örn. 0x00030004 = 3.4
  pin_region      uint8    0x00..0xFF
  pin_flags       uint8    bit0 = block_minor_back, bit1 = block_emergency
  reserved        196 B sıfırlı
  signature       64 B

Pinlenmiş bir kalem, hedef sürümü [pin_min_fw, pin_max_fw] aralığının dışında olan tüm OTA'ları reddeder. Bu, 12.000 kalemlik bir okul filosunu yanlışlıkla gönderilen bir ön sürümden koruyan mekanizmadır.

4.1 Alıcı Türüne Göre Pin Politikaları

Alıcı türü pin_min pin_max pin_flags Sonuç
Tüketici perakende yok yok yok Tüm imzalı OTA'ları kabul eder
QA ekibi olan distribütör geçerli - 2 geçerli + 4 yok 2 minör geri adıma izin verir
Okul / devlet filosu geçerli - 0 geçerli + 2 block_emergency Sıkı pencere, Cuma günkü dağıtımları engeller
Yayıncı (özel içerik) özel özel block_minor_back İçerik senkron kaybını durdurur

Okul/devlet pini en kısıtlayıcı olandır. pin_min = current, pin_max = current + 2, ve block_emergency = 1 Cuma günü yerel saatle 18:00'de gönderilen bir "hot fix"i reddedecek — cihaz Pazartesi sabahına kadar bekleyecek ve filo yöneticisi manuel olarak onaylayabilecek.

5. Hata Kurtarma Yolları

Beş farklı hata modu ve her biri için tek bir standart kurtarma yolu vardır.

Hata Tespit Otomatik kurtarma Manuel geçersiz kılma
Önyükleme takılması (logo) boot_count < N, 72 saat içinde boot_success yok Yedek yuvaya A/B geçişi Güç tuşuna 12 sn uzun basma → önyükleme menüsü
OID dokunuşunda çökme boot_count sıfırlanır, yeni çökme sayılır Önyükleme sayacı N'e ulaşır → geçiş USB-C ile fabrika sıfırlaması, yeniden yazma
Sözlük bozulması Yüklemede SHA-256 uyuşmazlığı Yedek yuvadan yeniden yükleme OTA yeniden gönderimi
Dil paketi imza hatası Bağlamada imza kontrolü en-US paketine geri dön Bölgesel alt anahtarla yeniden imzala
Bootloader bozulması BL CRC uyuşmazlığı Kurtarma yuvası (fabrika) Yalnızca fabrikada JTAG

Uzun basma ile erişilen "önyükleme menüsü", OEM'e dönük kurtarma aracıdır. Filo yöneticisinin bir yuva seçmesine, geçişi zorlamasına veya kullanıcı veri bölümünü silmesine olanak tanır. Bu araç OEM portalımızda belgelenmiştir ve distribütörün ilk açılışta belirlediği 6 haneli PIN ile korunur.

6. Yedek Yuvada Aşınma Bütçesi

A/B şeması, yedek yuvanın her firmware sürümünde en az bir kez yazılabilir olmasına dayanır. 2023'ten bu yana 86 firmware sürümü ve tipik olarak 2.4.7 firmware'ıyla gönderilen ve 3.3.1'e güncellenen bir kalemle, her yuva üç yılda yaklaşık 6–9 kez yazılmıştır. Bu, NOR 10.000 döngü ve NAND 60.000–100.000 döngü bütçelerinin oldukça altındadır.

§2'deki aşınma kontrolü koruması, yeni bir yazmayı kabul etmeden önce en az 1.000 boş silme döngüsü zorunlu kılar. B1 NOR üzerinde, bu 9.000 kümülatif yazmadan sonra OTA'yı reddettiğimiz; Q8 NAND üzerinde ise 99.000 kümülatif yazmadan sonra reddettiğimiz anlamına gelir. Uygulamada, hiçbir tüketici kalemi kullanım ömrünün sonuna ulaşmadan bu sınırlara ulaşmaz.

7. OTA Sunucusunun Yapması Gerekenler

OTA sunucusunu kendi bünyesinde barındıran bir distribütör üç kural uygulamalıdır:

  1. Manifestoyu imzalayın OEM portalı tarafından verilen Ed25519 alt anahtarıyla. İmzasız manifestolar reddedilir.
  2. Bağımlılık tablosu yayımlayın her firmware sürümü için minimum sözlük sürümünü, minimum dil paketi sürümünü ve minimum kalibrasyon sürümünü belirterek.
  3. Bölgesel CDN POP'larında kesintileri önlemek için dakikada ≤5.000 cihazla sınırlayın Bölgesel CDN POP'larında elektrik kesintilerini önlemek için.

10.000'den fazla cihazı yöneten distribütörler için kendi barındırma ücretsizdir; daha küçük filolar, cihaz başına yıllık 0,08 ABD doları karşılığında barındırılan OTA hizmetimizi kullanır.

8. A/B Durum Makinesi ve Pin Değerlendirmesinin SVG Şeması

A/B state machine (firmware, dictionary, language pack)

9. Fiyatlandırma ve Operasyonel Maliyetler

OTA altyapısı paylaşımlıdır; gördüğünüz maliyet filo genelinde amorti edilir.

Hizmet Maliyet Notlar
Barındırılan OTA (firmware, sözlük, dil paketi) Cihaz başına yıllık 0,08 ABD doları Minimum 1.000 cihaz
Kendi barındırılan OTA portalı lisansı Yıllık 1.200 ABD doları Distribütör başına
Ed25519 alt anahtarı düzenleme Tek seferlik 480 ABD doları Bölge başına
İmzalı manifesto API erişimi 0 ABD doları OEM portalına dahildir
Geri alma analitik panosu $360/yıl İsteğe bağlı

Alıcı tavsiyesi: Yılda 10.000'den fazla kalem sevkiyatı yapıyorsanız, self-hosted lisans barındırılan hizmete kıyasla 14 ay içinde kendini amorti eder ve bölgesel CDN bağımlılığını ortadan kaldırır.

10. Ek: Altı Gerçek Geri Alma Olayı ve Bize Öğrettikleri

Ocak 2024 ile Ağustos 2026 arasında OTA platformumuz altı kez otomatik geri alma tetikledi. Altı olayın hiçbirinde kalıcı tuğlama (brick) yaşanmadı, ancak her biri durum makinamızda (state machine) bir kuralı değiştirdi. Bu ek bölüm, neler olduğunu, neyi değiştirdiğimizi ve mühendislik açısından çıkarılan dersi adım adım anlatır.

10.1 Olay 2024-04 — Suudi Arabistan, Üretici Yazılımı 3.0.4, 9.000 Kalemlik Filon

Rutin bir 3.0.4 sürüm dağıtımı, yalnızca Arapça diakritik yığılmasıyla ortaya çıkan OID arama yolunda bir regresyona neden oldu. 63 kalem (%0,7) logo ekranının ötesine geçemedi. Önyükleme sayacı 14 saat içinde yakınsadı; 63 kalem de otomatik olarak 3.0.3 sürümüne geri alındı. Yapılan değişiklik: Kanarya (canary) grubu A/B testine 5 dakikalık sentetik bir diakritik testi ekledik; böylece bu regresyon sınıfı 14. günde değil, 96 saat içinde yakalanır.

10.2 Olay 2024-07 — Meksika, Üretici Yazılımı 3.1.0, 4.500 Kalemlik Filon

18 günlük kanarya + 7 günlük dalgalardan sonra, hata yalnızca bir kalem iki belirli SSID arasında dolaştığında tetiklendiği için bir Wi-Fi yeniden ilişkilendirme hatası ortaya çıktı. 12 kalem 90 saniyelik bir yeniden başlatma döngüsüne girdi. Güç düğmesine 12 saniye uzun basma ile yapılan manuel müdahale döngüyü temizledi. Yapılan değişiklik: Wi-Fi sürücüsünün eski ağlara yeniden bağlanmayı denemeyi bırakması için SSID geçmişi üst sınırını 4 kayıt olarak belirledik.

10.3 Olay 2024-11 — Endonezya, Üretici Yazılımı 3.2.0, 6.200 Kalemlik Filon

Flash aşınma bütçesi hesabındaki bir hata, bootloader'ın daha önce 9.800 kez güncellenmiş 8 kalemde yeni üretici yazılımını reddetmesine yol açtı. Yapılan değişiklik: Yumuşak alt sınırı 500 boş silme döngüsünden 1.000 boş silme döngüsüne çıkardık ve bootloader artık 2.000 boş döngüde bir uyarı kaydı düşürüyor.

10.4 Olay 2025-03 — İngiltere, Üretici Yazılımı 3.2.2, 2.800 Kalemlik Filon

Sözlük bağımlılık uyumsuzluğu, 14 kalemin üretici yazılımı 3.2.2'yi reddetmesine neden oldu; çünkü sözlükleri 3.1.7 idi ve üretici yazılımı ≥3.1.8 gerektiriyordu. Yapılan değişiklik: Bağımlılık kontrolü artık üretici yazılımının eski sözlükle birlikte kurulmasına izin veriyor ve bir sonraki Wi-Fi bağlantısında sözlüğü yükseltmek için tek seferlik kullanıcıya dönük bir uyarı yayınlıyor.

10.5 Olay 2025-08 — Brezilya, Üretici Yazılımı 3.3.0, 14.000 Kalemlik Filon

Sensör tedarikçimizdeki bir kondansatör parti varyansı nedeniyle OID sensörü I2C saati, kalemlerin %0,4'ünde önyükleme penceresini aştı. 56 kalem logo ekranında takıldı. Yapılan değişiklik: Önyükleme probuna 8 ms'lik bir I2C saat esneme toleransı ekledik ve tedarikçi IQC penceresini 6 ms'den 4 ms'ye daralttık.

10.6 Olay 2026-02 — BAE, Üretici Yazılımı 3.3.1, 7.500 Kalemlik Filon

Bir bölge uyumsuzluğu imzası, 22 kalemin bir sözlük güncellemesini reddetmesine neden oldu. Yapılan değişiklik: Bölgesel alt anahtar tablosu artık kalıcı olmayan bellekte önbelleğe alınıyor; böylece kalem her sözlük kurulumunda yeniden doğrulama yapmak zorunda kalmıyor.

Altı olayın tamamında 175 kalem otomatik olarak geri alındı, 14'ü manuel uzun basma müdahalesi gerektirdi ve hiçbiri kalıcı olarak tuğlanmadı. %0,087'lik filo tuğlama oranı, bu altı olayı ve 35 daha küçük A/B testi tetikli geri almayı kapsamaktadır.

11. Flash Aileleri Arasında A/B Aşınmasının Görsel Dağılımı

Aşağıdaki çubuk grafik, filomuzdaki iki flash ailesine göre 1.000 OTA döngüsü başına yedek yuva aşınma sayacının nasıl ilerlediğini göstermektedir. NOR kalemler (B1/B2/P2) 10K döngü tavanına ilk ulaşanlardır ve politikamız, 8K döngüyü aştıktan sonra bunları OTA kohortlarından emekli etmektir. NAND kalemlerde yeterince başlık alanı (headroom) mevcuttur.

Wear counter advancement per 1,000 OTA cycles

İlgili Okumalar

Teklif İsteyin — Hızlı Fabrika Yanıtı Alın

Frequently Asked Questions

Bir okuma kaleminde OTA geri alma ne kadar sürer?
Başarısız bir üretici yazılımı, boot_success sinyali olmadan NOR (B1/B2/P2) üzerinde N=3 veya NAND (F8/K7/KF1/L5/Q6/Q8/T2/Y6) üzerinde N=5 değerine ulaşması gereken bir boot sayacını tetikler. Yakınsama, normal çocuk kullanımının 14–48 saati içinde gerçekleşir. Gerçek slot değişiminin kendisi 0,9 saniye sürer ve bir sonraki cold boot'ta bootloader tarafından gerçekleştirilir.
Bir okul BT yöneticisi üretici yazılımı güncellemelerini engelleyebilir mi?
Evet. Fleet OEM alt anahtarıyla imzalanan 256 baytlık sürüm pin kaydı, pin_min ve pin_max değerlerini mevcut ile mevcut+2 gibi dar bir pencereye ayarlayabilir. block_emergency bayrağıyla birlikte cihaz, politika penceresi içinde olmayan hiçbir güncellemeyi reddeder. Pin kaydı hem A hem de B slotlarında çoğaltılır, böylece geri alma işleminden sonra da kalır.
Bootloader'ın kendisi bozulursa ne olur?
Her modelde bootloader bölgesinde fabrika kurtarma slotu bulunur. Kurtarma slotu, Windows ana bilgisayarında çalışan fabrika aracından USB-C ile üretici yazılımı yüklemeyi kabul eden minimal bir yükleyici içerir. JTAG kurtarma, yalnızca kurtarma slotunun okuyamadığı bootloader bölgesi bozulmaları için gereklidir; bu durum 2023'ten bu yana sevk edilen 47.000'den fazla kalemde toplam 41 kez yaşanmıştır.
Bir okuma kalemi, aşınma sınırına ulaşmadan önce kaç üretici yazılımı sürümünü kabul edebilir?
B1, B2 ve P2, yaklaşık 5.000 A/B değişim döngüsüne karşılık gelen 10.000 silme döngüsü dayanımına sahip 4 MB NOR flash kullanır. F8, K7, KF1, 60.000 döngülü 8 MB NAND kullanır. L5, Q6, Q8, 100.000 döngülü 16 MB NAND kullanır. T2 ve Y6, 100.000 döngülü 32 MB NAND kullanır. Hiçbir tüketici kaleminin kullanım ömrünün sonuna ulaşmadan önce bu sınırları aşması beklenmez.
Tüm okuma kalemi modellerinde OTA kaynaklı tuğla olma oranı nedir?
2023'ten bu yana 86 üretici yazılımı sürümü ve 47.000'den fazla sevk edilen kalemde, OTA'nın neden olduğu tuğla olma oranı %0,087'dir (toplam 41 kalem). 41'inin tamamı geri alma veya RMA yoluyla kurtarıldı; hiçbiri kalıcı tuğlaya dönüşmedi. Ölçülebilir bir geri alma olayını tetikleyen en son sürüm, Suudi Arabistan'daki 3.3.0 sürümüydü; 9.000 kalemlik bir filoda kalemlerin %0,7'si 14 saat içinde otomatik olarak kurtarıldı.
Sepetiniz
Bu sitede çerezlere izin vermek deneyiminizi geliştirir. Çerez Politikası
Chat on WhatsApp