OpenWeave Fabrika Temel Hazırlık Aracı

Kaynağı GitHub'da göster

OpenWeave Fabrika Temel Hazırlık Aracı, Weave özellikli cihazlara kalıcı, cihaz başına yapılandırma bilgileri sağlamak için kolay bir yol sağlar. Fabrika Temel Hazırlık Aracı, müşterilere gönderimden önce benzersiz kimlik ve kimlik bilgileri ile damgalayan üretim hattı sürecinin bir parçası olarak kullanılmak üzere tasarlanmıştır. Ayrıca geliştiriciler, geliştirme sürecinde kullanılan üretim öncesi donanımları kişiselleştirmek için kullanılabilir.

Çalışma teorisi

OpenWeave Factory Provisioning Tool'un amacı, belirli yapılandırma bilgilerini bir cihazın kalıcı yapılandırma deposuna yerleştirmektir. Böylece cihaz, çalışma zamanında cihaz donanım yazılımı tarafından alınıp kullanılabilir. Kalıcı cihaz yapılandırması genellikle cihazın dahili flaşında depolanır. Bununla birlikte, verilerin tam olarak nasıl ve hangi biçimde depolandığı konusundaki ayrıntılar platformdan platforma farklılık gösterir. Fabrika Temel Hazırlık Aracı'nın kendisi, nihai depolama biçiminden bağımsızdır ve verileri doğru şekilde yazmak için cihazın donanım yazılımındaki koddan yararlanır. Ayrıca aracın kullanıcı arayüzü, yapılandırılan donanım türünden büyük ölçüde bağımsızdır. Bu nedenle, farklı üretim platformlarına dayalı ürün serilerinde benzer üretim süreçleri kullanılabilir.

Fabrika Temel Hazırlık Aracı, bir tür hata ayıklama veya kontrol arayüzü (ör. bir JTAG veya SWD bağlantı noktası) üzerinden hedef cihaza bağlı olan bir ana makinede çalışacak şekilde tasarlanmıştır. Araç, özel olarak kodlanmış bir biçimde cihazın RAM'ine temel hazırlık bilgileri alarak çalışır. Ardından cihaz yeniden başlatılacak şekilde ayarlanır. Bu noktada, cihazın donanım yazılımında yerleşik olan kod, kodlanmış verileri bulur, bütünlüğünü doğrular ve içerdiği değerleri, platforma uygun bir biçimde kalıcı depolama alanına yazar.

Yerleştirilen temel hazırlık verilerini algılayıp işleyen cihaz kodu, OpenWeave Cihaz Katmanında yerleşiktir ve desteklenen herhangi bir platformda etkinleştirilebilir. Etkinleştirildiğinde kod, cihaz her başlatıldığında, cihaz başlatma sürecinin erken bir noktasında otomatik olarak çalışır. Kod, platforma özgü RAM bölgesini tarayarak çalışır. Tarama, bellek kapasitesi az olan platformlar (ör. <1M) içeren platformlarda kullanılabilir tüm RAM'i kapsar.

RAM'e yerleştirildiğinde, temel hazırlık verileri kolayca taranabilir bir ön ek ile kodlanır. Böylece tarama işlemi sırasında hızlıca bulunabilir. Verilerin işlenmesinden önce verilerin geçerliliğini onaylamak için kriptografik bir karmaya dayalı bütünlük kontrolü değeri kullanılır.

Temel hazırlık aracı, varsayılan olarak, hedef cihaz platformuna göre temel hazırlık verilerinin ekleneceği RAM konumunu seçer. Bu seçim, araca yapılan bir bağımsız değişken aracılığıyla geçersiz kılınabilir. Genel olarak, cihaz donanım yazılımının özellikle temel hazırlık verileri almak için RAM konumu ayırması gerekmez. Daha basit bir şekilde belirtmek gerekirse temel hazırlık verileri, başka amaçlar için ayrılan bir RAM konumuna yazılır ancak genellikle cihaz başlatma işleminin başında kullanılmaz. Yaygın seçimler, ilk sistem yığınının en üstünde veya bir yığın arenanın en ucundadır.

Fabrika Temel Hazırlık Aracı, hedef cihazla arayüz oluşturmak için bir dizi harici geliştirme aracı kullanır. Kullanılan belirli araçlar, hedef cihazın türüne bağlıdır. Şu anda iki cihaz arayüzü desteklenmektedir:

  • Bir cihazın JTAG veya SWD bağlantı noktasına bağlı SEGGER J-Link hata ayıklama Sondası
  • Espressif ESP32'ye bağlı USB seri bağlantı noktası

J-Link arayüzü, ana makineye ayrı olarak yüklenmesi gereken SEGGER J-Link Commander aracını (JLinkExe) temel almaktadır.

ESP32 arayüzü, Espressif's ESP-IDF SDK'sının bir parçası olarak sağlanan Espressif esptool.py komutunu kullanır.

Temel hazırlığı yapılabilecek bilgi türleri

OpenWeave Factory Provisioning Tool, aşağıdaki bilgi türlerinin temel hazırlığını yapabilir:

  • Cihazın seri numarası
  • Üretici tarafından atanan Weave cihaz kimliği
  • Üretici tarafından atanan Weave sertifikası ve özel anahtar
  • Örgü eşleme kodu
  • Ürün düzeltme numarası
  • Üretim tarihi

Bir cihazın düzgün bir şekilde çalışması için yukarıdaki bilgilerin tümüne genellikle ihtiyaç duyulsa da, tüm bilgilerin aynı anda sağlanması gerekmez. Bu nedenle, üretim sürecinin farklı noktalarında farklı bilgi türlerinin sağlanması söz konusu olabilir. Buna ek olarak, daha önce temel hazırlığı yapılan bir adımda daha önce temel hazırlığı yapılan değerleri yeni değerlerle değiştirebilirsiniz.

Temel hazırlık bilgisi kaynakları

Cihaz temel hazırlık bilgileri, Fabrika Temel Hazırlığı Aracı'na aşağıdaki şekillerde sağlanabilir:

  • Komut satırı bağımsız değişkenleri
  • Temel hazırlık CSV dosyası kullanma
  • Bir Nest temel hazırlık sunucusundan değerler getirerek

Komut satırı

En basit biçimde, cihaz temel hazırlık bilgileri doğrudan OpenWeave Factory Provisioning Tool'un komut satırında belirtilir. Örneğin:

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

Weave sertifikası ve özel anahtar gibi ikili veri değerleri, base66 dizeleri olarak veya istenen verileri ham (ikili) biçimde sunan dosyaların adları olarak belirtilebilir.

Kullanılabilir komut satırı bağımsız değişkenlerinin tam listesi için aşağıya bakın.

CSV dosyasının temel hazırlığı yapılıyor

Fabrika Temel Hazırlık Aracı, cihazların temel hazırlığını toplu olarak kullanmak için CSV biçimindeki temel hazırlık veri dosyasından da veri okuyabilir. Bu dosyanın sütunlarının, belirli bir temel hazırlık verisi türüne (yani Serial_Num, Certificate, Private_Key vb.) karşılık gelmesi beklenir. Dosyadaki satırlar, Weave cihaz kimliği (Device_Id) tarafından dizine eklenen belirli cihazlar için ayrı değerler sağlar. Temel hazırlığı yapılacak belirli cihazın kimliği komut satırında belirtilmelidir. Örneğin:

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

Aşağıdaki CSV sütunları desteklenir:

Ad Biçim Açıklama
Device_Id 16 onaltılık basamak Örgü cihaz kimliği. Mevcut olmalıdır.
Serial_Num string Cihaz seri numarası.
Certificate base64 dizesi Üretici tarafından atanan Weave cihaz sertifikası.
Private_Key base64 dizesi Üretici tarafından atanan Weave özel anahtarı.
Pairing_Code string Örgü eşleme kodu.
Product_Rev tam sayı Ürün düzeltme numarası.
Mfg_Date YYYY/AA/GG Cihaz üretim tarihi.

Sütunlar, CSV dosyasında herhangi bir sırada görünebilir. Device_Id hariç tüm sütunlar isteğe bağlıdır. CSV dosyasında olmayan değerler, cihazda sağlanmaz.

Kullanıcı, CSV dosyasına ek olarak komut satırında tek tek temel hazırlık değerleri belirtebilir. Bu durumda, komut satırı değeri dosyadakilere göre önceliklidir.

Fabrika Temel Hazırlık Aracı tarafından sağlanan CSV dosya biçimi desteği, weave aracının gen-provisioning-data komutunun çıktısıyla uyumludur.

Nest temel hazırlık sunucusu

Fabrika Temel Hazırlık Aracı, HTTPS tabanlı bir protokol kullanarak Nest temel hazırlığı sunucusundan belirli temel hazırlık bilgilerini almayı destekler. Temel hazırlık sunucusu protokolü, Üretici tarafından atanan Weave cihaz sertifikasını, ilgili özel anahtarı ve temel hazırlık sunucusundaki Weave eşleme kodunu getirmek için kullanılabilir.

Temel hazırlık aracının komut satırında temel URL sağlanarak temel hazırlık sunucusunun ağ konumu belirtilir. Gerekli temel hazırlık bilgileri, komut satırında Weave cihaz kimliği belirtilerek seçilir. Örneğin:

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

Kullanıcı, temel hazırlık sunucusu URL'sine ek olarak komut satırında tek tek temel hazırlık değerleri belirtebilir. Bu durumda, komut satırında verilen değerler, sunucu tarafından döndürülen değerlere göre önceliklidir.

Fabrika temel hazırlık desteğini etkinleştirme / devre dışı bırakma

Cihaz donanım yazılımında OpenWeave fabrika temel hazırlığı desteği WEAVE_DEVICE_CONFIG_ENABLE_FACTORY_PROVISIONING derleme zamanı yapılandırma seçeneği tarafından kontrol edilir. Bu seçenek varsayılan olarak etkinleştirilir. Bu özellik, WeaveProjectConfig.h adlı dosyadaki seçeneği geçersiz kılarak devre dışı bırakılabilir. Örneğin:

#define WEAVE_DEVICE_CONFIG_ENABLE_FACTORY_PROVISIONING 0

Genellikle, cihaz üretim hata ayıklama arayüzünün üretim cihazlarında uygun şekilde devre dışı bırakılması koşuluyla, üretim cihazı donanım yazılımında fabrika temel hazırlığını etkinleştirmek güvenlidir. Bunu, donanım araçlarıyla (örneğin, SoC'deki sigortaların üflenmesi) veya yazılımla (örneğin, başlatma işleminin bir parçası olarak hata ayıklama erişimini engelleyen güvenli bir önyükleyici) kullanarak gerçekleştirebilirsiniz.

Fabrika Temel Hazırlık Aracını Çalıştırma

OpenWeave Factory Provisioning Tool, aşağıdaki komut satırı seçeneklerini destekler:

Seçenek Açıklama
--target <string> Hedef cihaz türü. Seçenekler: nrf52840, esp32
--load-addr <onaltılık basamaklar> Temel hazırlık verilerinin yazılacağı cihaz belleğindeki adres.
--ayrıntılı, -v Çıkış ayrıntı düzeyini ayarlayın. Ayrıntı düzeyini artırmak için birden fazla bağımsız değişken kullanın.
--serial-num <string> Cihazın seri numarasını ayarlayın.
--device-id <onaltılık basamaklar> Üretici tarafından atanan cihaz kimliğini belirtin.
--device-cert <base-64> | <dosya-adı> Üretici tarafından atanan Weave cihaz sertifikasını belirleyin.
--device-key <base-64> | <dosya-adı> Üretici tarafından atanan Weave cihaz özel anahtarını ayarlayın.
--pairing-code <string> Cihaz eşleme kodunu ayarlayın.
--product-rev <integer> Cihaz için ürün düzeltmesini ayarlayın.
--mfg-date <YYYY/AA/GG> | bugün | şimdi Cihazın üretim tarihini ayarlayın.
--jlink-cmd <yol-adı> JLink komutu yolu. Varsayılan olarak 'JLinkExe' şeklinde ayarlanır.
--jlink-if SWD | JTAG J-Link arayüz türü. Varsayılan olarak SWD kullanılır.
--jlink-speed <integer> | uyarlanabilir | auto J-Link arayüz hızı.
--jlink-sn <string> J-Link yoklama seri numarası.
--esptool-cmd <path-name> esptool komutu yolu. Varsayılan olarak 'esptool.py' değerine ayarlanır.
--port <path-name> ESP32 için COM bağlantı noktası cihaz adı. Varsayılan olarak /tty/USB0 değerine ayarlanır.
--hızlı <tamsayı> COM bağlantı noktası için ses hızı. Varsayılan olarak 115.200 değerine ayarlanır.
--prov-csv-file <dosya-adı> Temel hazırlık CSV dosyasından cihaz temel hazırlık verilerini okuma.
--prov-server <url> Bir temel hazırlık sunucusundan cihaz temel hazırlık verilerini okuma.
--disable-server-validation HTTPS kullanırken, temel hazırlık sunucusu tarafından sunulan sertifikanın doğrulamasını devre dışı bırakın.

Örnekler

Aşağıdaki komut; cihaz kimliğini, seri numarasını, ürün düzeltmesini ve eşleme kodunu belirli değerlere ayarlar. Üretim tarihi geçerli tarihe ayarlanır. Cihaz sertifikası ve özel anahtar, openweave-core kaynak deposuyla sağlanan bir CSV dosyasında verilen değerleri test edecek şekilde ayarlanır.

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