Google is committed to advancing racial equity for Black communities. See how.
หน้านี้ได้รับการแปลโดย Cloud Translation API
Switch to English

OpenWeave Factory Provisioning Tool

ดูแหล่งที่มาบน GitHub

OpenWeave Factory Provisioning Tool ช่วยอำนวยความสะดวกในการจัดเตรียมข้อมูลการกำหนดค่าแบบต่อเนื่องต่ออุปกรณ์ลงในอุปกรณ์ที่เปิดใช้งาน Weave เครื่องมือจัดเตรียมโรงงานมีวัตถุประสงค์เพื่อใช้เป็นส่วนหนึ่งของกระบวนการสายการผลิตที่ประทับตราอุปกรณ์แต่ละชิ้นด้วยข้อมูลประจำตัวและข้อมูลรับรองเฉพาะก่อนที่จะส่งไปยังลูกค้า นักพัฒนายังสามารถใช้เพื่อปรับแต่งฮาร์ดแวร์ก่อนการผลิตที่ใช้ในระหว่างกระบวนการพัฒนา

ทฤษฎีการดำเนินงาน

เป้าหมายของ OpenWeave Factory Provisioning Tool คือการแทรกข้อมูลการกำหนดค่าที่เลือกลงในที่เก็บการกำหนดค่าแบบต่อเนื่องของอุปกรณ์ซึ่งเฟิร์มแวร์ของอุปกรณ์สามารถหยิบและใช้ในรันไทม์ได้ โดยทั่วไปการกำหนดค่าอุปกรณ์ถาวรจะถูกจัดเก็บไว้ในแฟลชภายในของอุปกรณ์แม้ว่ารายละเอียดของข้อมูลจะถูกจัดเก็บอย่างไรและในรูปแบบใดจะแตกต่างกันไปในแต่ละแพลตฟอร์ม เครื่องมือจัดเตรียมจากโรงงานนั้นไม่ขึ้นอยู่กับรูปแบบการจัดเก็บขั้นสุดท้ายและอาศัยรหัสในเฟิร์มแวร์ของอุปกรณ์เพื่อเขียนข้อมูลด้วยวิธีที่ถูกต้อง อินเทอร์เฟซผู้ใช้ของเครื่องมือส่วนใหญ่ไม่ขึ้นอยู่กับประเภทของฮาร์ดแวร์ที่กำหนดค่าไว้ซึ่งหมายความว่ากระบวนการผลิตที่คล้ายคลึงกันสามารถนำไปใช้ในสายผลิตภัณฑ์ที่ใช้แพลตฟอร์มฮาร์ดแวร์ที่แตกต่างกัน

Factory Provisioning Tool ได้รับการออกแบบให้ทำงานบนเครื่องโฮสต์ที่เชื่อมต่อกับอุปกรณ์เป้าหมายผ่านอินเทอร์เฟซการดีบักหรือการควบคุมบางรูปแบบเช่นพอร์ต JTAG หรือ SWD เครื่องมือนี้ทำงานโดยการฉีดข้อมูลการจัดเตรียมลงใน RAM ของอุปกรณ์ในรูปแบบที่เข้ารหัสพิเศษ จากนั้นอุปกรณ์จะได้รับคำสั่งให้รีสตาร์ทโดยที่รหัสจุดที่อยู่ภายในเฟิร์มแวร์ของอุปกรณ์จะระบุตำแหน่งข้อมูลที่เข้ารหัสตรวจสอบความสมบูรณ์ของข้อมูลและเขียนค่าที่มีอยู่ลงในหน่วยเก็บข้อมูลถาวรในรูปแบบที่เหมาะสมกับแพลตฟอร์ม

รหัสบนอุปกรณ์ที่ตรวจจับและประมวลผลข้อมูลการจัดเตรียมที่ฉีดเข้าไปนั้นมีอยู่แล้วภายใน OpenWeave Device Layer และสามารถเปิดใช้งานบนแพลตฟอร์มใดก็ได้ที่รองรับ เมื่อเปิดใช้งานรหัสจะทำงานโดยอัตโนมัติทุกครั้งที่บู๊ตอุปกรณ์ ณ จุดเริ่มต้นของกระบวนการเริ่มต้นอุปกรณ์ รหัสทำงานโดยการสแกนพื้นที่เฉพาะของ RAM บนแพลตฟอร์มที่มีหน่วยความจำขนาดเล็ก (เช่น <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 ที่ผู้ผลิตกำหนด
  • ใบรับรอง Weave และคีย์ส่วนตัวที่ผู้ผลิตกำหนด
  • รหัสการจับคู่สาน
  • หมายเลขการแก้ไขผลิตภัณฑ์
  • วันผลิต

แม้ว่าโดยทั่วไปอุปกรณ์จะต้องใช้ข้อมูลข้างต้นทั้งหมดเพื่อให้ทำงานได้อย่างถูกต้อง แต่ก็ไม่จำเป็นต้องจัดเตรียมข้อมูลทั้งหมดในเวลาเดียวกัน ดังนั้นการจัดเตรียมข้อมูลประเภทต่างๆอาจเกิดขึ้นในจุดที่แตกต่างกันในกระบวนการผลิต นอกจากนี้ยังสามารถแทนที่ค่าที่จัดเตรียมไว้ก่อนหน้านี้ด้วยค่าใหม่ในขั้นตอนการจัดเตรียมที่ตามมา

แหล่งที่มาของข้อมูลการจัดเตรียม

ข้อมูลการจัดเตรียมอุปกรณ์สามารถส่งให้กับ Factory Provisioning Tool ได้ตามวิธีต่อไปนี้:

  • อาร์กิวเมนต์บรรทัดคำสั่ง
  • ใช้ไฟล์ CSV สำหรับการจัดเตรียม
  • โดยดึงค่าจากเซิร์ฟเวอร์การจัดเตรียม Nest

บรรทัดคำสั่ง

ในรูปแบบที่ง่ายที่สุดข้อมูลการจัดเตรียมอุปกรณ์จะถูกระบุโดยตรงในบรรทัดคำสั่งไปยัง OpenWeave Factory Provisioning Tool ตัวอย่างเช่น:

09 ธันวาคม 1ff0

ค่าข้อมูลไบนารีเช่นใบรับรอง Weave และคีย์ส่วนตัวสามารถระบุเป็นสตริงฐาน 64 หรือเป็นชื่อไฟล์ที่มีข้อมูลที่ต้องการในรูปแบบดิบ (ไบนารี)

ดูด้านล่างสำหรับรายการอาร์กิวเมนต์บรรทัดคำสั่งที่มีอยู่ทั้งหมด

กำลังจัดสรรไฟล์ CSV

เพื่อรองรับการจัดเตรียมอุปกรณ์จำนวนมาก Factory Provisioning Tool ยังสามารถอ่านข้อมูลการจัดเตรียมจากไฟล์ข้อมูลการจัดเตรียมในรูปแบบ CSV คอลัมน์ของไฟล์นี้คาดว่าจะสอดคล้องกับประเภทข้อมูลการจัดเตรียมที่เฉพาะเจาะจงนั่นคือ Serial_Num , Certificate , Private_Key เป็นต้นแถวในไฟล์จะให้ค่าแต่ละรายการสำหรับอุปกรณ์เฉพาะซึ่งจัดทำดัชนีโดย Weave device id ( 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 ปปปป / ดด / วว วันที่ผลิตอุปกรณ์

คอลัมน์อาจปรากฏในไฟล์ CSV ในลำดับใดก็ได้ คอลัมน์ทั้งหมดเป็นทางเลือกยกเว้น Device_Id ค่าใด ๆ ที่ ไม่มี อยู่ในไฟล์ CSV จะไม่ถูกจัดเตรียมไว้ในอุปกรณ์

ผู้ใช้สามารถระบุค่าการจัดเตรียมแต่ละรายการในบรรทัดคำสั่งเพิ่มเติมจากไฟล์ CSV ซึ่งในกรณีนี้ค่าบรรทัดคำสั่งจะมีผลเหนือกว่าค่าในไฟล์

การสนับสนุนรูปแบบไฟล์ CSV โดย Factory Provisioning Tool เข้ากันได้กับเอาต์พุตของคำสั่ง gen-provisioning-data ของเครื่องมือ weave

เซิร์ฟเวอร์การจัดเตรียม Nest

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 รองรับตัวเลือกบรรทัดคำสั่งต่อไปนี้:

ตัวเลือก คำอธิบาย
- เป้าหมาย <string> ประเภทอุปกรณ์เป้าหมาย ทางเลือก ได้แก่ : nrf52840 , esp32
--load-addr <hex-digits> ที่อยู่ในหน่วยความจำอุปกรณ์ที่จะเขียนข้อมูลการจัดเตรียม
--verbose, -v ปรับระดับความละเอียดของเอาต์พุต ใช้หลายอาร์กิวเมนต์เพื่อเพิ่มความฟุ่มเฟื่อย
--serial-num <string> ตั้งค่าหมายเลขซีเรียลของอุปกรณ์
--device-id <hex-digits> ตั้งรหัสอุปกรณ์ที่ผู้ผลิตกำหนด
--device-cert <base-64> | <file-name> ตั้งค่าใบรับรองอุปกรณ์ Weave ที่ผู้ผลิตกำหนด
- ปุ่มอุปกรณ์ <base-64> | <file-name> ตั้งค่าคีย์ส่วนตัวของอุปกรณ์ Weave ที่ผู้ผลิตกำหนด
- รหัสการจับคู่ <string> ตั้งรหัสการจับคู่อุปกรณ์
--product-rev <integer> ตั้งค่าการแก้ไขผลิตภัณฑ์สำหรับอุปกรณ์
--mfg วันที่ <YYYY / MM / DD> | วันนี้ | ตอนนี้ กำหนดวันที่ผลิตของอุปกรณ์
--jlink-cmd <path-name> คำสั่งพา ธ ไปยัง JLink ค่าเริ่มต้นเป็น 'JLinkExe'
--jlink- ถ้า SWD | JTAG ประเภทอินเตอร์เฟส J-Link ค่าเริ่มต้นเป็น SWD
--jlink-speed <integer> | ปรับตัว | อัตโนมัติ ความเร็วอินเตอร์เฟซ J-Link
--jlink-sn <string> หมายเลขซีเรียลของโพรบ J-Link
--esptool-cmd <path-name> คำสั่ง path to esptool ค่าเริ่มต้นเป็น "esptool.py"
- พอร์ต <path-name> ชื่ออุปกรณ์พอร์ต COM สำหรับ ESP32 ค่าเริ่มต้นเป็น / tty / USB0
- ความเร็ว <integer> อัตราบอดสำหรับพอร์ต COM ค่าเริ่มต้นคือ 115200
--prov-csv ไฟล์ <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