दर्शक: यह मार्गदर्शिका OEM प्रोग्राम मैनेजरों, फ़र्मवेयर आर्किटेक्ट और अनुपालन इंजीनियरों के लिए है, जिन्हें रीडिंग पेन पर सिलिकॉन के पावर-ऑन से लेकर पहले ऑडियो तक की सटीक घटनाओं को समझने की आवश्यकता है। इसमें mask-ROM बूटलोडर, द्वितीय-चरण बूटलोडर, हस्ताक्षरित-इमेज सत्यापन, A/B पार्टीशन स्विचिंग और रिकवरी पाथ शामिल हैं, जिन्हें हम 11 इन-हाउस SKU (B1, B2, F8, K7, KF1, L5, P2, Q6, Q8, T2, Y6) पर शिप करते हैं।
रीडिंग पेन का बूट कोई एकल घटना नहीं है। यह एक 5–7 चरणों वाली पाइपलाइन है, जो SKU के आधार पर लगभग 280–1,450 मिलीसेकंड में चलती है। हर चरण का एक कार्य होता है: कोड लोड करना, हस्ताक्षर सत्यापित करना, नियंत्रण सौंपना। यदि कोई भी चरण विफल होता है, तो अगला चरण नहीं चलता और पेन या तो पुनः आरंभ होता है, रिकवरी इमेज पर वापस जाता है, या ब्रिक हो जाता है।
यह लेख आपको उस पाइपलाइन के बारे में चरण-दर-चरण बताता है, हमारे 11 SKU पर मापे गए समय के साथ। हम आपको A/B पार्टीशन लेआउट, रोलबैक काउंटर, OTA स्टेजिंग फ्लो और विफलता-प्रबंधन पाथ दिखाएँगे, जिन्हें हम अपनी दो फ़ैक्ट्रियों में चलाते हैं। अंत तक आप हमारे फ़र्मवेयर-रिलीज़ नोट्स पढ़कर सटीक रूप से जान सकेंगे/सकेंगी कि संस्करण 2.4.7 से 2.5.0 में बदलने पर क्या बदलता है।
1. "BIOS" शब्द क्यों गलत है लेकिन विचार सही है
रीडिंग पेन में PC के अर्थ में BIOS नहीं होता। इसके पास एक mask-ROM बूटलोडर होता है — कुछ किलोबाइट अपरिवर्तनीय कोड, जो वेफ़र फ़ैब के समय सिलिकॉन में बर्न किया जाता है। यह ROM कोड ट्रस्ट का मूल है: इसके नीचे कोई सॉफ़्टवेयर नहीं है और इसे अधिलेखित करने का कोई तरीका नहीं है।
इसे BIOS कहना अब भी उपयोगी है क्योंकि यह आर्किटेक्चर सीधे UEFI अवधारणाओं से मेल खाता है: ROM = SEC चरण, द्वितीय-चरण बूटलोडर = PEI, फ़र्मवेयर = DXE, एप्लिकेशन = BDS। विक्रेता, जिनमें हम भी शामिल हैं, अक्सर B2B बातचीत में BIOS शब्द का ढीले ढंग से उपयोग करते हैं क्योंकि OEM खरीदार इसे समझता है।
विश्वसनीय-बूट श्रृंखला वह सत्यापन पाइपलाइन है जो इस ROM के ऊपर चलती है। इसका कार्य यह सुनिश्चित करना है कि ROM के बाद निष्पादित प्रत्येक कोड OEM की निजी कुंजी से हस्ताक्षरित हो। यदि कोई हस्ताक्षर गलत है, तो श्रृंखला रुक जाती है।
2. 7-चरणीय बूट पाइपलाइन
रीडिंग पेन का हर SKU समान सात तार्किक चरणों को लागू करता है। कार्यान्वयन फ़्लैश लेआउट और समय में भिन्न होते हैं।
| चरण | घटक | यहाँ से चलता है | सत्यापित करता है | सामान्य विलंब |
|---|---|---|---|---|
| S1 | Mask ROM बूटलोडर | रोम | वेंडर कुंजी (हार्ड-कोडेड) | 6–14 ms |
| S2 | प्रथम-चरण बूटलोडर (SBL) | NOR/eMMC बूट पार्टीशन | ओईएम RSA-2048 / ECDSA P-256 | 60–220 ms |
| S3 | द्वितीय-चरण बूटलोडर (यदि कोई हो) | NOR/eMMC बूट पार्टीशन | ओईएम RSA-2048 / ECDSA P-256 | 40–160 ms |
| S4 | फ़र्मवेयर इमेज (RTOS या Linux कर्नेल) | NOR/eMMC मुख्य पार्टीशन | ओईएम RSA-2048 / ECDSA P-256 | 80–320 मिलीसेकंड |
| S5 | ट्रस्टज़ोन / TEE विभाजन | TrustZone सुरक्षित स्टोरेज | SE हस्ताक्षर | 30–120 मिलीसेकंड |
| S6 | एप्लिकेशन + ऑडियो एसेट्स | मुख्य पार्टीशन | AES-128 / AES-256 डिक्रिप्शन | 50–280 मिलीसेकंड |
| S7 | ऑडियो ड्राइवर + पहला सैंपल | डीएसी | लागू नहीं | 14–60 मिलीसेकंड |
पहले ऑडियो तक की कुल कोल्ड-बूट अवधि 280 मिलीसेकंड (B2) से लेकर 1,450 मिलीसेकंड (L5) तक होती है। यह अंतर लगभग पूरी तरह S4 और S6 में है — Linux-आधारित SKU को rootfs माउंट करने और ALSA को प्रारंभ करने में अधिक समय चाहिए।
3. प्रति-SKU बूट समय
| SKU | S1 रोम | S2 एसबीएल | S3 द्वितीय | S4 फर्मवेयर | S5 टीईई | S6 ऐप | S7 ऑडियो | कुल |
|---|---|---|---|---|---|---|---|---|
| B1 | 8 ms | 90 ms | n/a | 120 ms | n/a | 80 ms | 22 ms | 320 ms |
| B2 | 6 ms | 70 ms | n/a | 90 ms | n/a | 84 ms | 30 ms | 280 ms |
| F8 | 10 ms | 110 ms | 80 ms | 240 ms | 60 ms | 700 ms | 50 ms | 1,250 ms |
| K7 | 7 ms | 80 ms | n/a | 140 ms | 40 ms | 60 ms | 33 ms | 360 ms |
| KF1 | 7 ms | 80 ms | n/a | 140 ms | 40 ms | 60 ms | 33 ms | 360 ms |
| L5 | 12 ms | 130 ms | 100 ms | 290 ms | 80 ms | 760 ms | 78 ms | 1,450 ms |
| P2 | 14 ms | 130 ms | n/a | 160 ms | n/a | 90 मिलीसेकंड | 26 मिलीसेकंड | 420 मिलीसेकंड |
| Q6 | 7 मिलीसेकंड | 75 मिलीसेकंड | n/a | 100 मिलीसेकंड | n/a | 92 मिलीसेकंड | 26 मिलीसेकंड | 300 मिलीसेकंड |
| Q8 | 7 मिलीसेकंड | 75 मिलीसेकंड | n/a | 100 मिलीसेकंड | n/a | 92 मिलीसेकंड | 26 मिलीसेकंड | 300 मिलीसेकंड |
| T2 | 11 मिलीसेकंड | 120 मिलीसेकंड | 90 मिलीसेकंड | 280 मिलीसेकंड | 70 मिलीसेकंड | 720 मिलीसेकंड | 58 मिलीसेकंड | 1,350 मिलीसेकंड |
| Y6 | 10 मिलीसेकंड | 110 मिलीसेकंड | 80 मिलीसेकंड | 260 मिलीसेकंड | 70 मिलीसेकंड | 800 मिलीसेकंड | 70 मिलीसेकंड | 1,400 मिलीसेकंड |
B2 हमारा सबसे तेज़ cold-boot है। L5 सबसे धीमा है। 1.17 सेकंड का अंतर मायने रखता है: यह "टैप करो और बोलो" अनुभव और "रुको, फिर बोलो" अनुभव के बीच का अंतर है।
खरीदार सुझाव: OEM से कुल समय ही नहीं, बल्कि बूट पाइपलाइन का पूरा विवरण माँगें। जो पेन 700 मिलीसेकंड में बूट होती है और उसमें 200 मिलीसेकंड की cryptographic verification होती है, उसका ऑडिट किया जा सकता है। जो पेन 700 मिलीसेकंड में बूट होती है लेकिन विवरण नहीं दे सकती, वह एक ब्लैक बॉक्स है।
4. A/B पार्टिशन लेआउट
हर Linux-आधारित रीडिंग पेन (F8, L5, T2, Y6) firmware के लिए A/B पार्टिशन योजना का उपयोग करती है। OTA सुरक्षा के लिए यही स्वर्ण मानक है, क्योंकि यदि नया image बूट नहीं हो पाता तो पेन पिछले known-good image पर वापस आ सकती है।
L5 पर A/B योजना boot और सिस्टम पार्टिशन के लिए 3.2 GB (4 × 800 MB) और user data के लिए 4.6 GB आरक्षित रखती है। TrustZone TEE पार्टिशन 200 MB की है और इसमें SE proxy तथा OEM कुंजियों के लिए secure-storage क्षेत्र शामिल है।
5. RTOS पार्टिशन लेआउट
RTOS-आधारित SKUs (B1, B2, K7, KF1, P2, Q6, Q8) को पूर्ण A/B की आवश्यकता नहीं है क्योंकि उनके firmware image 1.4–3.0 MB के होते हैं और hardware swap वाले dual-bank NOR में आराम से समा जाते हैं। B2 पर यह लेआउट ऐसा दिखता है:
| ऑफसेट | आकार | सामग्री | द्वारा सत्यापित |
|---|---|---|---|
| 0x00000000 | 16 KB | एसबीएल | मास्क रोम (RSA-2048) |
| 0x00004000 | 1.0 MB | फर्मवेयर स्लॉट A | एसबीएल (RSA-2048) |
| 0x00104000 | 1.0 MB | फ़र्मवेयर स्लॉट B | एसबीएल (RSA-2048) |
| 0x00204000 | 4.0 MB | OID ऑडियो + एसेट्स | फ़र्मवेयर (AES-128-CTR) |
| 0x00604000 | 1.0 MB | OTA स्टेजिंग | फ़र्मवेयर (AES-128-CTR) |
| 0x00704000 | 64 KB | यूज़र NVM (की स्टोर) | ट्रस्टज़ोन-M SAU |
| 0x00714000 | 64 KB | बूट फ़्लैग्स + रोलबैक काउंटर | हार्डवेयर राइट-वन्स |
रोलबैक काउंटर एक 32-बिट मोनोटोनिक काउंटर है जो हर सफल बूट पर बढ़ता है। यदि SBL को अंतिम-ज्ञात-अच्छे मान से कम काउंटर मान दिखता है, तो यह स्लॉट B पर वापस चला जाता है। यह उस हमलावर से सुरक्षा करता है जो फ़र्मवेयर को कमज़ोर पुराने संस्करण में डाउनग्रेड करने की कोशिश करता है।
6. सत्यापित बूट स्टेट मशीन
A/B स्विचिंग को नियंत्रित करने वाली स्टेट मशीन हमारी पूरी लाइन-अप में मामूली विविधताओं के साथ साझा की जाती है। यह स्टेट मशीन SBL में चलती है:
| वर्तमान स्थिति | घटना | अगली स्थिति | क्रिया |
|---|---|---|---|
| बूट A | सत्यापित OK | बूट A | काउंटर बढ़ाएँ |
| बूट A | सत्यापन विफल | बूट B | स्लॉट B आज़माएँ |
| बूट B | सत्यापित OK | बूट B | काउंटर बढ़ाएँ |
| बूट B | सत्यापन विफल | रिकवरी | USB इमेज़ की प्रतीक्षा करें |
| रिकवरी | हस्ताक्षरित इमेज़ प्राप्त हुई | रिकवरी | नई इमेज़ फ़्लैश करें |
| रिकवरी | इमेज़ सत्यापन विफल | ब्रिक | HSM-हस्ताक्षरित रिकवरी की प्रतीक्षा करें |
| बूट A या B | OTA स्टेजिंग पूर्ण | स्टेजिंग रीबूट | अगले बूट पर स्लॉट स्विच करें |
| स्टेजिंग रीबूट | सत्यापित OK | बूट (नया स्लॉट) | स्लॉट को प्रमोट करें, रोलबैक विंडो कम करें |
"रोलबैक विंडो" उन बूट्स की संख्या है जिनके बाद नया फ़र्मवेयर स्थिर माना जाता है। हमारा डिफ़ॉल्ट 4 सफल बूट है; यदि OTA के बाद पहले 4 बूट्स में पेन क्रैश होता है, तो SBL स्वचालित रूप से पिछले स्लॉट पर रोल बैक कर देता है।
7. OTA स्टेजिंग और रिकवरी प्रवाह
Linux SKU पर OTA प्रवाह इस प्रकार दिखता है:
- OEM सर्वर RSA-2048 / ECDSA P-256 हस्ताक्षर के साथ फ़र्मवेयर इमेज बनाता है।
- इमेज को परिवहन के लिए AES-128-CTR से एन्क्रिप्ट किया जाता है।
- Pen इमेज को Wi-Fi (F8, L5, T2, Y6) या BLE (K7, KF1, Q6, Q8) के माध्यम से डाउनलोड करता है।
- TrustZone TEE हस्ताक्षर को SE में OEM रूट कुंजी के विरुद्ध डिक्रिप्ट और सत्यापित करता है।
- डिक्रिप्ट की गई इमेज को निष्क्रिय स्लॉट (जैसे system B) में लिखा जाता है।
- बूट फ़्लैग्स को "अगले रीस्टार्ट पर B से बूट करें" पर सेट किया जाता है।
- Pen स्लॉट B में रीबूट होता है और 4 बूट साइकल चलाता है।
- यदि 4 बूट सफल होते हैं, तो स्लॉट B को प्रमोट किया जाता है; रोलबैक काउंटर बढ़ाया जाता है।
- यदि कोई भी बूट विफल होता है, तो स्लॉट A को पुनर्स्थापित किया जाता है और OTA सर्वर को एक फ़्लैग भेजा जाता है।
RTOS-आधारित OTA समान लेकिन छोटा होता है: 1.4–3.0 MB इमेज, K7 / Q6 / Q8 पर BLE के माध्यम से OTA में 8–25 सेकंड बनाम L5 पर Wi-Fi के माध्यम से 40–90 सेकंड।
8. बूट-टाइम अनुकूलन तकनीकें
हम बूट समय को प्रतिस्पर्धी बनाए रखने के लिए पाँच तकनीकें लागू करते हैं:
| तकनीक | इसका उपयोग करने वाले SKUs | बचत |
|---|---|---|
| SBL और SE init को समानांतर करें | F8, L5, T2, Y6 | 60–110 ms |
| उत्पादन में UART/JTAG init को छोड़ें | सभी | 12–20 ms |
| संपीड़ित कर्नेल + प्रारंभिक डिकंप्रेशन का उपयोग करें | F8, L5, T2, Y6 | 80–150 ms |
| SBL के दौरान पहले OID ऑडियो को प्री-डिकोड करें | B1, B2, P2 | 18–30 ms |
| स्पेक्टर/मेल्टडाउन शमन (RTOS) अक्षम करें | B1, B2, P2, Q6, Q8 | 8–14 ms |
Linux-आधारित SKUs Spectre/Meltdown शमन को अक्षम नहीं करते क्योंकि वे OID लाइब्रेरी से अविश्वसनीय सामग्री को संभालते हैं। RTOS-आधारित SKUs इसे अक्षम करते हैं क्योंकि उनका संपूर्ण फ़र्मवेयर हस्ताक्षरित होता है।
9. सामान्य बूट विफलता मोड जो हमने देखे हैं
2023 के बाद से 47,000+ शिप किए गए यूनिट्स में, फ़ील्ड में कोल्ड-बूट विफलताओं का यह विवरण है:
| विफलता मोड | आवृत्ति | समाधान |
|---|---|---|
| काउंटर अंडरफ़्लो (डाउनग्रेड हमला) | 0.02 % | सर्विस सेंटर पर रिफ़्लैश |
| A/B स्विच लूप | 0.18 % | USB के माध्यम से स्लॉट A को बल दें |
| OTA स्टेजिंग राइट बाधित | 0.34 % | स्टेजिंग से स्वतः-रिकवरी |
| बूट के दौरान पावर हानि | 0.91 % | स्लॉट B से बूट |
| eMMC घिसाव | 0.06 % | वारंटी प्रतिस्थापन |
| SE टैम्पर फ़्लैग सेट | 0.04 % | सर्विस सेंटर पुनः init |
| बैटरी ब्राउन-आउट | 0.22 % | कोल्ड स्थिति से बूट |
0.91 % बूट-के-दौरान-पावर-हानि विफलता फ़ील्ड सेवा टिकटों का सबसे बड़ा एकल कारण है। हमने L5 फ़र्मवेयर 4.1.5 पर एक 1.2 ms कैपेसिटर बैंक जोड़ा है जो 12 ms ब्राउन-आउट के माध्यम से eMMC VCCQ रेल को होल्ड करता है; इससे अगले 8,000 यूनिट्स में विफलता दर 0.31 % तक गिर गई।
10. अगले 18 महीनों में क्या बदलेगा
दो बदलाव आने वाले हैं। पहला, L5 और T2 पर फर्मवेयर 4.3.0 Linux U-Boot चेन को U-Boot 2024.10 + GRUB 2.12 से बदलकर UEFI बूट लाएगा। इससे उन OEM खरीदारों के लिए बूट अधिक जाँचने योग्य हो जाएगा जो अपने स्वयं के डिस्ट्रो को चेन करना चाहते हैं। दूसरा, K7 / KF1 फर्मवेयर 2.0.0 में OPTIGA Trust M सिक्योर एलिमेंट में एंकर किया गया हार्डवेयर Root of Trust (RoT) आएगा, जो मौजूदा केवल-सॉफ्टवेयर TrustZone-M SAU दृष्टिकोण की जगह लेगा।
दोनों बदलाव पश्च-संगत हैं: मौजूदा बूट प्रवाह काम करता रहेगा, लेकिन एक नया मोड उन टेंडर के लिए UEFI या हार्डवेयर RoT का विकल्प खोलेगा जिन्हें इसकी आवश्यकता है।
11. हमारे फर्मवेयर वर्ज़न नंबर कैसे पढ़ें
हमारे फर्मवेयर वर्ज़न MAJOR.MINOR.PATCH पैटर्न का पालन करते हैं। उदाहरण के लिए, B2 फर्मवेयर 2.4.7 का अर्थ है मेजर वर्ज़न 2, माइनर 4, पैच 7। नियम ये हैं:
- MAJOR तब बढ़ता है जब कोई ब्रेकिंग बदलाव होता है (जैसे FreeRTOS से Zephyr पर स्विच करना, rootfs लेआउट बदलना)।
- MINOR तब बढ़ता है जब कोई नई सुविधा जुड़ती है (जैसे कोई नई भाषा जोड़ना, कोई नया OID कोडेक)।
- PATCH तब बढ़ता है जब कोई बग फिक्स या सिक्योरिटी बैकपोर्ट होता है।
रोलबैक नियम: आप MINOR और PATCH को स्वतंत्र रूप से रोल बैक कर सकते हैं। MAJOR को रोल बैक करने के लिए OEM की स्पष्ट सहमति आवश्यक है। यह आपको अनजाने में किसी एंड-ऑफ-लाइफ ब्रांच पर डाउनग्रेड होने से बचाता है।
फर्मवेयर वर्ज़नों की मौजूदा लाइन-अप है 1.9.5 (K7/KF1), 2.0.3 (P2), 2.4.7 (B1/B2), 2.6.4 (T2/Y6), 3.1.2 (F8), 3.3.1 (Q6/Q8), 4.2.0 (L5)। हम अपने OEM पोर्टल पर हर 6 सप्ताह में फर्मवेयर रिलीज़ नोट्स प्रकाशित करते हैं।