OpenWeave Fabrika Hazırlama Aracı

Kaynağı GitHub'da görüntüleyin

OpenWeave Fabrika Temel Hazırlama Aracı, Weave özellikli cihazlara kalıcı, cihaz başına yapılandırma bilgileri sağlamak için kullanışlı bir yöntem sunar. Fabrika Hazırlama Aracı, müşterilere gönderilmeden önce her cihazı benzersiz kimlik ve kimlik bilgisiyle damgalayan bir üretim hattı sürecinin parçası olarak kullanılmak üzere tasarlanmıştır. Geliştiriciler tarafından, geliştirme sürecinde kullanılan ön üretim donanımlarını kişiselleştirmek için de kullanılabilir.

İşlem teorisi

OpenWeave Fabrika Hazırlama Aracı'nın amacı, belirli yapılandırma bilgilerini cihazın kalıcı yapılandırma deposuna yerleştirmektir. Bu bilgiler, cihaz donanım yazılımı tarafından çalışma zamanında alınıp kullanılabilir. Kalıcı cihaz yapılandırması genellikle cihazın dahili flaşının içinde depolanır. Ancak verilerin tam olarak nasıl ve hangi biçimde depolandığına dair ayrıntılar platformdan platforma değişiklik gösterir. Fabrika Temel Hazırlığı Aracı son depolama biçiminden bağımsızdır ve verileri doğru şekilde yazmak için cihazın donanım yazılımındaki koda dayanır. Aracı kullanıcı arayüzü de büyük ölçüde yapılandırılan donanım türünden bağımsızdır. Bu sayede, farklı donanım platformlarına dayalı ürün hatlarında benzer üretim süreçleri kullanılabilir.

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

Enjekte edilen temel hazırlama verilerini algılayan ve işleyen cihaz üzerinde kod, OpenWeave Cihaz Katmanı'na yerleşiktir ve desteklenen tüm platformlarda etkinleştirilebilir. Etkinleştirildikten sonra kod, cihaz her başlatıldığında cihazın ilk başlatılma işleminin bir noktasında otomatik olarak çalışır. Kod, RAM'in platforma özel bir bölgesini tarayarak çalışır. Az miktarda bellek içeren platformlarda (ör. 1 milyondan az) tarama işlemi, mevcut RAM'in tamamını kapsar.

Temel hazırlık verileri RAM'e yerleştirildiğinde kolayca tanımlanabilen bir ön ek ile kodlanır. Bu, tarama işlemi sırasında hızlı bir şekilde bulunmasını sağlar. İşlenmeden önce verilerin geçerliliğini onaylamak için kriptografik karmaya dayalı bir bütünlük denetimi değeri kullanılır.

Temin etme aracı, varsayılan olarak hedef cihaz platformuna göre temel hazırlama verilerinin ekleneceği RAM konumunu seçer. Bu seçim, araca yapılan bir bağımsız değişkenle geçersiz kılınabilir. Genel olarak, cihaz donanım yazılımının özellikle temel hazırlama verilerini almak için bir RAM konumu ayırması gerekmez. Daha yaygın olarak, temel hazırlama verileri başka amaçlar için ayrılmış ancak genellikle cihazın önyükleme işleminin başlarında kullanılmayan bir RAM konumuna yazılır. Yaygın seçimler, ilk sistem yığınının üst kısmı veya bir yığın alanının en ucudur.

Fabrika Temel Hazırlama 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 göre değişir. Şu anda iki cihaz arayüzü desteklenmektedir:

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

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

ESP32 arayüzü, Espressif'in ESP-IDF SDK'sı kapsamında sağlanan Espressif esptool.py komutunu kullanır.

Hazırlanılabilecek bilgi türleri

OpenWeave Fabrika Hazırlama Aracı aşağıdaki bilgi türlerini sağlayabilir:

  • 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

Genellikle bir cihazın düzgün çalışması için yukarıdaki bilgilerin tümüne ihtiyacı olsa da tüm bilgilerin aynı anda sağlanmasına gerek yoktur. Bu nedenle, farklı bilgi türleri üretim sürecinin farklı noktalarında sağlanabilir. Ayrıca, sonraki bir temel hazırlama adımında daha önce temel hazırlığı yapılan değerleri yeni değerlerle değiştirmek mümkündür.

Temel hazırlık bilgilerinin kaynakları

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

  • Komut satırı bağımsız değişkenleri
  • Temin CSV dosyası kullanma
  • Nest temel hazırlık sunucusundan değer alarak

Komut satırı

En basit biçimde, cihaz temel hazırlığı bilgileri doğrudan OpenWeave Fabrika Temel Hazırlama Aracı'nın 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, base-64 dizeleri veya istenen verileri ham (ikili) biçimde içeren 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ı sağlama

Fabrika Hazırlama Aracı, cihazların toplu olarak hazırlanmasını sağlamak için CSV biçimli bir hazırlık veri dosyasından da hazırlık verilerini okuyabilir. Bu dosyanın sütunlarının belirli temel hazırlama veri türlerine (ör. Serial_Num, Certificate, Private_Key vb.) karşılık gelmesi beklenir. Dosyadaki satırlar, belirli cihazlar için Weave cihaz kimliğine (Device_Id) göre dizine eklenen ayrı değerler sağlar. Temel hazırlama yapılacak 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çimi Açıklama
Device_Id 16 onaltılık basamak Örgü cihaz kimliği. Mevcut olmalıdır.
Serial_Num dize Cihaz seri numarası.
Certificate base-64 dizesi Üretici tarafından atanan Weave cihaz sertifikası.
Private_Key base-64 dizesi Üretici tarafından atanan Weave özel anahtarı.
Pairing_Code dize Ö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 bulunmayan değerlerin cihazda temel hazırlığı yapılmaz.

Kullanıcı, CSV dosyasına ek olarak komut satırında ayrı temel hazırlama değerleri belirtebilir. Bu durumda, komut satırı değeri dosyadaki değerlere göre öncelikli olur.

Fabrika Hazırlama Aracı tarafından desteklenen CSV dosya biçimi, weave aracının gen-provisioning-data komutunun çıkışıyla uyumludur.

Nest temel hazırlama sunucusu

Fabrika Hazırlama Aracı, HTTPS tabanlı bir protokol kullanarak Nest hazırlık sunucusundan belirli hazırlık bilgilerinin getirilmesini destekler. Hazırlama sunucusu protokolü, üretici tarafından atanan Weave cihaz sertifikasını, ilgili özel anahtarı ve Weave eşleme kodunu hazırlama sunucusundan almak için kullanılabilir.

Temel hazırlık sunucusunun ağ konumu, temel hazırlık aracı komut satırında bir temel URL sağlanarak belirlenir. Komut satırında Weave cihaz kimliği belirtilerek istenen temel hazırlama bilgileri 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ırlama sunucusu URL'sine ek olarak komut satırında ayrı temel hazırlama değerleri belirtebilir. Bu durumda, komut satırında verilen değerler sunucu tarafından döndürülen değerlere göre öncelikli olur.

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 etkindir. Özellik, uygulamanın WeaveProjectConfig.h dosyasında seçenek geçersiz kılınarak devre dışı bırakılabilir. Örneğin:

#define WEAVE_DEVICE_CONFIG_ENABLE_FACTORY_PROVISIONING 0

Genel olarak, cihaz hata ayıklama arayüzünün üretim cihazlarında uygun şekilde devre dışı bırakılmış olması koşuluyla, üretim cihazının donanım yazılımında fabrika temel hazırlığını etkinleştirmek genellikle güvenlidir. Bu işlem, donanım (ör. SoC'deki sigortaların patlatılması) veya yazılım (ör. önyükleme işleminin bir parçası olarak hata ayıklama erişimini engelleyen güvenli bir önyükleme yükleyici) aracılığıyla gerçekleştirilebilir.

Fabrika Temel Hazırlama Aracı'nı çalıştırma

OpenWeave Fabrika Hazırlama Aracı aşağıdaki komut satırı seçeneklerini destekler:

Option Açıklama
--target <string> Hedef cihaz türü. Seçenekler şunlardır: nrf52840, esp32
--load-addr <hex- kategoris> Cihaz belleğinde, temel hazırlama verilerinin yazılacağı adres.
--verbose, -v Çıktı 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-sayılar> Üretici tarafından atanan cihaz kimliğini ayarlayın.
--device-cert <base-64> | <file-name> Üretici tarafından atanan Weave cihaz sertifikasını ayarlayın.
--device-key <base-64> | <file-name> Ü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" değerine ayarlanır.
--jlink-if SWD | JTAG J-Link arayüz türü. Varsayılan olarak SWD'dir.
--jlink-speed <integer> | adaptive | auto J-Link arayüz hızı.
--jlink-sn <string> J-Link probe seri numarası.
--esptool-cmd <path-name> esptool komutunun yolu. Varsayılan olarak "esptool.py" kullanılır.
--port <path-name> ESP32 için COM bağlantı noktası cihaz adı. Varsayılan değer /tty/USB0'dır.
--speed <integer> COM bağlantı noktası için veri aktarım hızı. Varsayılan olarak 115200 değerine ayarlanır.
--prov-csv-file <dosya-adı> Cihaz sağlama verilerini bir sağlama CSV dosyasından okuma.
--prov-server <url> Temel hazırlık sunucusundan cihaz temel hazırlığı 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 birlikte sağlanan bir CSV dosyasında verilen test değerlerine 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