Google cam kết thúc đẩy công bằng chủng tộc cho các cộng đồng Đen. Xem thế nào.
Trang này được dịch bởi Cloud Translation API.
Switch to English

Công cụ cung cấp nhà máy OpenWeave

jinja-giữ chỗ-0 .md "> Xem nguồn trên GitHub

Công cụ cung cấp nhà máy OpenWeave cung cấp một phương tiện thuận tiện để cung cấp thông tin cấu hình trên mỗi thiết bị liên tục trên các thiết bị hỗ trợ Dệt. Công cụ cung cấp nhà máy dự định sẽ được sử dụng như một phần của quy trình sản xuất, đóng dấu các thiết bị riêng lẻ với thông tin nhận dạng và thông tin xác thực duy nhất trước khi giao cho khách hàng. Nó cũng có thể được sử dụng bởi các nhà phát triển để cá nhân hóa phần cứng tiền sản xuất được sử dụng trong quá trình phát triển.

Nguyên lý hoạt động

Mục tiêu của Công cụ cung cấp nhà máy OpenWeave là đưa thông tin cấu hình được chọn vào kho lưu trữ cấu hình liên tục của thiết bị, nơi phần mềm có thể được chọn và sử dụng trong thời gian chạy bởi phần sụn thiết bị. Cấu hình thiết bị liên tục thường được lưu trữ trong đèn flash bên trong của thiết bị, mặc dù các chi tiết về cách chính xác dữ liệu được lưu trữ và ở định dạng nào, khác nhau tùy theo nền tảng. Bản thân Công cụ cung cấp nhà máy độc lập với định dạng lưu trữ cuối cùng và dựa vào mã trong phần sụn của thiết bị để ghi dữ liệu theo đúng cách. Giao diện người dùng của công cụ cũng độc lập chủ yếu với loại phần cứng được cấu hình, có nghĩa là các quy trình sản xuất tương tự có thể được sử dụng trên các dòng sản phẩm dựa trên các nền tảng phần cứng khác nhau.

Công cụ cung cấp nhà máy được thiết kế hoạt động trên một máy chủ được kết nối với thiết bị đích thông qua một số hình thức gỡ lỗi hoặc giao diện điều khiển - ví dụ: cổng JTAG hoặc SWD. Công cụ này hoạt động bằng cách đưa thông tin cung cấp vào RAM của thiết bị ở dạng được mã hóa đặc biệt. Sau đó, thiết bị được hướng dẫn khởi động lại, tại đó mã điểm được tích hợp trong phần sụn của thiết bị sẽ định vị dữ liệu được mã hóa, xác thực tính toàn vẹn của nó và ghi các giá trị được chứa vào bộ lưu trữ liên tục theo định dạng phù hợp với nền tảng.

Mã trên thiết bị phát hiện và xử lý dữ liệu cung cấp được tiêm được tích hợp vào Lớp thiết bị OpenWeave và có thể được bật trên mọi nền tảng được hỗ trợ. Sau khi được bật, mã sẽ tự động chạy mỗi khi thiết bị khởi động, tại một thời điểm sớm trong quá trình khởi tạo thiết bị. Mã này hoạt động bằng cách quét một vùng RAM dành riêng cho nền tảng. Trên các nền tảng có số lượng bộ nhớ khiêm tốn (ví dụ: <1M), quá trình quét bao gồm tất cả RAM có sẵn.

Khi được đặt trong RAM, dữ liệu cung cấp được mã hóa với tiền tố dễ nhận biết, cho phép tìm thấy nó nhanh chóng trong quá trình quét. Giá trị kiểm tra tính toàn vẹn dựa trên hàm băm mật mã được sử dụng để xác nhận tính hợp lệ của dữ liệu trước khi xử lý.

Theo mặc định, công cụ cung cấp chọn vị trí RAM để tiêm dữ liệu cung cấp dựa trên nền tảng thiết bị đích. Lựa chọn này có thể được ghi đè thông qua một đối số cho công cụ. Nói chung, không yêu cầu phần sụn thiết bị dành riêng một vị trí RAM để nhận dữ liệu cung cấp. Thông thường hơn, việc cung cấp dữ liệu được ghi vào vị trí RAM được phân bổ cho các mục đích khác, nhưng thường không được sử dụng sớm trong quá trình khởi động thiết bị. Các lựa chọn phổ biến là đầu của ngăn xếp hệ thống ban đầu hoặc cuối cùng của một vùng heap.

Công cụ cung cấp nhà máy dựa trên một bộ công cụ phát triển bên ngoài để giao tiếp với thiết bị đích. Các công cụ cụ thể được sử dụng phụ thuộc vào loại thiết bị đích. Hai giao diện thiết bị hiện đang được hỗ trợ:

  • đầu dò gỡ lỗi SEGGER J-Link được kết nối với cổng JTAG hoặc SWD của thiết bị
  • một cổng nối tiếp USB được kết nối với Espressif ESP32

Giao diện J-Link dựa trên công cụ SEGGER J-Link Commander (JLinkExe), phải được cài đặt riêng trên máy chủ.

Giao diện ESP32 dựa trên lệnh Espressif esptool.py, được cung cấp như một phần của SDK ESP-IDF của Espressif.

Các loại thông tin có thể được cung cấp

Công cụ cung cấp nhà máy OpenWeave có khả năng cung cấp các loại thông tin sau:

  • Số sê-ri thiết bị
  • Id thiết bị dệt được chỉ định của nhà sản xuất
  • Chứng chỉ dệt do nhà sản xuất giao và khóa riêng
  • Mã kết nối dệt
  • Số sửa đổi sản phẩm
  • Ngày sản xuất

Mặc dù nhìn chung một thiết bị sẽ cần tất cả các thông tin trên để hoạt động đúng, nhưng không bắt buộc phải cung cấp tất cả thông tin cùng một lúc. Do đó, việc cung cấp các loại thông tin khác nhau có thể xảy ra tại các điểm khác biệt trong quy trình sản xuất. Ngoài ra, có thể thay thế các giá trị được cung cấp trước đó bằng các giá trị mới trong bước cung cấp tiếp theo.

Nguồn cung cấp thông tin

Thông tin cung cấp thiết bị có thể được cung cấp cho Công cụ cung cấp nhà máy theo các cách sau:

  • Một đối số dòng lệnh
  • Sử dụng tệp CSV cung cấp
  • Bằng cách tìm nạp các giá trị từ máy chủ cung cấp Nest

Dòng lệnh

Ở dạng đơn giản nhất, thông tin cung cấp thiết bị được chỉ định trực tiếp trên dòng lệnh cho Công cụ cung cấp nhà máy OpenWeave. Ví dụ:

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

Các giá trị dữ liệu nhị phân, chẳng hạn như chứng chỉ Dệt và khóa riêng, có thể được chỉ định là chuỗi cơ sở 64 hoặc tên của các tệp chứa dữ liệu mong muốn ở dạng thô (nhị phân).

Xem bên dưới để biết danh sách đầy đủ các đối số dòng lệnh có sẵn.

Cung cấp tệp CSV

Để phù hợp với việc cung cấp hàng loạt thiết bị, Công cụ cung cấp nhà máy cũng có thể đọc dữ liệu cung cấp từ tệp dữ liệu cung cấp định dạng CSV. Các cột của tập tin này được kỳ vọng tương ứng với provisioning cụ thể các kiểu dữ liệu - có nghĩa là, Serial_Num , Certificate , Private_Key vv Hàng trong file cung cấp cho các giá trị cá nhân cho các thiết bị cụ thể, lập chỉ mục bởi id thiết bị Weave ( Device_Id ). Id của thiết bị cụ thể được cung cấp phải được chỉ định trên dòng lệnh. Ví dụ:

 ./weave-factory-prov-tool --target nrf52840 --device-id 18B4300000000001 \
    --prov-csv-file ./dev-provisioning-data.csv

Các cột CSV sau được hỗ trợ:

Tên định dạng Sự miêu tả
Device_Id 16 chữ số hex Thiết bị dệt id. Phải có mặt.
Serial_Num chuỗi Số sê-ri thiết bị.
Certificate chuỗi cơ sở 64 Nhà sản xuất chỉ định thiết bị dệt.
Private_Key chuỗi cơ sở 64 Nhà sản xuất được giao khóa riêng.
Pairing_Code chuỗi Dệt mã cặp.
Product_Rev số nguyên Số sửa đổi sản phẩm.
Mfg_Date YYYY / MM / DD Ngày sản xuất thiết bị.

Các cột có thể xuất hiện trong tệp CSV theo bất kỳ thứ tự nào. Tất cả các cột là tùy chọn, ngoại trừ Device_Id . Mọi giá trị không có trong tệp CSV chỉ đơn giản là không được cung cấp trên thiết bị.

Người dùng có thể chỉ định các giá trị cung cấp riêng lẻ trên dòng lệnh ngoài tệp CSV, trong trường hợp đó, giá trị dòng lệnh được ưu tiên hơn các giá trị trong tệp.

Hỗ trợ định dạng tệp CSV của Công cụ cấp phép nhà máy tương thích với đầu ra của lệnh gen-provisioning-data của công cụ weave .

Máy chủ cung cấp Nest

Công cụ cung cấp nhà máy hỗ trợ tìm nạp thông tin cung cấp chọn lọc từ máy chủ cung cấp Nest bằng giao thức dựa trên HTTPS. Giao thức máy chủ cung cấp có thể được sử dụng để lấy chứng chỉ thiết bị Dệt do nhà sản xuất gán, khóa riêng tương ứng và mã ghép nối từ máy chủ cung cấp.

Vị trí mạng của máy chủ cung cấp được chỉ định bằng cách cung cấp URL cơ sở trên dòng lệnh của công cụ cung cấp. Thông tin cung cấp mong muốn được chọn bằng cách chỉ định id thiết bị Dệt trên dòng lệnh. Ví dụ:

 ./weave-factory-prov-tool --target nrf52840 --device-id 18B4300000000001 \
    --prov-server https://192.168.172.2:8000/

Người dùng có thể chỉ định các giá trị cung cấp riêng lẻ trên dòng lệnh bên cạnh URL máy chủ cung cấp. Trong trường hợp này, các giá trị được cung cấp trên dòng lệnh sẽ được ưu tiên hơn các giá trị được máy chủ trả về.

Kích hoạt / vô hiệu hóa hỗ trợ cung cấp nhà máy

Hỗ trợ cho việc cung cấp nhà máy OpenWeave trong phần sụn thiết bị được kiểm soát bởi tùy chọn cấu hình thời gian biên dịch WEAVE_DEVICE_CONFIG_ENABLE_FACTORY_PROVISIONING . Tùy chọn này được bật theo mặc định. Tính năng này có thể bị vô hiệu hóa bằng cách ghi đè tùy chọn trong tệp WeaveProjectConfig.h của ứng dụng. Ví dụ:

#define WEAVE_DEVICE_CONFIG_ENABLE_FACTORY_PROVISIONING 0

Nói chung, an toàn khi cho phép cung cấp nhà máy trong phần sụn thiết bị sản xuất với điều kiện giao diện gỡ lỗi thiết bị bị vô hiệu hóa thích hợp trên các thiết bị sản xuất. Điều này có thể đạt được thông qua các phương tiện phần cứng (ví dụ: bằng cách thổi cầu chì trong SoC) hoặc trong phần mềm (ví dụ: thông qua bộ tải khởi động an toàn chặn truy cập gỡ lỗi như một phần của quy trình khởi động).

Chạy công cụ cung cấp nhà máy

Công cụ cung cấp nhà máy OpenWeave hỗ trợ các tùy chọn dòng lệnh sau:

Lựa chọn Sự miêu tả
--target <chuỗi> Loại thiết bị mục tiêu. Lựa chọn là: nrf52840 , Esp32
--load-addr <hex-chữ số> Địa chỉ trong bộ nhớ thiết bị mà tại đó dữ liệu cung cấp sẽ được ghi.
--verbose, -v Điều chỉnh mức độ chi tiết đầu ra. Sử dụng nhiều đối số để tăng tính dài dòng.
--serial-num <chuỗi> Đặt số sê-ri của thiết bị.
--device-id <hex-chữ số> Đặt id thiết bị do nhà sản xuất chỉ định.
--device-cert <cơ sở-64> | <tên tệp> Đặt chứng chỉ thiết bị Dệt do nhà sản xuất chỉ định.
--device-key <base-64> | <tên tệp> Đặt khóa riêng của thiết bị Dệt do nhà sản xuất gán.
- cặp mã <chuỗi> Đặt mã ghép nối thiết bị.
--product-rev <số nguyên> Đặt sửa đổi sản phẩm cho thiết bị.
--mfg-date <YYYY / MM / DD> | hôm nay | hiện nay Đặt ngày sản xuất của thiết bị.
--jlink-cmd <tên đường dẫn> Đường dẫn đến lệnh JLink. Mặc định là 'JLinkExe'.
--jlink-if SWD | JTAG Loại giao diện J-Link. Mặc định cho SWD.
--jlink-speed <số nguyên> | thích nghi | Tự động Tốc độ giao diện J-Link.
--jlink-sn <chuỗi> Số sê-ri đầu dò J-Link.
--esptool-cmd <tên đường dẫn> Đường dẫn đến lệnh esptool. Mặc định là 'esptool.py'.
--port <tên đường dẫn> Tên thiết bị cổng COM cho ESP32. Mặc định là / tty / USB0.
- tốc độ <số nguyên> Tốc độ truyền cho cổng COM. Mặc định là 115200.
--prov-csv-file <tên tệp> Đọc dữ liệu cung cấp thiết bị từ tệp CSV cung cấp.
--prov-server <url> Đọc dữ liệu cung cấp thiết bị từ một máy chủ cung cấp.
--disable-server-verify Khi sử dụng HTTPS, vô hiệu hóa xác nhận chứng chỉ do máy chủ cung cấp xuất trình.

Ví dụ

Lệnh sau đặt id thiết bị, số sê-ri, sửa đổi sản phẩm và mã ghép nối thành các giá trị cụ thể. Ngày sản xuất được đặt thành ngày hiện tại. Và chứng chỉ thiết bị và khóa riêng được đặt thành các giá trị kiểm tra được cung cấp trong tệp CSV được cung cấp cùng với kho lưu trữ nguồn openweave-core mở.

 ./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