![]() |
הכלי של OpenWeave להקצאת נתונים במפעל מספק דרך נוחה להקצאת פרטי תצורה קבועים לכל מכשיר במכשירים שתומכים ב-Weave. הכלי לניהול הרשאות הגישה במפעל מיועד לשימוש כחלק מתהליך של קו ייצור, שבו מוטבעים מידע ייחודי על הזהות ופרטי הכניסה של מכשירים ספציפיים לפני שהם נשלחים ללקוחות. גם מפתחים יכולים להשתמש בו כדי להתאים אישית חומרת טרום-ייצור, שמשמשת בתהליך הפיתוח.
תיאורית הפעולה
המטרה של כלי ה-OpenWeave Factory Provisioning היא להחדיר פרטי תצורה נבחרים למאגר התצורה הקבוע של המכשיר, שבו קושחת המכשיר יכולה לאתר אותם ולהשתמש בהם במהלך זמן הריצה. בדרך כלל, תצורת המכשיר הקבועה מאוחסנת בזיכרון הפלאש הפנימי של המכשיר, אבל הפרטים המדויקים של אופן האחסון של הנתונים ובאיזה פורמט משתנים מפלטפורמה לפלטפורמה. כלי ההקצאה להתקנה במפעל עצמו לא תלוי בפורמט האחסון הסופי, והוא מסתמך על קוד בקושחה של המכשיר כדי לכתוב את הנתונים בצורה הנכונה. גם ממשק המשתמש של הכלי לא תלוי בדרך כלל בסוג החומרה שמגדירים. כלומר, ניתן להשתמש בתהליכי ייצור דומים בקווי מוצרים שונים שמבוססים על פלטפורמות חומרה שונות.
הכלי להקצאת הרשאות ידנית פועל במכשיר מארח שמחובר למכשיר יעד דרך צורה כלשהי של ניפוי באגים או ממשק בקרה, לדוגמה, יציאת JTAG או SWD. הכלי פועל על ידי הזרקת פרטי ההקצאה לזיכרון ה-RAM של המכשיר בפורמט מקודד במיוחד. לאחר מכן, המכשיר מקבל הוראה להפעיל מחדש. בשלב הזה, קוד מובנה בקושחה של המכשיר מאתר את הנתונים המקודדים, מאמת את תקינותם וכותב את הערכים הכלולים באחסון מתמיד בפורמט שמתאים לפלטפורמה.
הקוד במכשיר שמזהה ומעבד את נתוני ההקצאה שהוזנו מוטמע בשכבת המכשיר של OpenWeave, וניתן להפעיל אותו בכל פלטפורמה נתמכת. אחרי ההפעלה, הקוד פועל באופן אוטומטי בכל פעם שהמכשיר מופעל, בשלב מוקדם בתהליך האיפוס של המכשיר. הקוד פועל על ידי סריקת אזור ספציפי של זיכרון RAM בפלטפורמה. בפלטפורמות עם נפח זיכרון צנוע (לדוגמה, פחות מ-1MB), הסריקה כוללת את כל ה-RAM הזמין.
כשנתוני ההקצאה נמצאים ב-RAM, הם מקודדים עם קידומת שקל לזהות, וכך אפשר למצוא אותם במהירות במהלך תהליך הסריקה. ערך של בדיקת תקינות שמבוסס על גיבוב קריפטוגרפי משמש לאימות התקינות של הנתונים לפני העיבוד.
כברירת מחדל, כלי ההקצאה בוחר את מיקום ה-RAM שבו יוחדרו נתוני ההקצאה על סמך פלטפורמת המכשיר היעד. אפשר לשנות את הבחירה הזו באמצעות ארגומנט בכלי. באופן כללי, לא נדרש שתוכנת הקושחה של המכשיר תשמור מיקום ב-RAM במיוחד לקבלת נתוני הקצאה. בדרך כלל, נתוני הקצאת ההרשאות נכתבים למיקום RAM שמוקצה למטרות אחרות, אבל בדרך כלל לא נעשה בהם שימוש בשלב מוקדם בתהליך האתחול של המכשיר. האפשרויות הנפוצות הן החלק העליון של ערימת המערכת הראשונית או הקצה הרחוק של תמונת מצב של הזיכרון.
הכלי להקצאה מברירת המחדל מסתמך על קבוצה של כלי פיתוח חיצוניים כדי ליצור ממשק עם מכשיר היעד. הכלים הספציפיים שבהם משתמשים תלויים בסוג של מכשיר היעד. נכון לעכשיו יש תמיכה בשני ממשקים של מכשירים:
- גלאי ניפוי באגים של SEGGER J-Link שמחובר ליציאת JTAG או SWD של המכשיר
- יציאה טורית USB שמחוברת ל-Espressif ESP32
ממשק J-Link מסתמך על הכלי SEGGER J-Link Commander (JLinkExe), שצריך להתקין בנפרד במכונה המארחת.
ממשק ESP32 מסתמך על הפקודה esptool.py של Espressif, שסופקת כחלק מ-ESP-IDF SDK של 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 והמפתח הפרטי, כמחרוזות Base64 או כשמות של קבצים שמכילים את הנתונים הרצויים בפורמט גולמי (בינארי).
בהמשך מופיעה רשימה מלאה של הארגומנטים הזמינים לשורת הפקודה.
קובץ 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 |
מחרוזת | קוד ההתאמה של Weave. |
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/
המשתמש יכול לציין ערכים ספציפיים להקצאה בשורת הפקודה, בנוסף לכתובת ה-URL של שרת ההקצאה. במקרה כזה, הערכים שצוינו בשורת הפקודה מקבלים עדיפות על פני הערכים שמוחזרים מהשרת.
הפעלה / השבתה של תמיכה בהקצאת הרשאות ידנית
התמיכה בהקצאת נתונים מברירת המחדל של OpenWeave בקושחת המכשיר נשלטת על ידי אפשרות התצורה WEAVE_DEVICE_CONFIG_ENABLE_FACTORY_PROVISIONING
בזמן הידור. האפשרות הזו מופעלת כברירת מחדל. אפשר להשבית את התכונה על ידי שינוי האפשרות בקובץ WeaveProjectConfig.h
של האפליקציה. לדוגמה:
#define WEAVE_DEVICE_CONFIG_ENABLE_FACTORY_PROVISIONING 0
באופן כללי, בטוח להפעיל את ההקצאה במפעל בקושחה של מכשירי הייצור בתנאי שממשק ניפוי הבאגים של המכשיר מושבת כראוי במכשירי הייצור. אפשר להשיג זאת באמצעות אמצעי חומרה (לדוגמה, על ידי שריפת נתיכים ב-SoC) או באמצעות תוכנה (לדוגמה, באמצעות מנהל אתחול מאובטח שחוסם את הגישה לניפוי באגים כחלק מתהליך האתחול).
הפעלת הכלי להקצאת מכשיר (Provisioning) מהמפעל
כלי הקצאת הרשאות המקור של 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. |
--esptool-cmd <path-name> | הנתיב לפקודה esptool. ברירת המחדל היא esptool.py. |
--port <path-name> | שם המכשיר של יציאת ה-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