Lihat sumber di GitHub |
Alat Penyediaan Pabrik OpenWeave memberikan cara praktis untuk menyediakan informasi konfigurasi persisten per perangkat ke perangkat yang mendukung Weave. Alat Penyediaan Pabrik dimaksudkan untuk digunakan sebagai bagian dari proses lini manufaktur yang memberi stempel pada setiap perangkat dengan informasi identitas dan kredensial unik sebelum dikirimkan kepada pelanggan. Fitur ini juga dapat digunakan oleh developer untuk mempersonalisasi hardware praproduksi yang digunakan selama proses pengembangan.
Teori operasi
Tujuan dari Alat Penyediaan Pabrik OpenWeave adalah memasukkan informasi konfigurasi tertentu ke dalam penyimpanan konfigurasi persisten perangkat, tempat informasi tersebut dapat diambil dan digunakan pada saat runtime oleh firmware perangkat. Konfigurasi perangkat persisten biasanya disimpan dalam flash internal perangkat, meskipun detail tentang cara persis data tersebut disimpan dan dalam format apa, bervariasi dari platform ke platform. Alat Penyediaan Pabrik itu sendiri tidak bergantung pada format penyimpanan akhir, dan mengandalkan kode dalam firmware perangkat untuk menulis data dengan cara yang benar. Antarmuka pengguna alat ini juga sebagian besar tidak bergantung pada jenis hardware yang dikonfigurasi, artinya proses manufaktur serupa dapat digunakan di seluruh lini produk yang didasarkan pada platform hardware yang berbeda.
Alat Penyediaan Pabrik didesain agar berfungsi pada mesin host yang terhubung ke perangkat target melalui antarmuka antarmuka kontrol atau debug tertentu - misalnya, port JTAG atau SWD. Alat ini berfungsi dengan memasukkan informasi penyediaan ke dalam RAM perangkat dalam bentuk yang dienkode secara khusus. Perangkat kemudian diinstruksikan untuk memulai ulang, dan kode bawaan untuk firmware perangkat akan mencari data yang dienkode, memvalidasi integritasnya, dan menulis nilai yang dimuat ke dalam penyimpanan persisten dalam format yang sesuai untuk platform.
Kode di perangkat yang mendeteksi dan memproses data penyediaan yang dimasukkan disertakan dalam Lapisan Perangkat OpenWeave, dan dapat diaktifkan di platform yang didukung. Setelah diaktifkan, kode akan berjalan secara otomatis setiap kali perangkat melakukan booting, pada titik awal proses inisialisasi perangkat. Kode ini beroperasi dengan memindai region khusus platform RAM. Pada platform dengan pemasangan memori sederhana (misalnya, <1M), pemindaian mencakup semua RAM yang tersedia.
Jika ditempatkan di RAM, data penyediaan dienkode dengan awalan yang mudah diidentifikasi, sehingga dapat ditemukan dengan cepat selama proses pemindaian. Nilai pemeriksaan integritas berdasarkan hash kriptografi digunakan untuk mengonfirmasi validitas data sebelum pemrosesan.
Secara default, fitur penyediaan memilih lokasi RAM untuk memasukkan data penyediaan berdasarkan platform perangkat target. Pilihan ini dapat diganti melalui argumen ke alat. Secara umum, firmware perangkat tidak diperlukan untuk mencadangkan lokasi RAM terutama untuk menerima data penyediaan. Biasanya, penyediaan data ditulis ke lokasi RAM yang dialokasikan untuk tujuan lain, tetapi umumnya tidak digunakan lebih awal dalam proses booting perangkat. Pilihan umum adalah bagian atas stack sistem awal, atau ujung arena arena yang paling jauh.
Fitur Penyediaan Pabrik bergantung pada serangkaian alat pengembangan eksternal untuk berinteraksi dengan perangkat target. Alat tertentu yang digunakan bergantung pada jenis perangkat target. Dua antarmuka perangkat saat ini didukung:
- probe debug JGG Link SEGGER terhubung ke port JTAG atau SWD perangkat
- port serial USB yang terhubung ke Espressif ESP32
Antarmuka J-Link bergantung pada alat SEGGER J-Link Commander (JLinkExe), yang harus diinstal secara terpisah di mesin host.
Antarmuka ESP32 bergantung pada perintah esptool.py Espressif, yang disediakan sebagai bagian dari SDK ESP-IDF ESpressif.
Jenis informasi yang dapat disediakan
Alat Penyediaan Pabrik OpenWeave mampu menyediakan jenis informasi berikut:
- Nomor seri perangkat
- ID perangkat Weave yang ditetapkan produsen
- Sertifikat Weave dan kunci pribadi yang ditetapkan produsen
- Kode penyambungan tenun
- Nomor revisi produk
- Tanggal produksi
Meskipun secara umum perangkat akan memerlukan semua informasi di atas agar dapat beroperasi dengan benar, tetapi tidak diperlukan untuk memberikan semua informasi secara bersamaan. Dengan demikian, penyediaan berbagai jenis informasi dapat terjadi pada titik yang berbeda dalam proses manufaktur. Selain itu, Anda dapat mengganti nilai yang disediakan sebelumnya dengan nilai baru di langkah penyediaan berikutnya.
Sumber informasi penyediaan
Informasi penyediaan perangkat dapat diberikan ke Alat Penyediaan Pabrik dengan cara berikut:
- Argumen command line
- Menggunakan file CSV penyediaan
- Dengan mengambil nilai dari server penyediaan Nest
Command line
Dalam bentuk yang paling sederhana, informasi penyediaan perangkat ditentukan secara langsung pada baris perintah ke OpenWeave Factory Provisioning Tool. Misalnya:
./weave-factory-prov-tool --target nrf52840 --device-id 18B4300000000001 \
--pairing-code NESTUS --mfg-date 2019/04/01
Nilai data biner, seperti sertifikat Weave dan kunci pribadi, dapat ditentukan sebagai string base-64, atau sebagai nama file yang berisi data yang diinginkan dalam bentuk mentah (biner).
Lihat di bawah untuk daftar lengkap argumen command line yang tersedia.
File CSV penyediaan
Untuk mengakomodasi penyediaan massal perangkat, Alat Penyediaan Pabrik juga dapat membaca data penyediaan dari file data penyediaan berformat CSV. Kolom file ini diharapkan sesuai dengan jenis data penyediaan tertentu - yaitu, Serial_Num
, Certificate
, Private_Key
, dll.
Baris dalam file memberikan nilai masing-masing untuk perangkat tertentu, diindeks oleh ID perangkat Weave (Device_Id
). ID perangkat tertentu yang akan disediakan harus ditentukan pada command line. Misalnya:
./weave-factory-prov-tool --target nrf52840 --device-id 18B4300000000001 \
--prov-csv-file ./dev-provisioning-data.csv
Kolom CSV berikut ini didukung:
Name | Format | Deskripsi |
---|---|---|
Device_Id |
16 digit heksadesimal | ID perangkat tenun. Harus ada. |
Serial_Num |
string | Nomor seri perangkat. |
Certificate |
string base-64 | Sertifikat perangkat Weave yang ditetapkan produsen. |
Private_Key |
string base-64 | Kunci pribadi Weave yang ditetapkan produsen. |
Pairing_Code |
string | Menenun kode penyambungan. |
Product_Rev |
bilangan bulat | Nomor revisi produk. |
Mfg_Date |
HH/BB/HH | Tanggal pembuatan perangkat. |
Kolom dapat muncul di file CSV dalam urutan apa pun. Semua kolom bersifat opsional, kecuali Device_Id
. Setiap nilai yang tidak ada dalam file CSV tidak disediakan di perangkat.
Pengguna dapat menentukan nilai penyediaan individual pada command line selain file CSV, dalam hal ini nilai command line lebih diutamakan daripada nilai yang ada dalam file.
Dukungan format file CSV oleh Alat Penyediaan Pabrik kompatibel dengan output perintah gen-provisioning-data
alat weave
.
Server penyediaan Nest
Alat Penyediaan Pabrik mendukung pengambilan informasi penyediaan tertentu dari server penyediaan Nest menggunakan protokol berbasis HTTPS. Protokol server penyediaan dapat digunakan untuk mengambil sertifikat perangkat Weave yang ditetapkan Produsen, kunci pribadi yang sesuai, dan kode penyambungan Weave dari server penyediaan.
Lokasi jaringan server penyediaan ditentukan dengan menyediakan URL dasar di command line alat penyediaan. Informasi penyediaan yang diinginkan dipilih dengan menentukan ID perangkat Weave pada command line. Misalnya:
./weave-factory-prov-tool --target nrf52840 --device-id 18B4300000000001 \
--prov-server https://192.168.172.2:8000/
Pengguna dapat menentukan nilai penyediaan individual pada command line selain URL server penyediaan. Dalam hal ini, nilai yang diberikan pada command line lebih diutamakan daripada nilai yang ditampilkan oleh server.
Mengaktifkan / menonaktifkan dukungan penyediaan pabrik
Dukungan untuk penyediaan factory OpenWeave di firmware perangkat dikontrol oleh opsi konfigurasi
waktu kompilasi WEAVE_DEVICE_CONFIG_ENABLE_FACTORY_PROVISIONING
. Opsi ini diaktifkan secara default. Fitur ini dapat dinonaktifkan dengan mengganti opsi dalam file
WeaveProjectConfig.h
aplikasi. Misalnya:
#define WEAVE_DEVICE_CONFIG_ENABLE_FACTORY_PROVISIONING 0
Secara umum, aman untuk mengaktifkan penyediaan factory di firmware perangkat produksi selama antarmuka debug perangkat dinonaktifkan dengan benar di perangkat produksi. Hal ini dapat dilakukan melalui cara hardware (misalnya, dengan meniup sekring di SoC), atau di software (misalnya, melalui loader boot aman yang memblokir akses debug sebagai bagian dari proses booting).
Menjalankan Alat Penyediaan Pabrik
Alat Penyediaan Pabrik OpenWeave mendukung opsi command line berikut:
Opsi | Deskripsi |
---|---|
--target <string> | Jenis perangkat target. Pilihannya adalah: nrf52840, esp32 |
--load-addr <hex-digits> | Alamat dalam memori perangkat tempat data penyediaan akan ditulis. |
--verbose, -v | Menyesuaikan tingkat verbositas output. Menggunakan beberapa argumen untuk meningkatkan panjang. |
--serial-num <string> | Setel nomor seri perangkat. |
--device-id <hex-digits> | Menyetel ID perangkat yang ditetapkan oleh produsen. |
--device-cert <base-64> | <file-name> | Menyetel sertifikat perangkat Weave yang ditetapkan produsen. |
--key-key <base-64> | <file-name> | Menyetel kunci pribadi perangkat Weave yang ditetapkan oleh produsen. |
--kode-pasangan <string> | Menyetel kode penyambungan perangkat. |
--product-rev <integer> | Tetapkan revisi produk untuk perangkat. |
--mfg-tanggal <YYYY/MM/DD> | hari ini | sekarang | Setel tanggal pembuatan perangkat. |
--jlink-cmd <nama-jalur> | Jalur ke perintah JLink. Default-nya adalah 'JLinkExe'. |
--jlink-if SWD | JTAG | Jenis antarmuka J-Link. Default-nya adalah SWD. |
--jlink-kecepatan <integer> | adaptif | otomatis | Kecepatan antarmuka J-Link. |
--jlink-sn <string> | Nomor seri probe J-Link. |
--esptool-cmd <path-name> | Jalur ke perintah esptool. Default-nya adalah 'esptool.py'. |
--port <path-name> | Nama perangkat port COM untuk ESP32. Setelan defaultnya adalah /tty/USB0. |
--speed <integer> | Baud rate untuk port COM. Default-nya adalah 115200. |
--prov-csv-file <file-name> | Membaca data penyediaan perangkat dari file CSV penyediaan. |
--prov-server <url> | Membaca data penyediaan perangkat dari server penyediaan. |
--disable-server-validasi | Saat menggunakan HTTPS, nonaktifkan validasi sertifikat yang diberikan oleh server penyediaan. |
Contoh
Perintah berikut menetapkan ID perangkat, nomor seri, revisi produk, dan kode penghubung ke nilai tertentu. Tanggal
manufaktur ditetapkan ke tanggal saat ini. Selain itu, sertifikat perangkat dan kunci pribadi disetel untuk menguji nilai yang diberikan dalam file CSV yang disediakan bersama
repositori sumber 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