बुलेटप्रूफ फर्मवेयर अपग्रेड


16

डिवाइस फर्मवेयर पोस्ट बिक्री को सुरक्षित रूप से अपग्रेड करने के लिए उपयोगकर्ता को सक्षम करने के लिए किस तरह की तकनीकों का उपयोग किया जाता है ? मैं एक कोर्टेक्स एम 3/4 माइक्रोकंट्रोलर के साथ ऐसा करना चाहता हूं, लेकिन मुझे लगता है कि किसी भी माइक्रो के लिए तकनीकों को करना चाहिए।

अधिमानतः पाठ्यक्रम के अतिरिक्त घटकों की कम से कम राशि के साथ।

जवाबों:


16

एक चिप का उपयोग करें जिसमें फ्लैश मेमोरी की मात्रा दोगुनी है जो आपको अपने कोड के लिए आवश्यक होगी। इस तरह से आप इस मेमोरी में नया फर्मवेयर प्राप्त कर सकते हैं, जबकि कुछ भी गलत होने पर भी पुराने को छोड़ दें।

आपके द्वारा नए फर्मवेयर पर चेकसमों को डिक्रिप्ट और सत्यापित करने के बाद, बूटलोडर पुराने की जगह इसे अंतिम स्थान पर कॉपी कर सकता है। यदि इस भाग के दौरान कुछ भी गलत होता है, तो हार्ड-रीसेट के बाद बूटलोडर को यह देखना चाहिए कि नया फर्मवेयर वैध नहीं है (चेकसम को एक बार फिर से चलाकर) और प्रतिलिपि को पुन: प्रयास करें।

यह सबसे आसान और सबसे मूर्खतापूर्ण तरीका है जो मुझे पता है। इसे बूटलोडर में भी कम कोड की आवश्यकता होती है और मुख्य कार्यक्रम और बूटलोडर (बूटलोडर में किसी भी संचार तर्क की आवश्यकता नहीं है) के बीच किसी भी कार्यक्षमता की नकल करने की आवश्यकता नहीं होती है।


10
इलेक्ट्रॉनिक्स के उपयोगकर्ता के रूप में, मैं यह जोड़ सकता हूं कि बूट करने के दौरान कहीं एक बटन रखना अच्छा होगा जो कि पुराने फर्मवेयर को बूट करेगा, मामले में नया एक सही चेकसम है, लेकिन सॉफ्टवेयर में ही बग है।
ज़ान लिंक्स

4
"समस्या" मैं इस समाधान के साथ देखता हूं कि आपको किसी प्रकार के स्थानांतरण तालिका या पूर्ण स्थिति स्वतंत्र कोड की आवश्यकता है। अन्यथा आपका कोड नहीं चलेगा।
निको एर्फ़रथ

2
@ मस्ता - आप उस हिस्से को नहीं समझ रहे हैं जहां फर्मवेयर को उसके अंतिम (सामान्य) स्थान पर कॉपी किया जाता है।
केविन वर्मर

3
@jpc - हम इस तकनीक का उपयोग बाहरी धारावाहिक फ्लैश चिप के साथ काम में कुछ इन-हाउस टूल्स पर करते हैं। यदि आपके पास 8-पिन SOIC या QFN भाग के लिए जगह है, तो आपको दो बार से अधिक फ्लैश के साथ एक माइक्रोकंट्रोलर की आवश्यकता नहीं है। 1MB सीरियल फ्लैश की यादें एक डॉलर से भी कम हो सकती हैं इसलिए कुछ मामलों में माइक्रोकंट्रोलर को अपग्रेड करने की तुलना में इस मार्ग पर जाना सस्ता हो सकता है!
केविन वर्मर

@ज़न - हाँ, हम इसका भी उपयोग करते हैं। एक चिंता या लाभ यह है कि जब आप पुराने फर्मवेयर (हम अपने माइक्रो पर ईईपी नहीं रखते हैं, तो हम अपने माइक्रो-एड्रेस में मैक एड्रेस और आईपी एड्रेस की तरह कॉन्फ़िगरेशन डेटा स्टोर करते हैं) डिवाइस को डिफॉल्ट करने के लिए रीसेट हो जाता है। हमारे लिए, जब हम IP पता भूल जाते हैं, तो बोर्ड ढूंढना आसान हो जाता है।
केविन वर्मर

12

बूटलोडर और कुछ KB अतिरिक्त फ़्लैश का उपयोग करें।

बूटलोडर द्वारा UART, USB, I2C, या किसी अन्य प्रोटोकॉल पर कुछ विशेष कमांड भेजकर अपग्रेड किया जाता है। केवल मुख्य कोड को कभी भी अपडेट किया जाता है - बूटलोडर कोड को कभी भी बाहरी प्रोग्रामर (यानी JTAG / PICkit for PICs आदि) के अलावा नहीं छुआ जाता है।

यदि अद्यतन विफल हो जाता है (बिजली की विफलता, किसी ने तार या किसी अन्य कारण से फँसाया), तो विजेट काम नहीं करेगा, लेकिन बूटलोडर अभी भी रहेगा, इसलिए नवीनीकरण को फिर से करने का प्रयास किया जा सकता है।

एक झंडा कहीं बाइट में सेट किया जा सकता है जो मुख्य कोड को गलत तरीके से निष्पादित करने से रोकता है क्योंकि यह पूरी तरह से अपडेट नहीं किया गया है।


यदि बूट एक पावर-अप के कारण है, तो आप बूटलोडर को चलाने के लिए मजबूर कर सकते हैं। यह मदद करेगा यदि आप खराब फर्मवेयर में लोड करते हैं जो तुरंत क्रैश हो जाता है। बूटलोडर को एक्स सेकंड के बाद एप्लिकेशन को चलाने के लिए एक टाइमआउट की आवश्यकता होगी।
रॉबर्ट

यह एक अच्छा विचार है यदि आप एक साधारण प्रोटोकॉल (जैसे कि एक async सीरियल, TTL या 485) का उपयोग कर सकते हैं। अधिक सम्मिलित मामलों (एसडी कार्ड, जीपीआरएस, यूएसबी) के लिए मैं (गैर-अपग्रेड करने योग्य) बूटलोडर में जटिल समर्थन कोड को शामिल नहीं करूंगा। ईथरनेट OTOH (कच्चा UDP या TFTP) इसके लिए पर्याप्त सरल है।
जेपीसी १

3

यदि आपका डिवाइस तुलनात्मक रूप से महंगा है और आप लागत वहन कर सकते हैं (और आप ग्राहकों को अपग्रेड के बारे में परवाह है) तो आप ऐसा कर सकते हैं ...

(आम तौर पर इस तकनीक के लिए या तो बाहरी भंडारण की आवश्यकता होती है या jtag के कुटिल उपयोग की ..)

एक निश्चित प्रोग्राम माइक्रो (थोड़ा पीआईसी की तरह) है जो सिस्टम को रोक सकता है और इसे रीप्रोग्राम कर सकता है।

क्योंकि आप "अपग्रेड प्रोसेसर" फर्मवेयर नहीं बदल सकते, यह कभी गलत नहीं हो सकता।

1) उपयोगकर्ता डिवाइस को अपग्रेड कर सकता है

2) यदि कोई अपग्रेड फेल हो जाता है, तो वे हमेशा फिर से कोशिश कर सकते हैं। यह ईंट नहीं किया जा सकता है

3) तब भी जब आपका टारगेट डिवाइस बूट-लोडर का समर्थन नहीं करता है (यह सिर्फ बूट करना चाहता है और रन करना चाहता है) तब भी आप इसे वही कर सकते हैं जो आप करना चाहते हैं।

FPGA, DSP और अन्य विषम लक्ष्य के लिए काम करता है।

वास्तव में साफ-सुथरा यूजर इंटरफेस हो सकता है (यहां तक ​​कि एक PIC एक वेब सर्वर चला सकता है ....)


2

सुनिश्चित करें कि आपके उत्पाद में सरल सीरियल इंटरफ़ेस के कुछ प्रकार हैं , अधिमानतः EIA232। यदि आपके पास DB-9 के लिए स्थान नहीं है, तो एक गैर-मानक कनेक्टर ठीक है। उदाहरण के लिए एक टीआरएस कनेक्टर टीएक्सडी, आरएक्सडी और ग्राउंड के लिए आवश्यक है।

डिवाइस को पहली बार प्रोग्रामिंग करते समय, एक बूटलोडर शामिल करें । यह जितना संभव हो उतना सरल होना चाहिए , क्योंकि जितनी जल्दी या बाद में आप बूटलोडर को खुद ही अपग्रेड करना चाहते हैं अगर उसे नई सुविधाओं की आवश्यकता होगी। (आप शायद इसे अपग्रेड भी नहीं कर सकते )

फिर टीआरएस कनेक्टर। एक स्विच के साथ एक जैक का उपयोग करें ताकि आप पता लगा सकें कि कब कोई कनेक्टर मौजूद है। बस रीसेट के ठीक बाहर की जाँच करें, और बूटलोडर शुरू करें यदि प्लग मौजूद है, अन्यथा आवेदन शुरू करें। इस तरह बूटलोडर और यूजर एप्लिकेशन प्रोग्राम अच्छी तरह से अलग हो जाते हैं। (चेक वास्तव में बूटलोडर का हिस्सा है; हमें एप्लिकेशन के संस्करण की परवाह किए बिना इसकी आवश्यकता होगी, अन्यथा हम बूटलोडर में प्रवेश करने में सक्षम नहीं होंगे!)


आप कभी बूटलोडर को अपग्रेड क्यों करना चाहेंगे? आप यह कैसे सुनिश्चित करेंगे कि उन्नयन प्रक्रिया डिवाइस को ईंट नहीं करेगी? यदि यह हो सकता है, तो कौन सी नई सुविधाएँ इतनी सम्मोहक होंगी कि आप उन्नयन के लिए ब्रिकिंग को जोखिम में डालेंगे?
केविन वर्मर

5
@ केविन - मुझे लगता है कि उनका मतलब था कि बूटलोडर इतना सरल होना चाहिए कि आप इसे "अपग्रेड" करने के बारे में कभी सोचेंगे भी नहीं।
जेपीसी १

@jpc - आह, तुम सही हो, गलत व्याख्या की। हम समझौते में हैं!
केविन वर्मेयर

1

Equipment upgrader ’के पास कौन से उपकरण उपलब्ध होंगे? एक पीसी, एक यूएसबी स्टिक, एक माइक्रो एसडी कार्ड?

एक तरीका यह होगा कि आप एक रिमूवेबल आइटम (यूएसबी स्टिक, एसडी कार्ड इत्यादि) में आवेदन करें। चिप आइटम से अपने आवेदन को लोड करता है। आपका upgrader बस आइटम स्वैप करता है और रिबूट करता है।

एआरएम और कॉर्टेक्स माइक्रोकंट्रोलर चिप्स मुझे पता है (एनएक्सपी, एटमेल) सभी में एक अंतर्निहित सीरियल बूटलोडर है, इसलिए यदि आपका अपडेटर पीसी और एक सीरियल केबल के साथ आता है (और आपने एक COM पोर्ट इंटरफ़ेस के लिए व्यवस्था की है) तो वह बस आपका डाउनलोड कर सकता है अपडेट करें।


तो बस एक पोर्ट में UART पिन को वायर करके, एक COM पोर्ट और एक पीसी से कनेक्ट होने पर, आप फर्मवेयर को mcu पर बिना किसी कोड के फ्लैश कर सकते हैं? अच्छी टिप।
इमब्रोन्डिर

डेटाशीट, अनुभाग 'बूटलोडर' की जाँच करें। वास्तव में 'हैंड ऑफ' करने के लिए आपको 1. रीसेट करने की आवश्यकता होगी; 2. बूटलोडर को सक्रिय करें (चिप एक सेराटिन पिन की जांच करता है)। यह एक जम्पर और एक (रीसेट) स्विच द्वारा किया जा सकता है, लेकिन एक अधिक सुविधाजनक तरीका (विशेष रूप से आपके डेस्क पर) चाल 'हैंड्स-ऑफ' करने के लिए दो हैंडशेक लाइनों का उपयोग करना है। अधिकांश पीसी डाउनलोड प्रोग्राम (जैसे। फ़्लैश-डिज़ाइन, lpc21isp) आपके लिए हैंडशेकिंग जादू कर सकते हैं (यदि आप हैंडशेक लाइनों को सही ढंग से तार करते हैं)।
वाउचर वैन ऊइजेन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.