第4章 Armadillo ソフトウェア仕様

4.1. メモリマップ

Armadillo-IoT のQSPIフラッシュメモリのメモリマップを表4.1「QSPIフラッシュメモリ メモリマップ」に示します。

表4.1 QSPIフラッシュメモリ メモリマップ

物理アドレスサイズ説明

0x00000000

0x001003FF

約 1 MByteU-Bootブートローダーイメージ

0x00100400

0x001403FF

256 KBytesライセンス情報

0x00140400

0x007FFFFF

約 6.7 MBytes予約領域

Armadillo-IoT のeMMCのメモリマップを表4.2「eMMC メモリマップ」に示します。

表4.2 eMMC メモリマップ

パーティションサイズ説明
132 MBytesLinux カーネルイメージ/Device Tree Blob
2約 3.4 GBytesDebian GNU/Linux
3128 MBytesリカバリーイメージ

recovery パーティションについて詳しくは本文 「リカバリーイメージ」を参照してください。license パーティションには、Distribution ID に対応したSACMとの通信に使う認証キー(LS-SA key)が格納されます。

kernel、userland パーティションは、通常の Armadillo 利用時と同様、ユーザーが自由に変更可能です。

4.2. node-eye パッケージ

本章では node-eye パッケージについてを説明します。

node-eye パッケージはアットマークテクノが提供する Debian パッケージです。node-eye を利用するためのクライアントソフトやファームウェアアップデートのためのスクリプトなどがまとめられています。 node-eye を利用するためには node-eye パッケージを Armadillo にインストールする必要があります。

node-eye パッケージをインストール可能な製品を以下に示します。この他の製品に node-eye パッケージはインストール出来ません。

  • Armadillo-IoT ゲートウェイ G3

  • Armadillo-IoT ゲートウェイ G3L

  • Armadillo-X1

4.2.1. node-eye パッケージのインストール・アンインストール

node-eye パッケージをインストールするには、下記のコマンドを実行します。

[armadillo ~]# apt-get update
[armadillo ~]# apt-get install node-eye

node-eye パッケージをアンインストールするには、下記のコマンドを実行します。

[armadillo ~]# apt-get remove node-eye

4.2.2. node-eye.service の有効化・無効化

node-eye.service を有効化することで、Armadillo の起動後自動的に armsd を立ち上げることができます。

node-eye.service を有効化するには、下記のコマンドを実行します。

[armadillo ~]# systemctl enable node-eye.service

node-eye.service を無効化するには、下記のコマンドを実行します。

[armadillo ~]# systemctl disable node-eye.service

node-eye.service が有効化されているかどうかを確認するには、下記のコマンドを実行します。

[armadillo ~]# systemctl is-enabled node-eye.service

4.3. armsd

本章では node-eye パッケージに含まれている ARMS プロトコルのクライアントソフト "armsd" について説明します。

node-eye の死活監視、リモートコンフィグ、ファームウェアアップデートなどの機能は、armsd と SACM が互いに通信することで実現しています。 以下では armsd の標準機能である死活監視機能、リモートコンフィグ機能について説明します。

4.3.1. 死活監視機能

armsd は SACM から死活監視を行うために、定期的に SACM へ Heartbeat パケットを送信しています。SACM が Heartbeat パケットを受信すると、SACM は Heartbeat パケットを送ってきた Armadillo と接続中であると判断します。

  • armsd の Heartbeat パケット送信間隔

    • 5分に1回 Heartbeatを Armadilloから送信

  • SACM の接続状態の表示

    • [切断中]のとき、1回Heartbeat パケットが SACM に到達すると、接続状態を[接続中]に変化させる

    • [接続中]のとき、3回連続でHeartbeat パケットが SACM に到達しなかった場合、 接続状態を[切断中]に変化させる

[ティップ]

リカバリーイメージは、Heartbeat パケットを送信しません。従って、接続状態の表示は[切断中]となりますが、Armadillo と SACM は互いに通信できるため復旧作業(ファームウェアアップデートなど)は可能です。

4.3.2. リモートコンフィグ機能

SACM から Armadillo 上の設定ファイルの修正を行ったり、なんらかのアプリケーションを実行するためには、armsd のモジュールという仕組みを使います。

以下では、リモートコンフィグ機能に欠かせないモジュールについて説明します。

4.3.2.1. モジュールについて

モジュールは Armadillo のユーザーランドに配置された start/stop/reconfig/command といった オペレーション を受け付けるスクリプトとして実装されています。

モジュールにはバイナリモジュール(BIN module)、コマンドラインインターフェースモジュール(CLI module)の2種類あり、16個のモジュールが用意されています。

表4.3 モジュールのタイプとその用途

No.Module type用途
0 - 3CLI moduleアットマークテクノが提供する機能に使用
4 - 7CLI moduleお客様が自由に使用
8 - 11BIN moduleお客様が自由に使用
12 - 15CLI moduleお客様が自由に使用

CLI moduleは、SACM上で直接、モジュールのコンフィグを編集、参照することができます。 バイナリモジュールは、SACM上でコンフィグの内容を直接参照することはできず、ダウンロードとアップロードのみが可能です。

また、コマンドラインインターフェースモジュールのコンフィグで扱えるのは、US-ASCII のテキストのみに限られます。 日本語などのマルチバイト文字が含まれる場合、バイナリモジュールで取り扱う必要があります。

モジュールのコンフィグについては SACM コンフィグの概念 を参照してください。

モジュール0 ~ 3はアットマークテクノが提供する機能(ネットワーク設定、ファームウェア管理など)に使用しています。 モジュール0 ~ 3に変更を加えることは可能ですが、変更を加えた場合にはアットマークテクノから提供する機能(サービス等)を受けられなくなる場合があります。

現在、アットマークテクノから提供しているモジュールを表に示します。

表4.4 アットマークテクノが提供しているモジュール一覧

No.Module typeModule name用途
0CLI moduleネットワークモジュールネットワークインターフェースの設定に使用
1CLI moduleファームウェアモジュールファームウェアアップデートに使用

モジュール4 ~ 15 はお客様が自由に使用することができます。モジュールを作成・追加を行うには 「モジュールの作成方法」 を参照してください。

その他、モジュールに関する情報は SACM モジュールの概念 を参照してください。

4.3.3. その他・詳細仕様

armsd についてより詳しい情報は libarms のドキュメントを参照してください

4.4. アットマークテクノが提供するモジュールの仕様

本章ではアットマークテクノが提供する armsd のモジュールについて説明します。

4.4.1. ネットワークモジュール

ネットワークモジュールは Armadillo のネットワーク設定を管理します。ネットワークモジュールを使用することで、SACM コントロールパネルから Armadillo のネットワーク設定を変更することができます。 ネットワークモジュールを使ったネットワークの設定方法は「ネットワーク設定方法」 を参照してください。

4.4.1.1. ネットワークインターフェース設定シーケンス

以下に SACM 上に設定したネットワークインターフェース設定が反映されるまでのシーケンスを示します。

  1. armsd が起動すると/etc/armsd/scripts/line が実行されます。 /etc/armsd/scripts/line は /etc/armsd/line.conf を 元に /etc/NetworkManager/system-connections/armsd_line_connection (以下、コネクションと表記します)を生成します。

  2. 次に、生成されたコネクションを使用して LS(Location Server)に接続します。

  3. 接続が確立すると、LS から RS(Resource Server)へ接続するために必要な情報(Location-Config)を取得します。これを LS Pull といいます。Armadillo は LS Pull に成功すると、Location-Config をキャッシュします。(/etc/armsd/armsd.cacheとして保存します) Location-Config がある場合、LS Pull をスキップします。

  4. 次に、再び/etc/armsd/scripts/line でコネクションを生成し、これを用いて RS へ接続します。ここで生成されるコネクションは、armsd が起動した時と同じものが生成されます。

  5. 接続が確立すると、RS から SACM のモジュール N に設定されたコンフィグ(Service-Config)を取得します。これを RS Pull といいます。

  6. 取得した Service-Config を用いて、post-pull script がコネクションを生成します。

  7. こうして、Service-Config の設定でネットワークインターフェースがアップします。

  8. 最後に接続性の確認を行います。

  9. - Service-Config により設定したコネクションで SACM と接続できるかを確認します。 接続は 5 回試行しますが、5 回とも接続できなかった場合、新たに設定する前の Service-Config に ロールバックします。

  10. SACM との接続が確認されると、ネットワーク設定のシーケンスは終了となります。

4.4.1.2. コンフィグの書式

ネットワークモジュール(モジュール0)のコンフィグの書式を以下に示します。

version=[version]

[key]=[value]
[key]=[value]
     :
  • version

    • モジュール内の処理とコンフィグの内容を対応付けるために使用するバージョン番号です

    • Armadillo-IoT G3, Armadillo-IoT G3L, Armadillo-X1 では "2" 固定となっています

  • key

    • コンフィグの変数名です

    • 同一の key を同じコンフィグ内に書くと、後に書かれたものが使用されます

    • key の前に#をつけることで、コメントアウトできます

  • value

    • key に対応する値です

4.4.1.3. ネットワークモジュールコンフィグ一覧

4.4.1.3.1. eth0

ネットワークモジュールの eth0 に関する key 一覧です。

表4.5 ネットワークモジュールの eth0 に関する key 一覧

keyvalue (参考例)説明
interface_eth0enableeth0 の有効/無効 (enable / disable)
interface_eth0_typestaticIPアドレスの設定方法 (dhcp / static)
interface_eth0_address192.168.10.1IPアドレス
interface_eth0_netmask255.255.0.0ネットマスク
interface_eth0_gateway192.168.0.1ゲートウェイ
interface_eth0_metric1メトリック値
interface_eth0_never-defaulttrue

デフォルトゲートウェイとして使用しない (true / false)

未設定の場合false


[ティップ]

interface_eth0_never-default はnode-eyeパッケージ v0.2.0-1 以降で使用することができます。

4.4.1.3.2. wwan

ネットワークモジュールの wwan に関する key 一覧です。

表4.6 ネットワークモジュールの wwan に関する key 一覧

keyvalue (参考例)説明
interface_wwanenablewwan の有効/無効 (enable / disable)
interface_wwan_typedhcpIPアドレスの設定方法 (dhcp のみサポート)
interface_wwan_apnAPNアクセスポイント名 (APN)
interface_wwan_id"user name"認証ID(ユーザー名)
interface_wwan_pass"password"パスワード
interface_wwan_metric20メトリック値

4.4.1.3.3. wlan0

ネットワークモジュールの wlan0 に関する key 一覧です。

表4.7 ネットワークモジュールの wlan0 に関する key 一覧

keyvalue (参考例)説明
interface_wlan0enableenable または disable
interface_wlan0_typedhcpdhcp または static
interface_wlan0_address192.168.10.2IPアドレス
interface_wlan0_netmask255.255.0.0ネットマスク
interface_wlan0_gateway192.168.0.1ゲートウェイ
interface_wlan0_metric40メトリック値
interface_wlan0_never-defaulttrue

デフォルトゲートウェイとして使用しない (true / false)

未設定の場合false

interface_wlan0_passphrase"passphrase"パスフレーズ
interface_wlan0_cryptmode"WPA2-AES"暗号化方式*1
interface_wlan0_essid"mywpa2aes"ESSID

[ティップ]

interface_wlan0_never-default はnode-eyeパッケージ v0.2.0-1 以降で使用することができます。

4.4.1.3.4. resolv.conf

ネットワークモジュールの resolv.conf に関する key 一覧です。 resolv_conf_から始まる変数の値は /etc/resolv.conf に書き込まれます。

表4.8 ネットワークモジュールの resolv.conf に関する key 一覧

key説明
resolv_conf_searchresolv.conf の search
resolv_conf_nameserverresolv.conf の nameserver

4.4.2. ファームウェアモジュール

ファームウェアモジュールは node-eye コントロールパネルからファームウェアアップデートを行う際に使用されます。 ファームウェアモジュールを使ったファームウェアアップデートの方法は「ファームウェアアップデートを行う」を参照してください。

ファームウェアモジュールで書き換えることのできるファイルは以下の3つです。 kernel, dtb は必ず同時にアップデートを行います。個別にアップデートすることはできません。dtb のみ、kernel のみ更新したい場合は、Armadillo に既に書き込まれているイメージを指定する必要があります。

  • kernel・dtb

  • userland

  • recovery

ファームウェアアップデートを行う際に、用意する必要があるファイルは以下のとおりです。

表4.9 ファームウェアアップデートに必要なファイル

アップデート対象種別ファイル名
kernel・dtbLinux カーネルuImage
Linux カーネルチェックサムuImage.md5
Linux カーネル DTB アーカイブuImage.dtb.zip
Linux カーネル DTB アーカイブ チェックサムuImage.dtb.zip.md5
userlandDebian GNU/Linux ユーザーランドアーカイブ*.tar.gz
Debian GNU/Linux ユーザーランドアーカイブチェックサム*.tar.gz.md5
recoveryリカバリー Linux カーネルuImage.recovery
リカバリー Linux カーネルチェックサムuImage.recovery.md5
リカバリー Linux カーネル DTB アーカイブuImage.recovery.dtb.zip
リカバリー Linux カーネル DTB アーカイブ チェックサムuImage.recovery.dtb.zip.md5

[ティップ]

ファームウェアアップデートを行うためには、Armadillo が HTTP プロトコルでアクセス可能な Web サーバーにイメージファイルを事前に置いておく必要があります。

4.5. リカバリーイメージ

recovery 領域には、Linux カーネルとユーザーランドを一つにまとめたイメージを書き込みます。このイメージをリカバリーイメージといいます。

4.5.1. リカバリーイメージの目的

リカバリーイメージの目的は、次のような人為的ミスによって正常に起動できなくなった Armadillo をnode-eyeコントロールパネルからの復旧をできるようにすることです。

  • ファームウェアアップデート機能を使ってLinux カーネルまたはユーザーランドに誤ったイメージを書き込んでしまった

  • ファームウェアアップデート機能を使ったイメージ書き込みの最中に、電源が遮断されて書き込みが完了せず再起動に失敗した

4.5.2. リカバリーイメージの起動条件

リカバリーイメージを使って Armadillo の起動する条件を次に示します。

  • ファームウェアアップデートが正常に完了していない状態で、Armadilloが再起動した

  • ファームウェアアップデートは完了したが、更新したイメージで起動できなかった

4.5.3. リカバリーイメージの特徴

4.5.3.1. インストールされているアプリケーション

リカバリーイメージは、Linux カーネルとユーザーランドを復旧するためにSACMに接続することのできる最小の構成となっています。そのため、インストールされているアプリケーションは標準イメージと比べ少なくなっています。

4.5.3.2. リカバリーイメージ起動中のWebUI上の表示

リカバリーイメージで Armadillo が起動すると、SACM コントロールパネル、node-eye コントロールパネル上では [切断中] と表示されます。ただし、Armadillo がリカバリーイメージで起動し、SACM と通信できる場合は、SACM コントロールパネル, node-eye コントロールパネルから Ping と Traceroute を実行することができます。

4.5.3.3. RAM disk に展開されるユーザーランド

リカバリーイメージが起動すると、ユーザーランドはRAM disk上に展開されます。そのため、ルートファイルシステムへ書き込みを行っても変更は保存されません。 また、eMMC 第2パーティションに保存されているユーザーランドがRAM上に展開されるのではなく、リカバリーイメージに含まれるユーザーランドがRAM上に展開されます。

4.5.3.4. リカバリーイメージが使用するline.conf

リカバリーイメージは eMMC 第3パーティションに保存された /etc/armsd/line.conf を使用します。eMMC 第2パーティションの /etc/armsd/line.conf は使用されません。

4.5.4. リカバリーイメージのビルド方法

リカバリーイメージをビルドする方法を示します。リカバリーイメージのビルドは ATDE 上で行います。

[注記]

eMMC 第2パーティションに書き込む GNU/Linux Debianアーカイブの構築方法は、製品マニュアルを参照してください。

手順4.1 リカバリーイメージのビルド

  1. x1-node-eye-recovery-builder の準備

    はじめに、x1-node-eye-recovery-builder を使用するための準備を行います。 下記のコマンドを実行する前に、最新の x1-node-eye-recovery-builder を Armadillo サイトからダウンロードしておいてください。

    [PC ~]$ sudo apt-get update && sudo apt-get install qemu-user-static
    [PC ~]$ tar xf x1-node-eye-recovery-builder-[version].tar.gz
  2. リカバリーイメージ用の initramfs アーカイブ作成

    x1-node-eye-recovery-builder を使ってリカバリーイメージ用の initramfs アーカイブを作成します。build-recovery-initramfs.sh を実行してから initramfs アーカイブが完成するまでに40分程度かかります。 これは x1-node-eye-recovery-builder がパッケージをインターネット上から取得するためです。回線速度によって完成までにかかる時間は前後します。

    [PC ~]$ cd x1-node-eye-recovery-builder-[version]
    [PC ~/x1-node-eye-recovery-builder-[version]]$ sudo ./build-recovery-initramfs.sh
  3. Linux カーネルのソースコードの準備

    Armadillo サイトから Linux カーネルのソースコードアーカイブをダウンロードした後、アーカイブの展開をします。

    [PC ~]$ ls
    linux-3.14.38-at[version].tar.gz  x1-node-eye-recovery-builder-[version]
    [PC ~]$ tar xf linux-3.14.38-at[version].tar.gz
    [PC ~]$ ls
    linux-3.14.38-at[version]         x1-node-eye-recovery-builder-[version]
    linux-3.14.38-at[version].tar.gz
  4. initramfsアーカイブへのシンボリックリンクを作成

    Linuxカーネルディレクトリに移動して、initramfsアーカイブへのシンボリックリンクを作成します。

    [PC ~]$ cd linux-3.14.38-at[version]
    [PC ~/linux-3.14.38-at[version]]$ ln -s ../x1-node-eye-recovery-builder-[version]/initramfs_x1_node-eye_recovery_[YYYYMMDD].cpio.gz initramfs_x1.cpio.gz
  5. ビルド

    ビルドするには、次のようにコマンドを実行します。

    [PC ~/linux-3.14.38-at[version]]$ make ARCH=arm x1_defconfig
    [PC ~/linux-3.14.38-at[version]]$ make CROSS_COMPILE=arm-linux-gnueabihf- ARCH=arm
    [PC ~/linux-3.14.38-at[version]]$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- LOADADDR=0x80008000 uImage
                
  6. イメージファイルの生成確認

    ビルドが終了すると、arch/arm/boot/ディレクトリと、arch/arm/boot/dts/以下にイメージファイル(LinuxカーネルとDTB)が作成されています。

    [PC ~/linux-3.14.38-at[version]]$ ls arch/arm/boot/uImage
    uImage
    [PC ~/linux-3.14.38-at[version]]$ ls arch/arm/boot/dts/armadillo_x1.dtb
    armadillo_x1.dtb

4.5.5. リカバリーイメージの書き込み方法

「リカバリーイメージのビルド方法」で作成したイメージファイルを、Armadilloに書き込む方法について説明します。 「ファームウェアアップデートを行う」で説明した方法と同様に、ATDEで必要なファイルの名前変更とZIP圧縮を行った後に所定の位置へ設置します。

[PC ~]$ ls
armadillo_x1.dtb  uImage
[PC ~]$ mv uimage uImage.recovery
[PC ~]$ mv armadillo_x1.dtb armadillo_x1.dtb.recovery
[PC ~]$ zip uImage.recovery.dtb.zip armadillo_x1.dtb.recovery
[PC ~]$ ls
armadillo_x1.dtb.recovery  uImage.recovery  uImage.recovery.dtb.zip
[PC ~]$ md5sum uImage.recovery > uImage.recovery.md5
[PC ~]$ md5sum uImage.recovery.dtb.zip > uImage.recovery.dtb.zip.md5
[PC ~]$ ls
armadillo_x1.dtb.recovery  uImage.recovery  uImage.recovery.dtb.zip  uImage.recovery.dtb.zip.md5  uImage.recovery.md5
[PC ~]$ sudo cp uImage.recovery* /var/www/html

次に、「ファームウェアアップデートを行う」で説明した方法と同様に、接続中デバイスから[ファームウェアアップデート]項目に移動します。 その後、下記のようにフォームへ入力してください([ATDEのIPアドレス]はご利用の環境にあわせて変更してください)。

表4.10 リカバリーイメージアップデート

フォーム入力内容
プライマリ/リカバリリカバリ
リカバリhttp://[ATDEのIPアドレス]/uImage.recovery
アップデート完了時に再起動する 

[実行]をクリックし、リカバリーイメージのアップデートを行ってください。

リカバリーイメージアップデート実行 (node-eye コントロールパネル)

図4.1 リカバリーイメージアップデート実行 (node-eye コントロールパネル)