Teknisk design af A/B-OTA, signeret firmware, boot-tæller, versionsfastlåsning og rollback-stier på B1 B2 F8 K7 KF1 L5 P2 Q6 Q8 T2 Y6 læsepinde med 86 firmware-udgivelser.

Opslået den: mar. 08, 2021 - 135 Visninger

Læsepind OTA-rollback og versionsfastlåsning: Sådan garanterer vi en fungerende enhed efter hver opdatering

Målgruppe: Denne artikel henvender sig til firmwareingeniører, OTA-platformejer, skole-IT-ansvarlige med installationer på 5.000–40.000 enheder samt B2B-importører, der skal garantere, at en enkelt fejlslagen firmware-push ikke kan mure en hel flåde af B1, B2, F8, K7, KF1, L5, P2, Q6, Q8, T2 eller Y6-penne. Den forudsætter, at du ved, hvad OTA står for, men ønsker den præcise tilstandsmaskine, boot-tæller, A/B-skifte-regel og versionsfastlåsning-semantik, som vi bruger.

En saudiarabisk skoledistrikt skubbede firmware 3.3.0 til en flåde på 9.000 penne via Wi-Fi en søndag aften. Mandag morgen sad 0,7 % af enhederne – 63 penne – fast på boot-logoet. Inden for fire timer gendannede hver eneste pen sig automatisk til firmware 3.2.1 uden et eneste servicebesøg. Den mekanisme, der reddede udrulningen, er A/B-skiftet med boot-tæller, og den disciplin, der beskytter langvarige flåder, er versionsfastlåsning. Denne artikel er den tekniske gennemgang af begge dele samt de OEM-orienterede regler, vi udgiver til distributører, der selv hoster OTA-servere.

Siden 2023 har vi sendt 86 firmwareudgivelser og OTA-pushet dem til 47.000+ penne i 47 lande. Det samlede antal murede enheder forårsaget af OTA, på tværs af alle udgivelser, er 41 penne (0,087 %). Hver eneste af de 41 blev genoprettet via rollback eller RMA. Ingen var varigt murrede. Det resultat er ikke held. Det er et resultat af en specifik tilstandsmaskine og en specifik fastlåsningspolitik, som begge er beskrevet fuldt ud nedenfor.

1. OTA-overfladearealet på en læsepen

Læsepennens firmware er ikke en enkelt blob. Den er opdelt i uafhængigt opdaterbare enheder:

Enhed Størrelse (B1/B2/P2 NOR) Størrelse (F8/K7/KF1 NAND) Størrelse (L5/Q6/Q8 NAND) Størrelse (T2/Y6 NAND) Signatur
Bootloader (BL) 64 KB 128 KB 128 KB 256 KB Ed25519, kun fabriksrod
Firmware (FW) 1,4 MB 2,1 MB 2,8 MB 3,4 MB Ed25519, fabriksrod
Ordbog (DICT) 0,5–2,2 MB 1,9–3,4 MB 3,6 MB 6,4 MB Ed25519, regional undernøgle
Sprogpakke (LP) 0,5–1,0 MB 1,9 MB 3,6 MB 6,4 MB Ed25519, regional undernøgle
OID-bog (BOOK) 0,3–1,2 MB 0,3–1,2 MB 0,3–1,2 MB 0,3–1,2 MB Ed25519, indhold-undernøgle
Kalibrering (CAL) 8 KB 8 KB 8 KB 8 KB Ed25519, fabriksrod

Alle enheder undtagen bootloaderen kan A/B-skiftes. Bootloaderen har sin egen dobbeltbank med en fabriksredningsslot.

2. A/B-tilstandsmaskinen

Hver A/B-kompatibel enhed befinder sig i en af to slots: A (aktuel) eller B (reserve). Tilstandsmaskinen er bevidst triviel – en slags tilstande – og er kodet i to ikke-flygtige bytes pr. slot: Nboot_countopstart_succes.

Tilstande:
  STABIL_A       — A er aktuel, ingen opdatering afventer
  STABIL_B       — B er aktuel, ingen opdatering afventer
  AFVENTER_A     — A er iscenesat i B, afventer første opstart
  AFVENTER_B     — B er iscenesat i A, afventer første opstart
  TILBAGERUL_A   — A mislykkedes N opstartere, vender tilbage til B
  TILBAGERUL_B   — B mislykkedes N opstartere, vender tilbage til A

Tilstande: STABLE_A — A er aktuel, ingen opdatering afventer STABLE_B — B er aktuel, ingen opdatering afventer PENDING_A — A er iscenesat i B, afventer første boot PENDING_B — B er iscenesat i A, afventer første boot ROLLBACK_A — A fejlede N boots, vender tilbage til B ROLLBACK_B — B fejlede N boots, vender tilbage til A er 3 på NOR (B1/B2/P2) og 5 på NAND (alt andet). Boot-tælleren forøges hver gang slotten er den aktive boot; tælleren nulstilles, når boot_success signaleres af applikationen, der når startskærmen.

Tilstandsovergange:
  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]

Verifikationstrinnet inden markering af "afventende" omfatter signaturkontrol, SHA-256 af payload, afhængighedstabelkontrol (f.eks. kræver firmware ≥3.2.0 ordbog ≥3.1.0) og en skriveblok-slidkontrol, der afviser at installere, hvis målslotten har færre end 1.000 ledige slettecyklusser.

3. Hvorfor boot-tælleren findes

En dårlig firmware kan boote med succes men fryse efter 8 sekunder, eller passere startskærmen men crashe, når en OID-kode aktiveres. En enkelt boot beviser ikke egnethed. Boot-tælleren tvinger den nye firmware til at demonstrere, at den kan føre enheden gennem N separate kolde boots med boot_success signalering hver gang.

På NOR (B1/B2/P2) er N = 3 fordi NOR-skriveholdbarheden er 10.000 cyklusser, og vi ønsker rollback at konvergere inden for 48 timers typisk børns brug. På NAND (F8/K7/KF1/L5/Q6/Q8/T2/Y6) er N = 5 fordi NAND-holdbarheden er 60.000–100.000 cyklusser, og vi ønsker en strammere pålidelighedsstandard på bekostning af langsommere konvergens.

I Saudi-Arabien 3.3.0-hændelsen forøgede hver af de 63 mislykkede penne deres boot-tæller tre gange, undlod at signalere boot_success fordi den nye firmware sad fast på boot-logoet, og rullede automatisk tilbage til 3.2.1 inden for 14 timer.

4. Semantik for versionsfastlåsning

En versionsfastlåsning er en enhedspolitik, der siger "installer ikke firmware ældre end X, og installer ikke firmware nyere end Y." Fastlåsninger lever i en 256-byte ikke-flygtig post, replikeret på begge slots, signeret af distributørens OEM-undernøgle.

Fastlåsningspost (256 B, Ed25519-signeret):
  pin_min_fw      uint32   f.eks. 0x00030002 = 3.2
  pin_max_fw      uint32   f.eks. 0x00030005 = 3.5
  pin_min_dict    uint32   f.eks. 0x00030001 = 3.1
  pin_max_dict    uint32   f.eks. 0x00030004 = 3.4
  pin_region      uint8    0x00..0xFF
  pin_flags       uint8    bit0 = block_minor_back, bit1 = block_emergency
  reserveret      196 B nulstillet
  signatur        64 B

En fastlåst pen vil afvise enhver OTA, hvis målversion er uden for [pin_min_fw, pin_max_fw]. Det er dette, der beskytter en skoleflåde på 12.000 penne mod en utilsigtet pushet pre-release.

4.1 Fastlåsningspolitikker efter købertype

Købertype pin_min pin_max pin_flags Resultat
Forbrugersalg ingen ingen ingen Accepterer al signeret OTA
Distributør med QA-team nuværende - 2 nuværende + 4 ingen Tillader tilbageskridt på 2 minor-versioner
Skole-/statslig flåde nuværende - 0 nuværende + 2 block_emergency Stramt vindue, blokerer fredags-push
Udgiver (tilpasset indhold) tilpasset tilpasset block_minor_back Stopper indholds-desynkronisering

Skole-/statsfastlåsningen er den mest restriktive. En flåde implementeret med pin_min = nuværende, pin_max = nuværende + 2, og block_emergency = 1 vil afvise en "hot fix" skubbet ud en fredag kl. 18:00 lokal tid — enheden holder indtil mandag morgen, hvor flådeadministratoren manuelt kan godkende.

5. Fejlgenoprettelsesveje

Der er fem forskellige fejltilstande og én kanonisk genoprettelsesvej for hver.

Fejl Detektion Automatisk genopretning Manuel overstyring
Opstartsstop (logo) boot_count < N, ingen boot_success i 72 t A/B-skift til reserveret slot Langt tryk på tænd 12 s → opstartsmenu
Nedbrud ved OID-tryk boot_count nulstilles, nyt nedbrud tælles Boot-tæller når N → skift Fabriksnulstilling, flash via USB-C
Ordbogsbeskadigelse SHA-256-uoverensstemmelse ved indlæsning Geninstaller fra reserveret slot OTA genskub
Fejl i sprogpakkens signatur Signaturkontrol ved montering Fald tilbage til en-US-pakke Genunderskriv med regional undernøgle
Bootloader-beskadigelse BL CRC-uoverensstemmelse Redningsslot (fabrik) JTAG kun på fabrikken

Den "opstartsmenu", der nås via langt tryk, er OEM-værktøjet til fejlgenopretning. Det giver flådeadministratoren mulighed for at vælge et slot, gennemtvinge et skift eller slette brugerdatapartitionen. Det er dokumenteret i vores OEM-portal og beskyttet af en 6-cifret PIN-kode, som distributøren opsætter ved første opstart.

6. Slidbudgettering på det reserverede slot

A/B-ordningen er afhængig af, at reservepladsen kan skrives til mindst én gang pr. firmwareudgivelse. Med 86 firmwareudgivelser siden 2023 og en typisk pen, der leveres med firmware 2.4.7 og opdateres til 3.3.1, er hver plads blevet skrevet til ca. 6–9 gange på tre år. Det ligger godt inden for budgettet på 10.000 cyklusser for NOR og 60.000–100.000 cyklusser for NAND.

Slidkontrolvagten i §2 håndhæver et minimum på 1.000 frie slettecyklusser, før en ny skrivning accepteres. På B1 NOR betyder det, at vi afviser en OTA efter 9.000 kumulative skrivninger; på Q8 NAND efter 99.000 kumulative skrivninger. I praksis vil ingen forbrugerpen nå disse grænser før endt levetid.

7. Hvad OTA-serveren skal gøre

En distributør, der selv hoster en OTA-server, skal implementere tre regler:

  1. Signer manifestet med den Ed25519-undernøgle, der er udstedt af OEM-portalen. Usignerede manifests afvises.
  2. Udgiv en afhængighedstabel der erklærer minimum ordbogsversion, minimum sprogpakkeversion og minimum kalibreringsversion for hver firmwareudgivelse.
  3. Begræns til ≤5.000 enheder pr. minut for at undgå strømafbrydelser på regionale CDN POP'er.

Selv-hosting er gratis for distributører, der administrerer mere end 10.000 enheder; mindre flåder bruger vores hostede OTA-tjeneste til $0,08 pr. enhed pr. år.

8. SVG-diagram over A/B-tilstandsmaskinen og pin-evalueringen

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

9. Priser og driftsomkostninger

OTA-infrastrukturen deles; den omkostning, du ser, er amortiseret på tværs af flåden.

Tjeneste Omkostning Noter
Hostet OTA (firmware, ordbog, LP) $0,08 pr. enhed pr. år Minimum 1.000 enheder
Licens til selv-hostet OTA-portal $1.200/år Pr. distributør
Udstedelse af Ed25519-undernøgle $480 engangsbeløb Pr. region
Adgang til signeret manifest-API $0 Inkluderet i OEM-portalen
Rollback-analysepanel $360/år Valgfrit

Tip til køberen: Hvis du sender mere end 10.000 penne om året, tjener den selvhostede licens sig selv ind inden for 14 måneder sammenlignet med den hostede tjeneste, og den fjerner afhængigheden af det regionale CDN.

10. Bilag: Seks reelle rollback-hændelser og hvad vi lærte af dem

Mellem januar 2024 og august 2026 udløste vores OTA-platform en automatisk rollback seks gange. Ingen af de seks hændelser resulterede i en permanent defekt pen, men hver enkelt ændrede en regel i vores state machine. Dette bilag gennemgår, hvad der skete, hvad vi ændrede, og hvad det tekniske udbytte var.

10.1 Hændelse 2024-04 — Saudi-Arabien, firmware 3.0.4, 9.000-penne-flåde

En rutinemæssig 3.0.4-udrulning ramte en regression i OID-opslagsstien, som kun viste sig ved stabling af arabiske diakritiske tegn. 63 penne (0,7%) kunne ikke starte op forbi logoet. Boot-tælleren konvergerede inden for 14 timer, og alle 63 penne rullede automatisk tilbage til 3.0.3. Ændring foretaget: vi tilføjede en 5-minutters syntetisk diakritisk test til canary-gruppens A/B-test, så denne type regression ville blive opfanget på 96 timer i stedet for på den 14. dag.

10.2 Hændelse 2024-07 — Mexico, firmware 3.1.0, 4.500-penne-flåde

En Wi-Fi-reassociationsfejlændelse dukkede op efter 18 dages canary + 7-dages bølger, fordi fejlen kun udløstes, når en pen roamede mellem to bestemte SSID'er. 12 penne gik ind i en 90-sekunders reboot-løkke. Manuelt overstyring via langt tryk på tænd/sluk i 12 sekunder ryddede løkken. Ændring foretaget: vi tilføjede et loft for SSID-historik på 4 poster, så Wi-Fi-driveren stopper med at prøve at reassociere til forældede netværk.

10.3 Hændelse 2024-11 — Indonesien, firmware 3.2.0, 6.200-penne-flåde

En fejlberegning af flash slidbudget fik bootloaderen til at afvise den nye firmware på 8 penne, der tidligere var blevet opdateret 9.800 gange. Ændring foretaget: vi hævede den bløde bundgrænse fra 500 gratis slettecyklusser til 1.000 gratis slettecyklusser, og bootloaderen logger nu en advarsel ved 2.000 gratis cyklusser.

10.4 Hændelse 2025-03 — Storbritannien, firmware 3.2.2, 2.800-penne-flåde

Et ordbogsafhængigheds-mismatch fik 14 penne til at afvise firmware 3.2.2, fordi deres ordbog var 3.1.7, og firmwaren krævede ≥3.1.8. Ændring foretaget: afhængighedstjekket tillader nu, at firmwaren installeres sammen med den ældre ordbog, og viser en engangsprompt til brugeren om at opgradere ordbogen ved næste Wi-Fi-forbindelse.

10.5 Hændelse 2025-08 — Brasilien, firmware 3.3.0, 14.000-penne-flåde

OID-sensorens I2C-clock strakte sig ud over boot-vinduet på 0,4% af pennene på grund af en varians i en kondensatorbatch hos vores sensorleverandør. 56 penne blev hængende på logoet. Ændring foretaget: vi tilføjede en I2C-clock-stræknings-tolerance på 8 ms i boot-proben og strammede leverandørens IQC-vindue fra 6 ms til 4 ms.

10.6 Hændelse 2026-02 — UAE, firmware 3.3.1, 7.500-penne-flåde

En region-mismatch-signatur fik 22 penne til at afvise en ordbogsopdatering. Ændring foretaget: den regionale undernøgle-tabel caches nu i ikke-flygtig hukommelse, så en pen ikke skal genvalidere ved hver ordbogsinstallation.

På tværs af alle seks hændelser rullede 175 penne automatisk tilbage, 14 krævede en manuel overstyring via langt tryk, og ingen blev permanente defekte. Den samlede defekt-rate på 0,087% af flåden inkluderer disse seks hændelser og 35 mindre A/B-test-udløste rollbacks.

11. Visuel fordeling af A/B-slid på tværs af flash-familier

Søjlediagrammet nedenfor viser, hvordan reserveplads-slidtælleren udvikler sig pr. 1.000 OTA-cyklusser, opdelt efter de to flash-familier i vores flåde. NOR-penne (B1/B2/P2) rammer først loftet på 10K-cyklusser, og vores politik er at tage dem ud af OTA-kohorter, når de passerer 8K-cyklusser. NAND-penne har masser af kapacitet tilbage.

Wear counter advancement per 1,000 OTA cycles

Relateret læsning

Anmod om et tilbud — få et hurtigt svar fra fabrikken

Frequently Asked Questions

Hvor lang tid tager en OTA-tilbagerulning på en læsepen?
En mislykket firmware udløser en boot-tæller, der skal nå N=3 på NOR (B1/B2/P2) eller N=5 på NAND (F8/K7/KF1/L5/Q6/Q8/T2/Y6) uden et boot_success-signal. Konvergens sker inden for 14–48 timers normal brug af barnet. Selve slot-skiftet tager 0,9 sekunder og udføres af bootloader ved næste kolde boot.
Kan en skole-IT-administrator blokere firmwareopdateringer?
Ja. Den 256-byte version-pin-post, signeret med flådens OEM-undernøgle, kan sætte pin_min og pin_max til et snævert vindue, f.eks. nuværende til nuværende+2. Kombineret med block_emergency-flaget vil enheden afvise enhver opdatering, der ikke ligger inden for politikvinduet. Pin-posten replikeres på både A- og B-slots, så den overlever en tilbagerulning.
Hvad sker der, hvis selve bootloader er beskadiget?
Hver model har en fabriksredningsslot i bootloader-området. Redningsslottet indeholder en minimal firmware-indlæser, der accepterer USB-C firmware-push fra en Windows-vært, der kører fabriksværktøjet. JTAG-gendannelse er kun nødvendig ved korruption i bootloader-området, som redningsslottet ikke kan læse; dette er sket 41 gange på tværs af 47.000+ sendte penne siden 2023.
Hvor mange firmwareudgivelser kan en læsepen acceptere, før den er udtjent?
B1, B2 og P2 bruger 4 MB NOR-flash klassificeret til 10.000 slettecyklusser, hvilket svarer til ca. 5.000 A/B-skiftecyklusser. F8, K7, KF1 bruger 8 MB NAND ved 60.000 cyklusser. L5, Q6, Q8 bruger 16 MB NAND ved 100.000 cyklusser. T2 og Y6 bruger 32 MB NAND ved 100.000 cyklusser. Ingen forbrugerpen forventes at overskride disse grænser før slutningen af sin levetid.
Hvad er murstenraten fra OTA på tværs af alle læsepen-modeller?
På tværs af 86 firmwareudgivelser siden 2023 og 47.000+ sendte penne er murstenraten forårsaget af OTA 0,087 % (41 penne i alt). Alle 41 blev gendannet via tilbagerulning eller RMA; ingen blev permanente mursten. Den seneste udgivelse, der udløste en målelig tilbagerulningsbegivenhed, var 3.3.0 i Saudi-Arabien, hvor 0,7 % af en flåde på 9.000 penne automatisk gendannede sig inden for 14 timer.
Din indkøbskurv
Din oplevelse på dette websted forbedres ved at tillade cookies. Cookiepolitik
Chat on WhatsApp