OpenWeave फ़ैक्ट्री प्रावधान टूल

GitHub पर स्रोत देखें

OpenWeave फ़ैक्ट्री प्रावधान टूल, Weave-चालू डिवाइस पर स्थायी, हर डिवाइस कॉन्फ़िगरेशन जानकारी का प्रावधान करने का सुविधाजनक तरीका देता है. फ़ैक्ट्री प्रावधान टूल का मकसद निर्माण लाइन प्रोसेस के हिस्से के रूप में होना है जो ग्राहकों को शिपिंग से पहले अलग पहचान और क्रेडेंशियल जानकारी वाले अलग-अलग डिवाइस पर स्टैंप देगा. डेवलपर, डेवलपमेंट प्रोसेस के दौरान इस्तेमाल किए जाने वाले प्री-प्रोडक्शन हार्डवेयर को मनमुताबिक बनाने के लिए भी इसका इस्तेमाल कर सकते हैं.

ऑपरेशन का सिद्धांत

OpenWeave फ़ैक्ट्री प्रावधान टूल का लक्ष्य किसी डिवाइस के लगातार कॉन्फ़िगरेशन स्टोर में चुनिंदा कॉन्फ़िगरेशन जानकारी इंजेक्ट करना है, जहां डिवाइस फ़र्मवेयर के ज़रिए इसे पिक अप करके रनटाइम के दौरान इस्तेमाल किया जा सकता है. डिवाइस का स्थायी कॉन्फ़िगरेशन आम तौर पर डिवाइस के अंदर वाले फ़्लैश में सेव किया जाता है. हालांकि, डेटा को सेव करने के तरीके के बारे में जानकारी, हर फ़ॉर्मैट के हिसाब से अलग-अलग होती है. फ़ैक्ट्री प्रावधान टूल खुद ही आखिरी स्टोरेज फ़ॉर्मैट से अलग होता है और वह डेटा को सही तरीके से लिखने के लिए डिवाइस's फ़र्मवेयर में कोड पर निर्भर करता है. यह टूल और #39 वाला यूज़र इंटरफ़ेस भी कॉन्फ़िगर किए जाने वाले हार्डवेयर टाइप से काफ़ी हद तक अलग है. इसका मतलब है कि इसी तरह की मैन्युफ़ैक्चरिंग प्रोसेस को अलग-अलग हार्डवेयर प्लैटफ़ॉर्म पर काम करने वाली सभी प्रॉडक्ट लाइन में इस्तेमाल किया जा सकता है.

फ़ैक्ट्री प्रावधान टूल को किसी ऐसी होस्ट मशीन पर काम करने के लिए डिज़ाइन किया गया है जो किसी तरह के डीबग या कंट्रोल इंटरफ़ेस के ज़रिए टारगेट डिवाइस से जुड़ी हुई है. उदाहरण के लिए, JTAG या SWD पोर्ट. यह टूल, डिवाइस की रैम में प्रावधान की जानकारी को खास तौर पर एन्कोड किए गए फ़ॉर्म में इंजेक्ट करके काम करता है. इसके बाद, डिवाइस को रीस्टार्ट करने का निर्देश दिया जाता है. ऐसा करने पर, डिवाइस में पहले से मौजूद फ़र्मवेयर कोड एन्कोड किए गए डेटा का पता लगाता है, उसके इंटेग्रिटी की पुष्टि करता है, और उस प्लैटफ़ॉर्म के लिए सही फ़ॉर्मैट में स्थायी वैल्यू बनाता है.

डिवाइस में मौजूद कोड, इंजेक्ट किए गए प्रावधान डेटा की पहचान करता है और उसे प्रोसेस करता है. यह OpenWeave डिवाइस लेयर में पहले से मौजूद होता है और इसे किसी भी काम करने वाले प्लैटफ़ॉर्म पर चालू किया जा सकता है. एक बार चालू होने के बाद, हर बार डिवाइस चालू होने पर कोड अपने-आप चल जाता है. यह कोड, रैम के प्लैटफ़ॉर्म के हिसाब से इलाके को स्कैन करता है. जिन मेमोरी में कम मेमोरी (उदाहरण के लिए, <1M) है उनमें स्कैन की पूरी रैम शामिल है.

रैम में रखे जाने पर, प्रावधान का डेटा आसानी से पहचाने जा सकने वाले प्रीफ़िक्स से कोड में बदल जाता है. इससे वह स्कैन की प्रक्रिया में आसानी से मिल जाता है. प्रोसेस करने से पहले, डेटा की वैधता की पुष्टि करने के लिए, क्रिप्टोग्राफ़िक हैश पर आधारित इंटेग्रिटी चेक वैल्यू का इस्तेमाल किया जाता है.

डिफ़ॉल्ट रूप से, प्रावधान टूल उस रैम की जगह चुनता है जिस पर टारगेट डिवाइस प्लैटफ़ॉर्म के आधार पर प्रावधान डेटा इंजेक्ट करना है. इस विकल्प को टूल के लिए आर्ग्युमेंट के ज़रिए ओवरराइड किया जा सकता है. आम तौर पर, यह ज़रूरी नहीं होता कि डिवाइस फ़र्मवेयर खास तौर पर प्रावधान से जुड़ा डेटा पाने के लिए रैम की जगह रिज़र्व करे. आम तौर पर, प्रावधान का डेटा ऐसी रैम वाली जगह पर लिखा जाता है जिसे दूसरे मकसद के लिए बांटा जाता है. हालांकि, आम तौर पर इसका इस्तेमाल डिवाइस के बूट प्रोसेस में शुरुआती समय में नहीं किया जाता. आम तौर पर, इस्तेमाल के विकल्प सिस्टम के शुरुआती स्टैक के सबसे ऊपर या हीप अरीना के सबसे आखिरी हिस्से होते हैं.

फ़ैक्ट्री प्रावधान टूल, टारगेट डिवाइस से इंटरफ़ेस करने के लिए बाहरी डेवलपमेंट टूल के एक सेट पर निर्भर है. इस्तेमाल किए जाने वाले खास टूल, टारगेट डिवाइस के प्रकार पर निर्भर करते हैं. फ़िलहाल, दो डिवाइस इंटरफ़ेस काम करते हैं:

  • SEGGER J-Link डीबग प्रोब की जानकारी, जो डिवाइस के JTAG या SWD पोर्ट से जुड़ी है
  • किसी Espressif ESP32 से जुड़ा यूएसबी सीरियल पोर्ट

J-Link इंटरफ़ेस, SEGGER J-Link Commander टूल (JLinkExe) पर निर्भर करता है, जिसे होस्ट मशीन पर अलग से इंस्टॉल किया जाना चाहिए.

ESP32 इंटरफ़ेस, Espressif esptool.py कमांड पर निर्भर करता है. यह Espressif's ESP-IDF SDK टूल के हिस्से के तौर पर दिया जाता है.

इस तरह की जानकारी का प्रावधान किया जा सकता है

OpenWeave फ़ैक्ट्री प्रावधान टूल इन प्रकार की जानकारी का प्रावधान करने में सक्षम है:

  • डिवाइस का सीरियल नंबर
  • निर्माता की ओर से असाइन किया गया Weave डिवाइस आईडी
  • निर्माता की ओर से असाइन किया गया Weave प्रमाणपत्र और निजी कुंजी
  • Weave से जोड़ने वाला कोड
  • प्रॉडक्ट में बदलाव करने के लिए नंबर
  • बनाए जाने की तारीख

आम तौर पर, डिवाइस को ठीक से काम करने के लिए ऊपर दी गई सारी जानकारी की ज़रूरत होती है. हालांकि, एक ही समय पर पूरी जानकारी का प्रावधान करना ज़रूरी नहीं होता. इसलिए, निर्माण की प्रक्रिया में अलग-अलग तरह की जानकारी के प्रावधान अलग-अलग समय पर हो सकते हैं. इसके अलावा, बाद के प्रावधान चरण में पहले से प्रावधान की गई वैल्यू को नई वैल्यू से बदला जा सकता है.

प्रावधान से जुड़ी जानकारी के स्रोत

फ़ैक्ट्री प्रावधान टूल को इन तरीकों से सप्लाई किया जा सकता है:

  • कमांड लाइन आर्ग्युमेंट
  • प्रावधान वाली CSV फ़ाइल का इस्तेमाल करना
  • Nest के प्रावधान सर्वर से वैल्यू फ़ेच करके

कमांड लाइन

सबसे आसान फ़ॉर्म में, डिवाइस प्रावधान की जानकारी सीधे OpenWeave Factory प्रावधान टूल के कमांड लाइन पर बताई गई है. उदाहरण के लिए:

./weave-factory-prov-tool --target nrf52840 --device-id 18B4300000000001 \
    --pairing-code NESTUS --mfg-date 2019/04/01

Weave प्रमाणपत्र और निजी कुंजी जैसे बाइनरी डेटा मान, base-64 स्ट्रिंग या उन फ़ाइलों के नाम के रूप में बताए जा सकते हैं जिनमें अधूरे डेटा (रॉ) (बाइनरी) रूप में डेटा होता है.

उपलब्ध कमांड लाइन आर्ग्युमेंट की पूरी सूची नीचे देखें.

CSV फ़ाइल का प्रावधान किया जा रहा है

डिवाइस के बल्क प्रावधान के लिए, फ़ैक्ट्री प्रावधान टूल CSV-फ़ॉर्मैट की प्रावधान डेटा फ़ाइल से प्रावधान का डेटा भी पढ़ सकता है. इस फ़ाइल के कॉलम में, डेटा के अलग-अलग टाइप के हिसाब से डेटा होना चाहिए - यानी, Serial_Num, Certificate, Private_Key वगैरह. फ़ाइल की लाइनों में, खास डिवाइस के आईडी (Device_Id) से इंडेक्स किए गए खास डिवाइसों के लिए अलग-अलग वैल्यू मिलती हैं. प्रावधान किए जाने वाले खास डिवाइस का आईडी, कमांड लाइन पर बताया जाना चाहिए. उदाहरण के लिए:

./weave-factory-prov-tool --target nrf52840 --device-id 18B4300000000001 \
    --prov-csv-file ./dev-provisioning-data.csv

ये CSV कॉलम काम करते हैं:

नाम फ़ॉर्मैट ब्यौरा
Device_Id 16 हेक्स पॉइंट Weave डिवाइस आईडी. मौजूद होना चाहिए.
Serial_Num स्ट्रिंग डिवाइस का सीरियल नंबर.
Certificate base-64 स्ट्रिंग निर्माता की ओर से भेजा गया Weave डिवाइस प्रमाणपत्र.
Private_Key base-64 स्ट्रिंग निर्माता की असाइन की गई Weave निजी कुंजी.
Pairing_Code स्ट्रिंग बुनाई के कोड को बुनाएं.
Product_Rev पूर्णांक प्रॉडक्ट में बदलाव करने का नंबर.
Mfg_Date DD/MM/YYYY डिवाइस बनाने की तारीख.

कॉलम, CSV फ़ाइल में किसी भी क्रम में दिख सकते हैं. Device_Id को छोड़कर सभी कॉलम वैकल्पिक होते हैं. CSV फ़ाइल में मौजूद सभी वैल्यू का डिवाइस पर प्रावधान नहीं किया जाता.

उपयोगकर्ता CSV फ़ाइल के साथ ही कमांड लाइन पर अलग-अलग प्रावधान मान तय कर सकता है. ऐसा होने पर, कमांड लाइन मान फ़ाइल में मौजूद मानों से आगे बढ़ जाएगा.

फ़ैक्ट्री प्रावधान टूल की मदद से, CSV फ़ाइल फ़ॉर्मैट की सुविधा weave टूल's gen-provisioning-data निर्देश के आउटपुट के साथ काम करती है.

Nest के लिए सर्वर

फ़ैक्ट्री प्रावधान टूल, एचटीटीपीएस पर आधारित प्रोटोकॉल का इस्तेमाल करके, Nest के प्रावधान सर्वर से चुनिंदा प्रावधान की जानकारी को फ़ेच करने की सुविधा देता है. प्रावधान करने वाले सर्वर के प्रोटोकॉल का इस्तेमाल, निर्माता की ओर से दिए गए Weave डिवाइस के प्रमाणपत्र, इससे जुड़ी निजी कुंजी, और प्रावधान सर्वर से Weave जोड़ने के कोड को पाने के लिए किया जा सकता है.

प्रावधान सर्वर के नेटवर्क की जगह, प्रावधान टूल कमांड लाइन पर बेस यूआरएल डालकर तय की जाती है. पसंदीदा प्रावधान की जानकारी को कमांड लाइन पर Weave डिवाइस आईडी तय करके चुना गया है. उदाहरण के लिए:

./weave-factory-prov-tool --target nrf52840 --device-id 18B4300000000001 \
    --prov-server https://192.168.172.2:8000/

उपयोगकर्ता, प्रावधान सर्वर यूआरएल के अलावा, कमांड लाइन पर अलग-अलग प्रावधान की वैल्यू तय कर सकता है. इस स्थिति में, कमांड लाइन पर दिए गए मान सर्वर से लौटाए गए मानों से पहले दिखाई देते हैं.

फ़ैक्ट्री प्रावधान के लिए सहायता चालू / बंद करना

डिवाइस फ़र्मवेयर में OpenWeave फ़ैक्ट्री प्रावधान के लिए समर्थन WEAVE_DEVICE_CONFIG_ENABLE_FACTORY_PROVISIONINGकंट्रोल-टाइम कॉन्फ़िगरेशन विकल्प से नियंत्रित होता है. यह विकल्प डिफ़ॉल्ट रूप से चालू होता है. ऐप्लिकेशन में बदलाव करने के लिए, विकल्प को बंद किया जा सकता है. इसके लिए, ऐप्लिकेशन में सेव किए गए विकल्प को बदलेंWeaveProjectConfig.h. उदाहरण के लिए:

#define WEAVE_DEVICE_CONFIG_ENABLE_FACTORY_PROVISIONING 0

आम तौर पर, प्रोडक्शन डिवाइस फ़र्मवेयर में फ़ैक्ट्री प्रावधान की सुविधा चालू की जा सकती है, बशर्ते डिवाइस के डीबग करने के इंटरफ़ेस को प्रोडक्शन डिवाइसों पर सही तरीके से बंद किया गया हो. आप ऐसा हार्डवेयर के ज़रिए (उदाहरण के लिए, SoC में फ़्यूज़ उड़ाकर) या सॉफ़्टवेयर में (उदाहरण के लिए, किसी ऐसे सुरक्षित बूट लोडर के ज़रिए किया जा सकता है जो डीबग करने के ऐक्सेस को बूट प्रोसेस के हिस्से के रूप में ब्लॉक कर देता है).

फ़ैक्ट्री प्रावधान टूल चलाना

OpenWeave Factory प्रावधान टूल इन कमांड लाइन विकल्पों के साथ काम करता है:

विकल्प ब्यौरा
--<string> टारगेट डिवाइस किस तरह का है. ये विकल्प हैं: nrf52840, esp32
--load-addr <hes-digits> डिवाइस की मेमोरी में वह पता जिस पर प्रावधान करने का डेटा लिखा जाएगा.
--वर्बोस, -वी आउटपुट के वर्बोसिटी लेवल में बदलाव करें. शब्दों की संख्या बढ़ाने के लिए, एक से ज़्यादा आर्ग्युमेंट का इस्तेमाल करें.
--serial-num <string> डिवाइस सीरियल नंबर सेट करें.
--device-id <hes-digits> निर्माता की ओर से असाइन किया गया डिवाइस आईडी सेट करें.
--device-cert<base-64> | <file-name> निर्माता से मिला Weave डिवाइस सर्टिफ़िकेट सेट करें.
--device-key <base-64> | <file-name> निर्माता की असाइन की गई Weave डिवाइस की निजी कुंजी सेट करें.
--पेयरिंग कोड <string> डिवाइस को जोड़ने का कोड सेट करें.
--product-rev<integer> डिवाइस के लिए प्रॉडक्ट का बदलाव सेट करें.
--mfg-तारीख <YYYY/MM/DD> | आज | अभी डिवाइस बनाने की तारीख सेट करें.
--jlink-cmd <path-name> JLink निर्देश का पाथ. डिफ़ॉल्ट 'JLinkExe'.
--jlink-if SWD | JTAG J-Link इंटरफ़ेस का टाइप. एसडब्ल्यूडी डिफ़ॉल्ट पर सेट होता है.
--jlink-speed-<integer> | अडैप्टिव | ऑटो J-Link इंटरफ़ेस की स्पीड.
--jlink-sn <string> जे-लिंक प्रोब का सीरियल नंबर.
--esptool-cmd <path-name> esptool कमांड का पाथ. डिफ़ॉल्ट 'esptool.py'.
--पोर्ट <path-name> ESP32 के लिए COM पोर्ट डिवाइस का नाम. डिफ़ॉल्ट रूप से /tty/USB0.
--स्पीड<integer> COM पोर्ट के लिए बाड रेट. डिफ़ॉल्ट वैल्यू 115200 होती है.
--prov-csv-file <file-name> किसी प्रावधान CSV फ़ाइल से डिवाइस प्रावधान डेटा पढ़ें.
--prov-server <url> किसी प्रावधान सर्वर से डिवाइस प्रावधान डेटा पढ़ें.
--बंद करने वाले सर्वर की पुष्टि करना HTTPS का इस्तेमाल करते समय, प्रावधान सर्वर से मिले प्रमाणपत्र की पुष्टि करने की सुविधा बंद करें.

उदाहरण

यह निर्देश, डिवाइस आईडी, सीरियल नंबर, प्रॉडक्ट में बदलाव, और जोड़ने के कोड को कुछ खास वैल्यू पर सेट करता है. निर्माण की तारीख वर्तमान तारीख पर सेट होती है. साथ ही, डिवाइस सर्टिफ़िकेट और निजी कुंजी को openweave-core सोर्स रिपॉज़िटरी (डेटा स्टोर करने की जगह) के साथ दी गई CSV फ़ाइल में दी गई वैल्यू की जांच करने के लिए सेट किया जाता है.

./weave-factory-prov-tool --target nrf52840 --device-id 18B4300000000042 \
    --serial-num JAYS_DEVICE_42 --product-rev 1 --pairing-code NESTUS --mfg-date today \
    --prov-csv-file ~/projects/openweave-core/certs/development/device/test-dev-provisioning-data.csv