مشاهده منبع در 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 مشخص میشود. به عنوان مثال:
./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
Factory Provisioning Tool از واکشی اطلاعات منتخب تهیه از سرور Nest Provisioning با استفاده از پروتکل مبتنی بر 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> | تطبیقی | خودکار | سرعت رابط J-Link. |
--jlink-sn <string> | شماره سریال پروب J-Link. |
--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