أداة توفير المتطلبات اللازمة على الإعدادات الأصلية في OpenWeave

عرض المصدر على GitHub

توفّر أداة OpenWeave Factory Provisioning Tool وسيلة ملائمة لتوفير معلومات الضبط الثابتة لكل جهاز على الأجهزة المزوّدة بتقنية Weave. يُقصد استخدام "أداة إعداد الأجهزة للمصنع" كجزء من عملية التصنيع التي تُختم الأجهزة الفردية بمعلومات فريدة للهوية والمستندات المُعتمَدة قبل شحنها إلى العملاء. ويمكن للمطوّرين أيضًا استخدامها ل تخصيص الأجهزة المخصّصة لمرحلة ما قبل الإنتاج والتي يتم استخدامها أثناء عملية التطوير.

نظرية التشغيل

يتمثل هدف أداة OpenWeave Factory Provisioning Tool في إدخال معلومات إعدادات محدّدة في مساحة تخزين الإعدادات الدائمة للجهاز، حيث يمكن لبرنامج الجهاز الثابت معالجتها واستخدامها أثناء التشغيل. يتم عادةً تخزين إعدادات الجهاز الثابتة في ذاكرة فلاش داخلية في الجهاز، على الرغم من أنّ تفاصيل كيفية تخزين البيانات بدقة وتنسيقها تختلف من نظام أساسي إلى آخر. إن أداة إدارة حسابات المصنع مستقلة عن تنسيق التخزين النهائي، وتعتمد على الكود في البرامج الثابتة للجهاز لكتابة البيانات بالطريقة الصحيحة. لا تعتمد واجهة مستخدم الأداة أيضًا إلى حد كبير على نوع الأجهزة التي يتم ضبطها، ما يعني أنّه يمكن استخدام عمليات تصنيع مشابهة على مستوى خطوط المنتجات التي تستند إلى منصات أجهزة مختلفة.

تم تصميم "أداة الإعداد من المصنع" للعمل على جهاز مضيف متصل بجهاز مستهدف من خلال شكل من أشكال واجهة تصحيح الأخطاء أو التحكّم، على سبيل المثال، منفذ JTAG أو SWD. تعمل الأداة من خلال إدخال معلومات الإعداد في ذاكرة الوصول العشوائي (RAM) للجهاز بتنسيق مشفَّر بشكل خاص. بعد ذلك، يتم توجيه الجهاز إلى إعادة التشغيل، وعند هذه النقطة، يحدِّد الرمز المضمّن في البرامج الثابتة للجهاز موقع البيانات المشفَّرة ويتحقّق من سلامتها ويكتب القيم المضمّنة في مساحة التخزين الدائمة بتنسيق مناسب للنظام الأساسي.

تجدر الإشارة إلى أنّ الرمز البرمجي على الجهاز الذي يرصد بيانات توفير المتطلبات اللازمة ويعالجها مدمج في طبقة جهاز OpenWeave، ويمكن تفعيله على أي نظام أساسي متوافق. بعد تفعيل الرمز، يتم تشغيله تلقائيًا في كل مرة يتم فيها تشغيل الجهاز، في مرحلة مبكرة من عملية إعداد الجهاز. يعمل الرمز من خلال مسح منطقة محدّدة من ذاكرة الوصول العشوائي (RAM) مرتبطة بالنظام الأساسي. على الأنظمة الأساسية التي تتضمّن كميات متواضعة من الذاكرة (مثل أقل من مليون)، يشمل الفحص كل الذاكرة العشوائية المتوفّرة.

عند وضع بيانات الإعداد في ذاكرة الوصول العشوائي (RAM)، يتم ترميزها باستخدام بادئة يسهل التعرّف عليها، ما يسمح بالعثور عليها بسرعة أثناء عملية المسح. يتم استخدام قيمة التحقق من السلامة استنادًا إلى تجزئة التشفير للتأكد من صحة البيانات قبل المعالجة.

تختار أداة الإعداد تلقائيًا موقع ذاكرة الوصول العشوائي الذي يتم فيه إدخال بيانات الإعداد استنادًا إلى النظام الأساسي للجهاز المستهدَف. يمكن إلغاء هذا الخيار من خلال تقديم وسيطة للأداة. بشكل عام، ليس من الضروري أن تحجز البرامج الثابتة على الجهاز موقعًا لذاكرة الوصول العشوائي (RAM) مخصَّصة لتلقّي بيانات توفير المتطلبات اللازمة. في العادة، يتم كتابة بيانات الإعداد في موقع ذاكرة وصول عشوائي مخصّص لأغراض أخرى، ولكن لا يتم استخدامه بشكل عام في وقت مبكر من عملية تشغيل الجهاز. وتشمل الخيارات الشائعة أعلى حزمة النظام الأولية أو الطرف البعيد من ساحة الذاكرة.

تعتمد "أداة الإعداد من المصنع" على مجموعة من أدوات التطوير الخارجية للتواصل مع الجهاز المستهدَف. تعتمد الأدوات المحدّدة المستخدَمة على نوع الجهاز المستهدَف. تتوفّر حاليًا واجهتَان للأجهزة:

  • جهاز تصحيح أخطاء SEGGER J-Link متصل بمنفذ JTAG أو SWD الخاص بالجهاز
  • منفذ تسلسلي USB متصل بجهاز Espressif ESP32

تعتمد واجهة J-Link على أداة SEGGER J-Link Commander (JLinkExe)، التي يجب تثبيتها بشكل منفصل على الجهاز المضيف.

تعتمد واجهة ESP32 على الأمر Espressif esptool.py، الذي يتم توفيره كجزء من حزمة تطوير البرامج (SDK) ESP-IDF من Espressif.

أنواع المعلومات التي يمكن توفيرها

باستطاعة أداة إدارة حسابات المصنع على OpenWeave توفير الأنواع التالية من المعلومات:

  • الرقم التسلسلي للجهاز
  • رقم تعريف جهاز Weave الذي حدّده المصنّع
  • شهادة Weave والمفتاح الخاص المحدَّدان من الشركة المصنّعة
  • رمز الإقران في Weave
  • رقم مراجعة المنتج
  • تاريخ التصنيع

على الرغم من أنّ الجهاز بشكل عام سيحتاج إلى جميع المعلومات المذكورة أعلاه ليعمل بشكل سليم، إلا أنّه ليس من الضروري توفير جميع المعلومات في الوقت نفسه. وبالتالي، يمكن أن يحدث توفير أنواع مختلفة من المعلومات في نقاط مختلفة من عملية التصنيع. بالإضافة إلى ذلك، من الممكن استبدال القيم التي تم توفيرها سابقًا بقيم جديدة في خطوة توفير لاحقة.

مصادر معلومات توفير المتطلبات اللازمة

يمكن تقديم معلومات إدارة حسابات الأجهزة إلى "أداة إدارة الحسابات الأصلية" بالطرق التالية:

  • وسيطات سطر الأوامر
  • استخدام ملف CSV لإعداد الأجهزة
  • من خلال استرجاع القيم من خادم إدارة حسابات Nest

سطر الأوامر

في أبسط شكل، يتم تحديد معلومات إعداد الجهاز مباشرةً في سطر الأوامر الخاص بأداة إعداد المصنع في OpenWeave. على سبيل المثال:

./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 وما إلى ذلك. توفّر الصفوف في الملف قيمًا فردية لأجهزة معيّنة، ويتم فهرستها حسب رقم تعريف جهاز Weave (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 اليوم/الشهر/السنة تاريخ تصنيع الجهاز

قد تظهر الأعمدة في ملف CSV بأي ترتيب. جميع الأعمدة اختيارية باستثناء Device_Id. أي قيم غير متوفّرة في ملف CSV لا يتم إعدادها على الجهاز.

يمكن للمستخدم تحديد قيم إعداد فردية في سطر الأوامر بالإضافة إلى ملف CSV، وفي هذه الحالة تكون قيمة سطر الأوامر هي التي تُمنَح أولاً مقارنةً بالقيم الواردة في الملف.

يتوافق تنسيق ملف CSV الذي توفّره "أداة إدارة حسابات المصنع" مع ناتج الأمر gen-provisioning-data في أداة weave.

خادم توفير المتطلبات اللازمة لجهاز Nest

تتيح "أداة الإعداد من المصنع" جلب معلومات إعداد محدّدة من خادم إعداد Nest باستخدام بروتوكول يستند إلى HTTPS. يمكن استخدام بروتوكول خادم توفير المتطلبات اللازمة لجلب شهادة جهاز Weave التي خصّصتها الشركة المصنّعة والمفتاح الخاص المقابل ورمز إقران Weave من خادم توفير المتطلبات اللازمة.

يتم تحديد الموقع على الشبكة لخادم الإعداد من خلال تقديم عنوان URL أساسي في سطر أوامر أداة الإعداد. يتم اختيار معلومات الإعداد المرغوب فيها من خلال تحديد معرّف جهاز Weave في سطر الأوامر. على سبيل المثال:

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

قد يحدد المستخدم قيمًا فردية لإدارة الحسابات في سطر الأوامر بالإضافة إلى عنوان URL لخادم توفير المتطلبات اللازمة. في هذه الحالة، تكون للقيم المقدَّمة في سطر الأوامر الأولوية على القيم التي يعرضها الخادم.

تفعيل / إيقاف ميزة إدارة الحسابات

يتحكّم خيار ضبط وقت التجميع في WEAVE_DEVICE_CONFIG_ENABLE_FACTORY_PROVISIONING في توفير إمكانية توفير المتطلبات اللازمة على الإعدادات الأصلية لمنصة OpenWeave في البرامج الثابتة على الجهاز. يكون هذا الخيار مفعّلاً تلقائيًا. يمكن إيقاف الميزة من خلال إلغاء الخيار في ملف WeaveProjectConfig.h الخاص بالتطبيق. على سبيل المثال:

#define WEAVE_DEVICE_CONFIG_ENABLE_FACTORY_PROVISIONING 0

بشكل عام، من الآمن تفعيل التوفير على إعدادات المصنع في البرامج الثابتة لجهاز الإنتاج شرط أن يتم إيقاف واجهة تصحيح أخطاء الجهاز بشكل مناسب على أجهزة الإنتاج. ويمكن تحقيق ذلك إما باستخدام وسائل الأجهزة (على سبيل المثال، عن طريق تكديس المصهرات في المنظومة على الرقاقة)، أو في البرامج (على سبيل المثال، عبر برنامج إقلاع آمن يحظر الوصول لتصحيح الأخطاء كجزء من عملية التمهيد).

تشغيل أداة إدارة حسابات المصنع

تتيح أداة OpenWeave Factory Provisioning Tool خيارات سطر الأوامر التالية:

Option الوصف
--target <string> نوع الجهاز المستهدَف الخيارات هي: nrf52840 وesp32.
--load-addr <hex-digits> العنوان في ذاكرة الجهاز الذي سيتم فيه كتابة بيانات الإعداد
‎--verbose, -v ضبط مستوى الإسهاب الناتج استخدِم عدّة وسيطات لزيادة مستوى التفصيل.
--serial-num <string> اضبط الرقم التسلسلي للجهاز.
--device-id <hex-digits> اضبط معرّف الجهاز الذي حدّدته الشركة المصنّعة.
--device-cert <base-64> | <file-name> اضبط شهادة جهاز Weave التي حدّدتها الشركة المصنّعة.
--device-key <base-64> | <file-name> اضبط المفتاح الخاص لجهاز Weave الذي حدّدته الشركة المصنّعة.
--pairing-code <string> اضبط رمز إقران الجهاز.
--product-rev <integer> اضبط إصدار المنتج للجهاز.
--mfg-date <YYYY/MM/DD> | today | now اضبط تاريخ تصنيع الجهاز.
--jlink-cmd <path-name> مسار أمر JLink القيمة التلقائية هي "JLinkExe".
--jlink-if SWD | JTAG نوع واجهة J-Link يتم ضبط الإعدادات التلقائية على SWD.
--jlink-speed <integer> | تكيُّفي | auto سرعة واجهة J-Link
--jlink-sn <string> الرقم التسلسلي لفحص J-Link
--esptool-cmd <path-name> مسار أمر esptool يتم ضبط الإعدادات التلقائية على "esptool.py".
--port <اسم-المسار> اسم جهاز منفذ COM لجهاز ESP32. القيمة التلقائية هي ‎ /tty/USB0.
--speed <integer> معدل نقل البيانات لمنفذ COM. القيمة التلقائية هي 115200.
--prov-csv-file <file-name> قراءة بيانات إدارة الأجهزة من ملف CSV لإدارة الحسابات.
--prov-server <url> قراءة بيانات إدارة الحسابات للأجهزة من خادم إدارة الحسابات
--disable-server-validation عند استخدام بروتوكول HTTPS، أوقِف عملية التحقّق من الشهادة التي يقدّمها خادم التوفير.

أمثلة

تضبط التعليمة البرمجية التالية رقم تعريف الجهاز والرقم التسلسلي ومراجعة المنتج ورمز الإقران على قيم معيّنة. تم ضبط تاريخ التصنيع على التاريخ الحالي. ويتم ضبط شهادة الجهاز والمفتاح الخاص لاختبار القيم الواردة في ملف CSV مزوّد بملف ملف رمز المصدر openweave-core.

./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