ดูแหล่งที่มาใน GitHub |
เครื่องมือการจัดสรรโรงงาน OpenWeave เป็นวิธีที่สะดวกในการจัดสรรข้อมูลการกําหนดค่าแบบต่ออุปกรณ์อย่างต่อเนื่องสําหรับอุปกรณ์ที่เปิดใช้ Weave เครื่องมือการจัดสรรเริ่มต้นมีไว้สําหรับใช้เป็นส่วนหนึ่งของกระบวนการผลิตที่ประทับตราอุปกรณ์ของแต่ละคน โดยมีข้อมูลประจําตัวและข้อมูลเข้าสู่ระบบที่ไม่ซ้ํากันก่อนการจัดส่งให้ลูกค้า นอกจากนี้ นักพัฒนาซอฟต์แวร์ยังใช้แอปดังกล่าวเพื่อปรับเปลี่ยนฮาร์ดแวร์รุ่นก่อนผลิตจริงที่ใช้ในขั้นตอนการพัฒนาซอฟต์แวร์ได้ด้วย
ทฤษฎีปฏิบัติการ
เป้าหมายของเครื่องมือการจัดสรร OpenOpenaa Factory คือการแทรกข้อมูลการกําหนดค่าที่เลือกลงในที่เก็บการกําหนดค่าถาวรของอุปกรณ์ ซึ่งอุปกรณ์จะเลือกรับและใช้ได้ขณะรันไทม์ด้วยเฟิร์มแวร์ของอุปกรณ์ โดยทั่วไปการกําหนดค่าอุปกรณ์ถาวรจะจัดเก็บไว้ในแฟลชภายในของอุปกรณ์ แม้ว่ารายละเอียดการจัดเก็บข้อมูลจะเป็นไปตามรูปแบบที่ปรากฏและในรูปแบบที่แตกต่างกันไปในแต่ละแพลตฟอร์ม เครื่องมือการจัดสรรเริ่มต้นจะไม่ขึ้นอยู่กับรูปแบบพื้นที่เก็บข้อมูลจริง และอาศัยโค้ดในเฟิร์มแวร์ของอุปกรณ์เพื่อเขียนข้อมูลอย่างถูกต้อง อินเทอร์เฟซผู้ใช้ของเครื่องมือส่วนใหญ่ก็จะไม่ขึ้นอยู่กับประเภทของฮาร์ดแวร์ที่กําหนดค่าไว้ ซึ่งหมายความว่าขั้นตอนการผลิตที่คล้ายกันจะใช้ในสายผลิตภัณฑ์ที่อิงตามแพลตฟอร์มฮาร์ดแวร์ที่แตกต่างกันได้
เครื่องมือการจัดสรรเริ่มต้นออกแบบมาเพื่อทํางานในเครื่องโฮสต์ที่เชื่อมต่อกับอุปกรณ์เป้าหมายผ่านอินเทอร์เฟซการแก้ไขข้อบกพร่องหรืออินเทอร์เฟซการควบคุมบางอย่าง เช่น พอร์ต JTAG หรือ SWD เครื่องมือจะทํางานโดยการแทรกข้อมูลการจัดสรรลงใน RAM ของอุปกรณ์ในรูปแบบที่เข้ารหัสเป็นพิเศษ จากนั้นอุปกรณ์จะแนะนําให้รีสตาร์ท ซึ่งโค้ด Point ในตัวของเฟิร์มแวร์ของอุปกรณ์จะค้นหาข้อมูลที่เข้ารหัส ตรวจสอบความสมบูรณ์ และเขียนค่าที่มีอยู่ในพื้นที่เก็บข้อมูลถาวรในรูปแบบที่เหมาะสมสําหรับแพลตฟอร์ม
โค้ดในอุปกรณ์ที่ตรวจจับและประมวลผลข้อมูลการจัดสรรที่แทรกเข้ามานั้นมีอยู่ในเลเยอร์ OpenWeave Device Layer และสามารถเปิดใช้บนแพลตฟอร์มที่รองรับ เมื่อเปิดใช้แล้ว โค้ดจะทํางานโดยอัตโนมัติทุกครั้งที่อุปกรณ์เปิดเครื่อง โดยอยู่ในจุดแรกของกระบวนการเริ่มต้นอุปกรณ์ โค้ดจะดําเนินการโดยการสแกนพื้นที่ RAM เฉพาะแพลตฟอร์ม ในแพลตฟอร์มที่มีหน่วยความจําว่างน้อย (เช่น <1M) การสแกนจะรวม RAM ที่มีอยู่ทั้งหมด
เมื่ออยู่ใน RAM ข้อมูลการจัดสรรจะเข้ารหัสด้วยคํานําหน้าที่ระบุตัวบุคคลได้ง่าย ทําให้ค้นหาได้อย่างรวดเร็วระหว่างกระบวนการสแกน ระบบจะใช้ค่าการตรวจสอบความสมบูรณ์ตามแฮชการเข้ารหัสลับเพื่อยืนยันความถูกต้องของข้อมูลก่อนประมวลผล
โดยค่าเริ่มต้น เครื่องมือการจัดสรรจะเลือกตําแหน่ง RAM ที่จะแทรกข้อมูลการจัดสรรตามแพลตฟอร์มอุปกรณ์เป้าหมาย ตัวเลือกนี้ลบล้างผ่านอาร์กิวเมนต์ไปยังเครื่องมือได้ โดยทั่วไปแล้ว เฟิร์มแวร์ของอุปกรณ์จะสงวนตําแหน่ง RAM ไว้โดยเฉพาะสําหรับการรับข้อมูลการจัดสรร โดยทั่วไป ข้อมูลการจัดสรรจะเขียนไปยังตําแหน่ง RAM ที่จัดสรรเพื่อวัตถุประสงค์อื่นๆ แต่โดยทั่วไปจะไม่ใช้ในช่วงต้นของกระบวนการเปิดเครื่องอุปกรณ์ ตัวเลือกที่พบบ่อยคือด้านบนของระบบสแต็กระบบเริ่มต้นหรือปลายทางสุดไกล
เครื่องมือการผลิตเริ่มต้นอาศัยชุดเครื่องมือพัฒนาภายนอกเพื่อเชื่อมต่อกับอุปกรณ์เป้าหมาย เครื่องมือที่ใช้จะขึ้นอยู่กับประเภทของอุปกรณ์เป้าหมาย ปัจจุบันระบบรองรับอินเทอร์เฟซอุปกรณ์ 2 แบบ ได้แก่
- การตรวจสอบการแก้ไขข้อบกพร่อง SEGGER J-Link เชื่อมต่อกับพอร์ต JTAG หรือ SWD ของอุปกรณ์
- พอร์ตอนุกรม USB ที่เชื่อมต่อกับ Espressif ESP32
อินเทอร์เฟซ J-Link จะอาศัยเครื่องมือ SEGGER J-Link Commander (JLinkExe) ซึ่งต้องติดตั้งแยกต่างหากในเครื่องโฮสต์
อินเทอร์เฟซ ESP32 อาศัยคําสั่ง Espressif esptool.py ซึ่งให้บริการเป็นส่วนหนึ่งของ ESP-IDF SDK ของ Espressif'
ประเภทของข้อมูลที่จะจัดสรรได้
เครื่องมือการจัดสรรของ OpenWeave สามารถจัดสรรข้อมูลประเภทต่อไปนี้ได้
- หมายเลขซีเรียลของอุปกรณ์
- รหัสอุปกรณ์ Weave ที่ผู้ผลิตกําหนด
- ใบรับรอง Weave และคีย์ส่วนตัวที่ผู้ผลิตกําหนด
- สร้างรหัสการจับคู่
- หมายเลขแก้ไขผลิตภัณฑ์
- วันที่ผลิต
แม้ว่าอุปกรณ์ทั่วไปจะต้องใช้ข้อมูลทั้งหมดข้างต้นจึงจะทํางานได้ถูกต้อง แต่ก็ไม่จําเป็นต้องจัดสรรข้อมูลทั้งหมดพร้อมกัน ดังนั้น การจัดสรรข้อมูลประเภทต่างๆ อาจเกิดขึ้นได้ในจุดที่แตกต่างกันในกระบวนการผลิต นอกจากนี้ คุณยังทดแทนค่าที่จัดสรรไว้ก่อนหน้านี้ซึ่งมีค่าใหม่ในขั้นตอนการจัดสรรที่ตามมาได้ด้วย
แหล่งที่มาของข้อมูลการจัดสรร
ทั้งนี้คุณจัดเตรียมข้อมูลการจัดสรรอุปกรณ์ให้แก่เครื่องมือการจัดสรรเริ่มต้นได้ด้วยวิธีดังต่อไปนี้
- อาร์กิวเมนต์บรรทัดคําสั่ง
- การใช้ไฟล์ CSV การจัดสรร
- ด้วยการดึงข้อมูลค่าจากเซิร์ฟเวอร์การจัดสรร Nest
บรรทัดคำสั่ง
ข้อมูลที่เข้าใจง่ายที่สุดคือระบุข้อมูลการจัดสรรอุปกรณ์โดยตรงในบรรทัดคําสั่งไปยังเครื่องมือการจัดสรรของ OpenWeave Factory เช่น
./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 |
สตริง base64 | ใบรับรองอุปกรณ์ Weave ที่ผู้ผลิตกําหนด |
Private_Key |
สตริง base64 | คีย์ส่วนตัว Weave ที่ผู้ผลิตกําหนด |
Pairing_Code |
สตริง | เป็นรหัสการจับคู่ |
Product_Rev |
จำนวนเต็ม | หมายเลขแก้ไขผลิตภัณฑ์ |
Mfg_Date |
ปปปป/ดด/วว | วันที่ผลิตอุปกรณ์ |
คอลัมน์อาจปรากฏในไฟล์ CSV โดยเรียงลําดับอย่างไรก็ได้ คอลัมน์ทั้งหมดเป็นค่าที่ไม่บังคับ ยกเว้น Device_Id
ค่าที่ไม่ได้มีอยู่ในไฟล์ CSV จะไม่ได้จัดสรรในอุปกรณ์
ผู้ใช้สามารถระบุค่าการจัดสรรแต่ละรายการในบรรทัดคําสั่งนอกเหนือจากไฟล์ CSV ซึ่งในกรณีนี้ ค่าบรรทัดคําสั่งจะมีผลเหนือค่าในไฟล์
การรองรับรูปแบบไฟล์ CSV ที่เครื่องมือการจัดสรรจากโรงงานรองรับเอาต์พุตของคําสั่ง weave
ของเครื่องมือ gen-provisioning-data
เซิร์ฟเวอร์การจัดสรร 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
ตัวเลือกนี้จะเปิดใช้โดยค่าเริ่มต้น คุณปิดใช้ฟีเจอร์นี้ได้โดยการลบล้างตัวเลือกในไฟล์ WeaveProjectConfig.h
เช่น
#define WEAVE_DEVICE_CONFIG_ENABLE_FACTORY_PROVISIONING 0
โดยทั่วไปแล้ว วิธีเปิดใช้การจัดสรรจากโรงงานในเฟิร์มแวร์อุปกรณ์เวอร์ชันที่ใช้งานจริงนั้นปลอดภัยโดยหากอินเทอร์เฟซการแก้ไขข้อบกพร่องของอุปกรณ์ปิดอยู่ในอุปกรณ์ที่ใช้งานจริงอย่างเหมาะสม ซึ่งทําได้ผ่านฮาร์ดแวร์ (เช่น โดยการเป่าฟิวส์ใน SoC) หรือในซอฟต์แวร์ (เช่น ผ่านตัวโหลดการรักษาความปลอดภัยที่ปลอดภัยที่บล็อกการเข้าถึงการแก้ไขข้อบกพร่องซึ่งเป็นส่วนหนึ่งของกระบวนการเปิดเครื่อง)
การเรียกใช้เครื่องมือการจัดสรรเริ่มต้น
เครื่องมือการจัดสรรของ OpenWeave Factory รองรับตัวเลือกบรรทัดคําสั่งต่อไปนี้
ตัวเลือก | คำอธิบาย |
---|---|
--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> | ปรับเปลี่ยนได้ | auto | ความเร็วของอินเทอร์เฟซ 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> | อ่านข้อมูลการจัดสรรอุปกรณ์จากเซิร์ฟเวอร์การจัดสรร |
--ปิดใช้การตรวจสอบเซิร์ฟเวอร์ | เมื่อใช้ 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