כלי לניהול תצורה של OpenWeave

הצגת המקור ב-GitHub

הכלי OpenWeave תת-הגדרה למפעל מספק אמצעי נוח להקצאת מידע על הגדרות קבועות לכל מכשיר במכשירים התומכים ב-Weave. השימוש בכלי לניהול מפעלים מיועד לשימוש כחלק מתהליך של ייצור מוצרים שחותם מכשירים בודדים עם זהות ייחודית ופרטי כניסה לפני המשלוח ללקוחות. הם גם יכולים לשמש את המפתחים להתאמה אישית של החומרה בשלב קדם-הפקה המשמשת בתהליך הפיתוח.

תורת הפעולה

המטרה של הכלי OpenWeave לניהול תצורה במפעל היא החדרה של פרטי תצורה נבחרים לחנות תצורה קבועה של מכשיר, שבה ניתן לאסוף אותה ולהשתמש בה בזמן הקושחה של המכשיר. תצורת מכשיר קבועה נשמרת בדרך כלל בתוך ה-Flash הפנימי של המכשיר, אם כי הפרטים בדיוק לגבי אופן אחסון הנתונים והפורמט שלהם משתנים מפלטפורמה לפלטפורמה. הכלי לניהול תצורה במפעל לא תלוי בעצמו בפורמט האחסון הסופי, והוא מסתמך על קוד בקושחה של המכשיר כדי לכתוב את הנתונים בדרך הנכונה. גם ממשק המשתמש של הכלי לא תלוי בסוג החומרה שמוגדר, כלומר ניתן להשתמש בתהליכי ייצור דומים בכל קווי המוצרים על סמך פלטפורמות חומרה שונות.

הכלי לניהול תצורה במפעל מתוכנן לפעול במחשב מחשב המחובר למכשיר יעד דרך ממשק ניפוי באגים או ממשק בקרה - לדוגמה, יציאת JTAG או SWD. הכלי עובד על ידי הזרקה של פרטי ניהול תצורה ב-RAM של המכשיר בצורה מקודדת במיוחד. לאחר מכן המכשיר מקבל הוראה להפעיל מחדש, כאשר בשלב הזה הקוד המובנה של הקושחה מאתר את הנתונים המקודדים, מאמת את תקינותו וכותב את הערכים הכלולים באחסון מתמיד בפורמט שמתאים לפלטפורמה.

הקוד במכשיר שמזהה ומעבד את נתוני ההקצאה שהוחדרו מובנה בשכבת המכשיר OpenWeave, וניתן להפעיל אותו בכל פלטפורמה נתמכת. לאחר הפעלת הקוד, בכל פעם שהמכשיר מופעל, הקוד מופעל באופן אוטומטי בשלב מוקדם של תהליך אתחול המכשיר. הקוד פועל על ידי סריקת אזור RAM ספציפי לפלטפורמה. בפלטפורמות עם תושבות צנועות של זיכרון (לדוגמה, <1M), הסריקה כוללת את כל זיכרון ה-RAM הזמין.

כשמעבירים אותם ל-RAM, המערכת מקודדת את נתוני ניהול התצורה כך שניתן יהיה למצוא אותם בקלות בזמן הסריקה. ערך בדיקת תקינות מבוסס על גיבוב קריפטוגרפי משמש לאימות התקינות של הנתונים לפני העיבוד.

כברירת מחדל, הכלי לניהול תצורה בוחר את מיקום ה-RAM שבו יש להחדיר את נתוני ההקצאה על סמך הפלטפורמה של מכשיר היעד. אפשר לבטל את הבחירה הזו באמצעות ארגומנט לכלי. באופן כללי, לא נדרש שהקושחה של המכשיר תשמור מיקום RAM במיוחד לקבלת נתוני ניהול תצורה. לרוב, נתוני ההקצאה נכתבים במיקום של זיכרון RAM המוקצה למטרות אחרות, אבל בדרך כלל לא נעשה בו שימוש בתחילת תהליך ההפעלה של המכשיר. האפשרויות הנפוצות הן החלק העליון של ערימת המערכת הראשונית, או הקצה השמאלי של זירת ערימה (heap).

הכלי לניהול תצורה של מפעל מסתמך על קבוצה של כלי פיתוח חיצוניים כדי להתחבר למכשיר היעד. הכלים הספציפיים שבהם משתמשים תלויים בסוג מכשיר היעד. שני ממשקים של מכשירים נתמכים בשלב זה:

  • מתקן ניפוי באגים של SEGGER J-Link שמחובר למכשיר JTAG או יציאת SWD של מכשיר
  • יציאת טורית ב-USB המחוברת ל-Espressif ESP32

ממשק J-Link מסתמך על כלי ה-SEGGER J-Link Commander (JLinkExe), שאותו צריך להתקין בנפרד במחשב המארח.

ממשק ESP32 מסתמך על פקודת Espressif esptools.py, המסופקת כחלק מ-Espressif's ESP-IDF SDK.

סוגי המידע שניתן לספק

הכלי OpenWeave OEM (יצרן ציוד מקורי) יכול לספק את סוגי המידע הבאים:

  • המספר הסידורי של המכשיר
  • מזהה מכשיר של Weave שהוקצה על ידי היצרן
  • אישור Weave שהוקצה על ידי היצרן ומפתח פרטי
  • קוד התאמה לאריגה
  • מספר הגרסה של המוצר
  • תאריך הייצור

על אף שבאופן כללי, מכשיר כלשהו יצטרך את כל המידע שצוין כדי לפעול כראוי, אך הוא לא נדרש לספק את כל המידע בו-זמנית. לכן, הקצאת סוגים שונים של מידע יכולה להתרחש בנקודות נפרדות בתהליך הייצור. בנוסף, בשלב הבא אפשר להחליף ערכים שהוקצו להם ערכים חדשים בשלבים חדשים של ניהול התצורה.

מקורות המידע על ניהול התצורה

ניתן לספק מידע על ניהול תצורה של מכשירים לכלי לניהול הגדרות היצרן בדרכים הבאות:

  • ארגומנטים לשורת פקודה
  • שימוש בקובץ CSV לניהול תצורה
  • שליפה של ערכים משרת ניהול תצורה של Nest

שורת פקודה

בצורה הפשוטה ביותר, פרטי הקצאת המכשיר מצוינים ישירות בשורת הפקודה לכלי OpenWeave OEM (ניהול מפעלים מקורי). למשל:

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

ניתן לציין ערכים של נתונים בינאריים, כמו אישור Weave ומפתח פרטי, כמחרוזות base-64, או כשם קבצים שמכילים את הנתונים הרצויים בפורמט בינארי (בינארי).

למטה מופיעה רשימה מלאה של הארגומנטים הזמינים בשורת הפקודה.

קובץ CSV לניהול תצורה

כדי להתאים ניהול הקצאות בכמות גדולה של מכשירים, כלי ניהול ההקצאות (Provisioning) של היצרן יוכל לקרוא גם את נתוני ניהול התצורה מתוך קובץ נתונים של ניהול תצורה בפורמט 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 string המספר הסידורי של המכשיר.
Certificate מחרוזת base-64 אישור למכשיר Weave שהוקצה על ידי היצרן.
Private_Key מחרוזת base-64 מפתח פרטי, שהוקצה על ידי היצרן ב-Weave.
Pairing_Code string קוד התאמה של אריגה.
Product_Rev מספר שלם מספר גרסת המוצר.
Mfg_Date YYYY/MM/DD תאריך הייצור של המכשיר.

העמודות עשויות להופיע בקובץ ה-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/

המשתמש יכול לציין ערכים ספציפיים של ניהול תצורה בשורת הפקודה, בנוסף לכתובת האתר של שרת ההקצאה. במקרה כזה, הערכים שניתנו בשורת הפקודה יקבלו עדיפות על פני ערכים שהוחזרו על ידי השרת.

הפעלה / השבתה של תמיכה בניהול תצורה במפעל

התמיכה בניהול תצורה של OpenWeave בקושחה של מכשיר נשלטת על ידי אפשרות התצורה של WEAVE_DEVICE_CONFIG_ENABLE_FACTORY_PROVISIONING בזמן הכנה. האפשרות הזו מופעלת כברירת מחדל. ניתן להשבית את התכונה על ידי ביטול האפשרות בקובץ ה-WeaveProjectConfig.h. למשל:

#define WEAVE_DEVICE_CONFIG_ENABLE_FACTORY_PROVISIONING 0

באופן כללי, ניתן להפעיל ניהול הקצאות (Provisioning) של יצרן להגדרות הקושחה של מכשיר הייצור בתנאי שממשק ניפוי הבאגים במכשיר מושבת כראוי במכשירי ייצור. ניתן לעשות זאת באמצעות אמצעי חומרה (לדוגמה, על ידי ניפוח נתיכים ב-SoC), או באמצעות תוכנה (לדוגמה, באמצעות מנהל אתחול מאובטח שחוסם את הגישה לניפוי באגים כחלק מתהליך ההפעלה).

הפעלת הכלי לניהול תצורה של מפעל

כלי ניהול התצורה של OpenWeave תומך באפשרויות הבאות בשורת הפקודה:

אפשרות תיאור
--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> | היום | עכשיו מגדירים את תאריך הייצור של המכשיר.
-jlink-cmd <path-name> נתיב לפקודת JLink. ברירת המחדל היא 'JLinkExe'.
--jlink-if SWD | JTAG סוג ממשק J-Link. ברירת המחדל היא SWD.
--jlink-speed <integer> | ניתן להתאמה | אוטומטי מהירות ממשק J-link.
--jlink-sn <string> המספר הסידורי של מוטת ה-J-Link.
--esptools-cmd <path-name> נתיב לפקודה של estools. ברירת המחדל היא 'esptools.py'.
--port <path-name> שם המכשיר של יציאת ה-COM עבור ESP32. ברירת המחדל היא /tty/USB0.
--speed <integer> שיעור היציאות ביציאת 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