ソフトウェア仕様

14.1. SWUpdate

14.1.1. SWUpdateとは

SWUpdateは、デバイス上で実行されるプログラムで、 ネットワーク/ストレージ経由でデバイスのソフトウェアを更新することができます。 Stefano Babic, DENX software engineering, Germany によってオープンソースで開発が進められています。

Armadillo-IoT ゲートウェイ A6Eでは、 SWUpdateを利用することで次のような機能を実現しています。

  • A/Bアップデート(アップデートの2面化)
  • リカバリーモード
  • ソフトウェアの圧縮、暗号化、署名付与
  • Web サーバー機能
  • hawkBit への対応
  • ダウングレードの禁止

14.1.2. swuパッケージ

swuパッケージは、SWUpdate独自のソフトウェアの配布フォーマットです。 SWUpdateでは、1回のアップデートは1つのswuパッケージで行われます。

swuパッケージには、次のような様々なものを含めることができます。

  • アップデート対象のイメージファイル
  • アップデート対象のイメージファイルのチェックサム
  • アップデート前後に実行するスクリプト
  • 書き込み先ストレージの情報
  • U-Boot 環境変数の書き換え情報
  • ソフトウェアのバージョン情報
  • etc…

14.1.3. A/Bアップデート(アップデートの2面化)

A/Bアップデートは、 Flash メモリにパーティションを2面確保し、 アップデート時には交互に利用する仕組みです。

常に使用していない方のパーティションを書き換えるため次の特徴を持ちます。(※以下で、○は長所、×は短所を意味します。)

  • ○ アップデートによって動作中のソフトウェアは破壊されない
  • ○ 書き込みが電源断などで中断後しても、すぐに復帰出来る
  • ○ 機器が動作中に書き込みが出来る
  • × 使用Flashメモリ量が増える

14.1.4. ロールバック(リカバリー)

システムが起動できなくなった際に、自動的にアップデート前のシステムにロールバックします。

ロールバック状態の確認は 「ロールバック状態の確認」 を参照してください。

ロールバックする条件は次の通りです:

  • rootfs にブートに必要なファイルが存在しない場合(/boot/Image, /boot/armadillo.dtb)
  • 3回起動を試して「bootcount」サービスが1度も起動できなかった場合は、次の起動時にロールバックします。

    bootcount 機能は uboot の「upgrade_available」変数で管理されています。 bootcount 機能を利用しないようにするには、「u-boot の環境変数の設定」 を参照して変数を消します。

  • ユーザーのスクリプトなどから、「abos-ctrl rollback」コマンドを実行した場合。

ロールバックが実行されると /var/at-log/atlog にログが残ります。

14.2. hawkBit

14.2.1. hawkBitとは

hawkBitは、サーバー上で実行されるプログラムで、 ネットワーク経由でデバイスのソフトウェアを更新(配信)することができます。

hawkBitは次のような機能を持っています。

  • ソフトウェアの管理
  • デバイスの管理

    • デバイス認証 (セキュリティトークン、証明書)
    • デバイスのグループ化
  • アップデート処理の管理

    • 進捗のモニタリング
    • スケジューリング、強制アップデート
  • RESTful APIでの直接操作

14.2.2. データ構造

hawkBitは、配信するソフトウェアを次のデータ構造で管理します。

images/hawkBit_data_structure.png

図14.1 hawkBitが扱うソフトウェアのデータ構造