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

เครื่องมือการจัดสรร OpenWeave จากโรงงาน

jinja-placeholder-0 .md "> ดูแหล่งที่มาบน GitHub

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

ทฤษฎีการปฏิบัติงาน

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

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

รหัสบนอุปกรณ์ที่ตรวจจับและประมวลผลข้อมูลการเตรียมใช้งานแบบฉีดนั้นมีอยู่ในเลเยอร์อุปกรณ์ OpenWeave ในตัวและสามารถเปิดใช้งานบนแพลตฟอร์มใดก็ได้ที่รองรับ เมื่อเปิดใช้งานรหัสจะทำงานโดยอัตโนมัติทุกครั้งที่อุปกรณ์บู๊ต ณ จุดเริ่มต้นของกระบวนการกำหนดค่าอุปกรณ์ รหัสทำงานโดยการสแกนภูมิภาคเฉพาะแพลตฟอร์มของ RAM บนแพลตฟอร์มที่มีหน่วยความจำขนาดเล็ก (ตัวอย่างเช่น <1M) การสแกนจะครอบคลุม RAM ที่มีอยู่ทั้งหมด

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

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

เครื่องมือการจัดสรรจากโรงงานอาศัยชุดเครื่องมือการพัฒนาภายนอกเพื่อเชื่อมต่อกับอุปกรณ์เป้าหมาย เครื่องมือเฉพาะที่ใช้นั้นขึ้นอยู่กับประเภทของอุปกรณ์เป้าหมาย ขณะนี้รองรับสองอินเทอร์เฟซอุปกรณ์:

  • ตัวตรวจแก้จุดบกพร่อง SEGGER J-Link เชื่อมต่อกับพอร์ต JTAG หรือ SWD ของอุปกรณ์
  • พอร์ตอนุกรม USB เชื่อมต่อกับ Espressif ESP32

อินเตอร์เฟส J-Link อาศัยเครื่องมือ SEGGER J-Link Commander (JLinkExe) ซึ่งจะต้องติดตั้งแยกต่างหากในเครื่องโฮสต์

ส่วนต่อประสาน ESP32 อาศัยคำสั่ง Espressif esptool.py ซึ่งให้ไว้เป็นส่วนหนึ่งของ ESP-IDF SDK ของ Espressif

ประเภทของข้อมูลที่สามารถจัดเตรียมได้

เครื่องมือการจัดเตรียมโรงงาน OpenWeave สามารถจัดเตรียมข้อมูลประเภทต่อไปนี้:

  • หมายเลขซีเรียลของอุปกรณ์
  • ID อุปกรณ์ Weave ที่กำหนดโดยผู้ผลิต
  • ใบรับรองการสานที่กำหนดโดยผู้ผลิตและรหัสส่วนตัว
  • สานรหัสการจับคู่
  • หมายเลขการแก้ไขผลิตภัณฑ์
  • วันผลิต

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

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

ข้อมูลการจัดเตรียมอุปกรณ์สามารถส่งไปยังเครื่องมือการจัดเตรียมโรงงานด้วยวิธีต่อไปนี้:

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

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

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

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

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

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

การจัดสรรไฟล์ CSV

เพื่อรองรับการเตรียมอุปกรณ์จำนวนมากเครื่องมือการจัดสรรจากโรงงานยังสามารถอ่านข้อมูลการจัดเตรียมจากไฟล์ข้อมูลการจัดเตรียมรูปแบบ CSV คอลัมน์ของไฟล์นี้คาดว่าจะสอดคล้องกับชนิดข้อมูลการจัดเตรียมเฉพาะ - นั่นคือ, Serial_Num , Certificate , Private_Key , ฯลฯ แถวในไฟล์ให้ค่าแต่ละค่าสำหรับอุปกรณ์เฉพาะ, จัดทำดัชนีโดยอุปกรณ์สานรหัส ( Device_Id ) 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 ฐาน ใบรับรองอุปกรณ์สานที่กำหนดโดยผู้ผลิต
Private_Key สตริง -64 ฐาน ไพรเวตคีย์ที่ได้รับมอบหมายจากผู้ผลิต
Pairing_Code เชือก สานรหัสการจับคู่
Product_Rev จำนวนเต็ม หมายเลขการแก้ไขผลิตภัณฑ์
Mfg_Date ปปปป / MM / DD วันที่ผลิตอุปกรณ์

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

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

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

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

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

ตำแหน่งเครือข่ายของเซิร์ฟเวอร์การจัดเตรียมระบุโดยการจัดหา 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) หรือในซอฟต์แวร์ (ตัวอย่างเช่นผ่านตัวโหลดการบูตที่ปลอดภัยที่บล็อกการเข้าถึงการดีบักซึ่งเป็นส่วนหนึ่งของกระบวนการบูต)

เรียกใช้เครื่องมือการจัดเตรียมจากโรงงาน

เครื่องมือการจัดเตรียมโรงงาน OpenWeave รองรับตัวเลือกบรรทัดคำสั่งต่อไปนี้:

ตัวเลือก ลักษณะ
- เป้าหมาย <string> ประเภทอุปกรณ์เป้าหมาย ตัวเลือกคือ: nrf52840 , esp32
--load-addr <hex-digits> ที่อยู่ในหน่วยความจำอุปกรณ์ที่ข้อมูลการจัดสรรจะถูกเขียน
- verbose, -v ปรับระดับ verbosity เอาท์พุท ใช้อาร์กิวเมนต์หลายข้อเพื่อเพิ่มความฟุ่มเฟื่อย
--serial-num <string> ตั้งหมายเลขซีเรียลของอุปกรณ์
- อุปกรณ์ <hex-digits> ตั้งค่ารหัสอุปกรณ์ที่ผู้ผลิตกำหนด
- อุปกรณ์ - ใบรับรอง <base-64> | <ชื่อไฟล์> ตั้งค่าใบรับรองอุปกรณ์สานที่กำหนดโดยผู้ผลิต
- อุปกรณ์หลัก <base-64> | <ชื่อไฟล์> ตั้งค่าคีย์ส่วนตัวของอุปกรณ์สานที่กำหนดโดยผู้ผลิต
--pairing-code <string> ตั้งรหัสการจับคู่อุปกรณ์
- ผลิตภัณฑ์-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
- ความเร็ว <integer> อัตรารับส่งข้อมูลสำหรับพอร์ต COM ค่าเริ่มต้นถึง 115200
--prov-csv-file <file-name> อ่านข้อมูลการเตรียมอุปกรณ์จากไฟล์ CSV การจัดเตรียม
--prov-server <url> อ่านข้อมูลการเตรียมอุปกรณ์จากเซิร์ฟเวอร์การจัดเตรียม
--disable เซิร์ฟเวอร์การตรวจสอบ เมื่อใช้ 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