ابزار تهیه OpenWeave Factory

مشاهده منبع در GitHub

OpenWeave Factory Provisioning Tool وسیله ای مناسب برای تهیه اطلاعات پیکربندی مداوم و هر دستگاه در دستگاه های دارای قابلیت Weave فراهم می کند. ابزار تهیه کارخانه به عنوان بخشی از فرآیند خط تولید استفاده می‌شود که دستگاه‌های فردی را با اطلاعات هویتی و اعتباری منحصربه‌فرد قبل از ارسال به مشتریان مهر می‌کند. همچنین می‌تواند توسط توسعه‌دهندگان برای شخصی‌سازی سخت‌افزار پیش‌تولید مورد استفاده در فرآیند توسعه استفاده شود.

تئوری عملیات

هدف OpenWeave Factory Provisioning Tool این است که اطلاعات پیکربندی انتخابی را به فروشگاه پیکربندی دائمی دستگاه تزریق کند، جایی که می‌تواند در زمان اجرا توسط سفت‌افزار دستگاه برداشت و استفاده شود. پیکربندی دائمی دستگاه معمولاً در فلاش داخلی دستگاه ذخیره می‌شود، اگرچه جزئیات دقیقاً نحوه ذخیره داده‌ها و در چه قالبی از پلتفرم به پلتفرم دیگر متفاوت است. ابزار Factory Provisioning خود مستقل از فرمت ذخیره سازی نهایی است و برای نوشتن داده ها به روش صحیح به کد موجود در سیستم عامل دستگاه متکی است. رابط کاربری ابزار نیز تا حد زیادی مستقل از نوع سخت افزاری است که پیکربندی می شود، به این معنی که فرآیندهای تولید مشابه را می توان در خطوط تولیدی که بر اساس پلتفرم های سخت افزاری مختلف است، به کار برد.

Factory Provisioning Tool طراحی شده است که بر روی یک ماشین میزبان اجرا می شود که از طریق نوعی رابط اشکال زدایی یا کنترل به دستگاه مورد نظر متصل است - به عنوان مثال، یک پورت JTAG یا SWD. این ابزار با تزریق اطلاعات ارائه شده به رم دستگاه به صورت کدگذاری شده ویژه کار می کند. سپس دستور راه‌اندازی مجدد به دستگاه داده می‌شود، در این مرحله کد تعبیه‌شده در میان‌افزار دستگاه، داده‌های کدگذاری‌شده را مکان‌یابی می‌کند، یکپارچگی آن را تأیید می‌کند و مقادیر موجود را در فضای ذخیره‌سازی دائمی در قالبی مناسب برای پلتفرم می‌نویسد.

کد روی دستگاه که داده های تامین تزریقی را شناسایی و پردازش می کند در لایه دستگاه OpenWeave تعبیه شده است و می تواند در هر پلتفرم پشتیبانی شده فعال شود. پس از فعال شدن، هر بار که دستگاه بوت می شود، کد به طور خودکار اجرا می شود، در نقطه ای از ابتدای فرآیند اولیه سازی دستگاه. کد با اسکن یک منطقه رم مخصوص پلتفرم عمل می کند. در پلتفرم‌هایی با حافظه کم (به عنوان مثال، <1M)، اسکن تمام RAM موجود را در بر می‌گیرد.

هنگامی که در RAM قرار می گیرد، داده های تامین کننده با یک پیشوند به راحتی قابل شناسایی کدگذاری می شوند، که به آنها اجازه می دهد تا در طول فرآیند اسکن به سرعت پیدا شوند. یک مقدار بررسی یکپارچگی بر اساس هش رمزنگاری برای تأیید اعتبار داده‌ها قبل از پردازش استفاده می‌شود.

به‌طور پیش‌فرض، ابزار تأمین، مکان RAM را انتخاب می‌کند که در آن داده‌های تأمین را بر اساس پلتفرم دستگاه هدف تزریق کند. این انتخاب را می توان از طریق یک آرگومان در ابزار لغو کرد. به طور کلی، لازم نیست که سیستم عامل دستگاه یک مکان RAM به طور خاص برای دریافت داده های تامین ذخیره کند. به‌طور معمول، داده‌های تأمین در یک مکان RAM که برای مقاصد دیگر اختصاص داده شده است، نوشته می‌شود، اما معمولاً در مراحل اولیه راه‌اندازی دستگاه استفاده نمی‌شود. انتخاب های رایج بالای پشته سیستم اولیه، یا انتهای یک عرصه پشته است.

Factory Provisioning Tool به مجموعه ای از ابزارهای توسعه خارجی برای اتصال به دستگاه مورد نظر متکی است. ابزارهای خاص به کار گرفته شده به نوع دستگاه مورد نظر بستگی دارد. دو رابط دستگاه در حال حاضر پشتیبانی می شود:

  • یک کاوشگر اشکال زدایی SEGGER J-Link که به پورت JTAG یا SWD دستگاه متصل است
  • یک پورت سریال USB متصل به Espressif ESP32

رابط J-Link به ابزار SEGGER J-Link Commander (JLinkExe) متکی است که باید به طور جداگانه روی دستگاه میزبان نصب شود.

رابط ESP32 متکی به دستور Espressif esptool.py است که به عنوان بخشی از ESP-IDF SDK Espressif ارائه شده است.

انواع اطلاعات قابل ارائه

OpenWeave Factory Provisioning Tool قادر است انواع اطلاعات زیر را ارائه دهد:

  • شماره سریال دستگاه
  • شناسه دستگاه Weave توسط سازنده اختصاص داده شده است
  • گواهی بافت و کلید خصوصی که توسط سازنده تخصیص داده شده است
  • کد جفت شدن را ببافید
  • شماره ویرایش محصول
  • تاریخ تولید

اگرچه معمولاً یک دستگاه برای عملکرد صحیح به همه اطلاعات فوق نیاز دارد، اما لازم نیست همه اطلاعات را به طور همزمان ارائه کند. بنابراین، ارائه انواع مختلف اطلاعات می تواند در نقاط مشخصی از فرآیند تولید اتفاق بیفتد. علاوه بر این، ممکن است در مرحله تدارک بعدی، مقادیر ارائه شده قبلی با مقادیر جدید جایگزین شوند.

منابع تامین اطلاعات

اطلاعات تأمین دستگاه را می توان به روش های زیر در اختیار ابزار تأمین کارخانه قرار داد:

  • آرگومان های خط فرمان
  • استفاده از یک فایل CSV تامین کننده
  • با واکشی مقادیر از یک سرور تامین کننده Nest

خط فرمان

در ساده‌ترین شکل، اطلاعات تأمین دستگاه مستقیماً در خط فرمان OpenWeave Factory Provisioning Tool مشخص می‌شود. مثلا:

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

مقادیر داده های باینری، مانند گواهی Weave و کلید خصوصی، می توانند به عنوان رشته های پایه 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 رقم هگز شناسه دستگاه ببافید. باید حضور داشته باشد.
Serial_Num رشته شماره سریال دستگاه
Certificate رشته پایه-64 گواهی دستگاه Weave اختصاص داده شده توسط سازنده.
Private_Key رشته پایه-64 کلید خصوصی Weave که توسط سازنده اختصاص داده شده است.
Pairing_Code رشته کد جفت شدن را ببافید.
Product_Rev عدد صحیح شماره ویرایش محصول
Mfg_Date YYYY/MM/DD تاریخ ساخت دستگاه

ممکن است ستون ها به هر ترتیبی در فایل CSV ظاهر شوند. همه ستون‌ها اختیاری هستند، به استثنای Device_Id . هر مقداری که در فایل CSV وجود ندارد، به سادگی در دستگاه ارائه نشده است.

کاربر ممکن است علاوه بر فایل CSV مقادیر تدارکات فردی را در خط فرمان مشخص کند، در این صورت مقدار خط فرمان بر مقادیر موجود در فایل مقدم است.

پشتیبانی از فرمت فایل CSV توسط Factory Provisioning Tool با خروجی دستور gen-provisioning-data ابزار weave سازگار است.

Nest provisioning server

Factory Provisioning Tool از واکشی اطلاعات منتخب تهیه از یک سرور تامین کننده Nest با استفاده از پروتکل مبتنی بر HTTPS پشتیبانی می کند. پروتکل سرور تامین کننده را می توان برای واکشی گواهی دستگاه Weave اختصاص داده شده توسط سازنده، کلید خصوصی مربوطه و کد جفت سازی Weave از سرور تامین کننده استفاده کرد.

محل شبکه سرور تامین کننده با ارائه یک URL پایه در خط فرمان ابزار تامین مشخص می شود. اطلاعات تامین مورد نظر با تعیین شناسه دستگاه Weave در خط فرمان انتخاب می شود. مثلا:

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

کاربر ممکن است علاوه بر URL سرور تامین کننده، مقادیر تدارکات فردی را در خط فرمان مشخص کند. در این حالت، مقادیر داده شده در خط فرمان بر مقادیری که توسط سرور بازگردانده شده است، مقدم هستند.

فعال/غیرفعال کردن پشتیبانی تهیه کارخانه

پشتیبانی از تهیه OpenWeave کارخانه در سیستم عامل دستگاه توسط گزینه پیکربندی زمان کامپایل WEAVE_DEVICE_CONFIG_ENABLE_FACTORY_PROVISIONING کنترل می شود. این گزینه به صورت پیش فرض فعال است. این ویژگی را می توان با نادیده گرفتن گزینه موجود در فایل WeaveProjectConfig.h برنامه غیرفعال کرد. مثلا:

#define WEAVE_DEVICE_CONFIG_ENABLE_FACTORY_PROVISIONING 0

به طور کلی، به شرطی که رابط اشکال زدایی دستگاه به طور مناسب در دستگاه های تولیدی غیرفعال شده باشد، فعال کردن تدارکات کارخانه در سیستم عامل دستگاه تولید ایمن است. این را می توان از طریق ابزارهای سخت افزاری (مثلاً با دمیدن فیوز در SoC) یا در نرم افزار (مثلاً از طریق یک بوت لودر ایمن که دسترسی اشکال زدایی را به عنوان بخشی از فرآیند بوت مسدود می کند) به دست آورد.

اجرای Factory Provisioning Tool

OpenWeave Factory Provisioning Tool از گزینه های خط فرمان زیر پشتیبانی می کند:

گزینه شرح
--target <string> نوع دستگاه مورد نظر گزینه ها عبارتند از: nrf52840 ، esp32
--load-addr <hex-digits> آدرسی در حافظه دستگاه که داده های تامین در آن نوشته می شود.
-- پرحرف، -v سطح پرحرفی خروجی را تنظیم کنید. از چندین استدلال برای افزایش پرحرفی استفاده کنید.
--serial-num <string> شماره سریال دستگاه را تنظیم کنید.
--device-id <hex-digits> شناسه دستگاه اختصاص داده شده توسط سازنده را تنظیم کنید.
--device-cert <base-64> | <نام فایل> گواهی دستگاه Weave اختصاص داده شده توسط سازنده را تنظیم کنید.
--device-key <base-64> | <نام فایل> کلید خصوصی دستگاه Weave را که سازنده اختصاص داده است تنظیم کنید.
--pairing-code <string> کد جفت شدن دستگاه را تنظیم کنید.
--product-rev <integer> بازبینی محصول را برای دستگاه تنظیم کنید.
--mfg-date <YYYY/MM/DD> | امروز | اکنون تاریخ ساخت دستگاه را تنظیم کنید.
--jlink-cmd <path-name> مسیر دستور JLink. پیش‌فرض «JLinkExe» است.
--jlink-if SWD | JTAG نوع رابط J-Link. پیش فرض SWD است.
--jlink-speed <integer> | تطبیقی ​​| خودکار سرعت رابط جی لینک
--jlink-sn <string> شماره سریال پروب جی لینک.
--esptool-cmd <path-name> مسیر به دستور esptool. پیش‌فرض «esptool.py».
--پورت <path-name> نام دستگاه پورت COM برای ESP32. پیش‌فرض /tty/USB0 است.
--speed <عدد صحیح> نرخ باود برای پورت COM. پیش فرض 115200 است.
--prov-csv-file <file-name> داده‌های تأمین دستگاه را از یک فایل CSV تأمین‌کننده بخوانید.
--prov-server <url> داده های تأمین دستگاه را از یک سرور تأمین کننده بخوانید.
- غیرفعال کردن سرور اعتبارسنجی هنگام استفاده از 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