開発編

目次

3.1. 開発の準備
3.1.1. 準備するもの
3.1.2. 仮想環境のセットアップ
3.1.3. VS Codeのセットアップ
3.1.4. Armadillo の初期化と ABOS のアップデート
3.1.5. Armadillo に初期設定をインストールする
3.1.6. ゲートウェイコンテナアプリケーションで動作確認する
3.1.7. シリアルコンソールを使用する
3.1.8. ユーザー登録
3.2. アプリケーション開発の流れ
3.3. 開発前に知っておくべき Armadillo Base OS の機能・特徴
3.3.1. 一般的な Linux OS 搭載組み込み機器との違い
3.3.2. Armadillo Base OS 搭載機器のソフトウェア開発手法
3.3.3. アップデート機能について
3.3.4. ファイルの取り扱いについて
3.3.5. インストールディスクについて
3.4. ハードウェアの設計
3.4.1. 信頼性試験データについて
3.4.2. 放射ノイズ
3.4.3. ESD/雷サージ
3.4.4. 周辺装置との接続
3.4.5. 拡張基板の設計
3.4.6. 電気的仕様
3.4.7. 各動作モードにおける電源供給状況
3.4.8. rebootコマンドによる再起動時の電源供給について
3.4.9. 形状図
3.4.10. オプション品
3.5. ケースの組み立てと分解方法
3.5.1. ケースの組み立て手順
3.5.2. ケースの分解
3.6. WLANアンテナの取り付けと取り外し
3.6.1. WLAN基板アンテナの取り付け
3.6.2. WLAN基板アンテナの取り外し
3.6.3. WLAN基板アンテナのケースへの取り付け
3.7. インターフェースの使用方法とデバイスの接続方法
3.7.1. SDカードを使用する
3.7.2. Ethernet を使用する
3.7.3. 無線 LAN を使用する
3.7.4. BT を使用する
3.7.5. LTE を使用する
3.7.6. USB デバイスを使用する
3.7.7. 接点入力を使用する
3.7.8. 接点出力を使用する
3.7.9. UART を使用する
3.7.10. GPIO を制御する
3.7.11. I2C デバイスを使用する
3.7.12. RTC を使用する
3.7.13. 起動デバイスを変更する
3.7.14. ユーザースイッチを使用する
3.7.15. LED を使用する
3.7.16. 拡張インターフェースを使用する
3.7.17. 電源を入力する
3.7.18. Wi-SUN デバイスを使用する
3.7.19. EnOcean デバイスを扱う
3.8. ソフトウェアの設計
3.8.1. 開発者が開発するもの、開発しなくていいもの
3.8.2. ユーザーアプリケーションの設計
3.8.3. 省電力・間欠動作の設計
3.8.4. ログの設計
3.8.5. ウォッチドッグタイマー
3.8.6. コンテナに Armadillo の情報を渡す方法
3.8.7. Armadillo Base OS のデフォルトで開放しているポート
3.9. ネットワーク設定
3.9.1. ABOS Web とは
3.9.2. ABOS Web へのアクセス
3.9.3. ABOS Web のパスワード登録
3.9.4. ABOS Web のパスワード変更
3.9.5. ABOS Web の設定操作
3.9.6. ログアウト
3.9.7. WWAN設定
3.9.8. WLAN 設定
3.9.9. 各接続設定(各ネットワークインターフェースの設定)
3.9.10. DHCPサーバー設定
3.9.11. NAT設定
3.9.12. VPN設定
3.9.13. 状態一覧
3.10. ABOS Web をカスタマイズする
3.11. Network Time Protocol (NTP, ネットワーク・タイム・プロトコル) の設定
3.12. Armadillo Twin を体験する
3.13. ABOSDEによるアプリケーションの開発
3.13.1. ABOSDEの対応言語
3.13.2. 参照する開発手順の章の選択
3.14. ゲートウェイコンテナアプリケーションの開発
3.14.1. ゲートウェイコンテナアプリケーション開発の流れ
3.14.2. ATDE 上でのセットアップ
3.14.3. アプリケーション開発
3.14.4. ゲートウェイコンテナアプリケーションの設定
3.14.5. ゲートウェイコンテナのディストリビューション
3.14.6. Armadillo に転送するディレクトリ及びファイル
3.14.7. Armadillo 上でのセットアップ
3.14.8. SBOM 生成に関する設定
3.14.9. リリース版のビルド
3.14.10. 製品への書き込み
3.14.11. Armadillo 上のゲートウェイコンテナイメージの削除
3.14.12. クラウドを含めた動作確認
3.15. CUI アプリケーションの開発
3.15.1. CUI アプリケーション開発の流れ
3.15.2. ATDE 上でのセットアップ
3.15.3. アプリケーション開発
3.15.4. コンテナのディストリビューション
3.15.5. Armadillo に転送するディレクトリ及びファイル
3.15.6. コンテナ内のファイル一覧表示
3.15.7. Armadillo 上でのセットアップ
3.15.8. SBOM 生成に関する設定
3.15.9. リリース版のビルド
3.15.10. 製品への書き込み
3.15.11. Armadillo 上のコンテナイメージの削除
3.16. C 言語によるアプリケーションの開発
3.16.1. C 言語によるアプリケーション開発の流れ
3.16.2. ATDE 上でのセットアップ
3.16.3. アプリケーション開発
3.16.4. コンテナのディストリビューション
3.16.5. コンテナ内のファイル一覧表示
3.16.6. Armadillo に転送するディレクトリ及びファイル
3.16.7. Armadillo 上でのセットアップ
3.16.8. SBOM 生成に関する設定
3.16.9. リリース版のビルド
3.16.10. 製品への書き込み
3.16.11. Armadillo 上のコンテナイメージの削除
3.17. SBOM 生成に関わる設定を行う
3.17.1. SBOM 生成に必要なファイルを確認する
3.18. システムのテストを行う
3.18.1. ランニングテスト
3.18.2. 異常系における挙動のテスト
3.19. ユーザー設定とユーザーデータを一括削除する

Armadillo-IoT ゲートウェイ A6E では基本的に ATDE という Armadillo 専用開発環境と、 Visual Studio Code (以降 VS Code と記載します) 向け Armadillo 開発用エクステンションを用いてアプリケーション開発を行っていきます。

3.1. 開発の準備

この節では、アプリケーション開発のために、はじめに開発環境のセットアップを行います。 本節を完了すると、Armadillo を用いた製品の開発に即座に取り組むことができる状態になります。

開発環境のセットアップは、作業用 PC と Armadillo の両方に対して行います。 本節では初めに作業用 PC についてのセットアップを行い、その後に Armadillo についてのセットアップを行います。 そのため、新たに Armadillo を用意した場合や、Armadillo のセットアップをやり直したい方は本節の途中から行うことができます。 後半では Armadillo による開発方法の勝手を大まかに把握したい方を想定して、 ゲートウェイコンテナアプリケーションによる簡単な動作確認を行う項を用意しています。 不要な方はこの項をスキップしてください。 その後、 Armadillo のシリアルコンソールのセットアップ・操作方法について解説します。

3.1.1. 準備するもの

開発環境をセットアップする上で、まずは次のものを用意してください。

作業用PC
LinuxまたはWindowsが動作し、ネットワークインターフェースと 1つ以上のUSBポートを持つPCです。
Armadillo-IoT ゲートウェイ A6E 開発セット一式
詳しくは「Armadillo-IoT ゲートウェイ A6E開発セット」をご参照ください。
1 GB 以上の microSDカード
Armadilloの初期化・ABOSのアップデートの際に使用します。
マイナスドライバー
ドライバーはケースを取り外す際に使用しますので、ケースが無い場合は不要です。
ネットワーク環境
仮想化ソフトウェアや Armadillo の初期化インストールディスクイメージなどを作業用 PC にダウンロードする手順があります。 また、 「Armadillo に初期設定をインストールする」 の手順から Armadillo と作業用 PC をネットワーク通信ができるようにする必要があります。

3.1.2. 仮想環境のセットアップ

作業用 PC をセットアップします。 アットマークテクノでは、製品のソフトウェア開発や動作確認を簡単に行うために、Oracle VM VirtualBox 仮想マシンのデータイメージを提供しています。 このデータイメージを ATDE(Atmark Techno Development Environment) と呼びます。 ATDE の起動には仮想化ソフトウェアである VirtualBox を使用します。

[ティップ]

Oracle VM VirtualBoxには以下の特徴があります。

  • GPL v2(General Public License version 2)で提供されている [5]
  • VMware形式の仮想ディスク(.vmdk)ファイルに対応している

3.1.2.1. VirtualBox のインストール

ATDE を使用するために、作業用 PC に VirtualBox をインストールします。 VirtualBox の Web ページ(https://www.virtualbox.org/) を参照してインストールしてください。

また、ホスト OS が Linux の場合、デフォルトでは VirtualBox で USB デバイスを使用することができません。 ホスト OS(Linux)で以下のコマンドを実行後、ホスト OS を再起動してください。

[PC ~]$ sudo usermod -a -G vboxusers $USER

ホスト OS が Windows の場合はこの操作は必要ありません。

3.1.2.2. ATDE のアーカイブを取得

ATDE のアーカイブ(.ova ファイル)を Armadillo サイト(https://armadillo.atmark-techno.com/resources/software/atde/atde-v9)から ダウンロードします。

[注記]

アットマークテクノ製品の種類ごとに対応している ATDE のバージョンが異なります。 本製品に対応している ATDE のバージョンは以下のとおりです。

VirtualBox
ATDE9 v20240925 以降
VMware
ATDE9 v20230123 から ATDE9 v20240826

ATDE9 は Debian GNU/Linux 11 (コードネーム bullseye) をベースに、Armadillo-IoT ゲートウェイ A6E のソフトウェア開発を行うために必要なクロス開発ツールや、Armadillo-IoT ゲートウェイ A6E の動作確認を行うために必要なツールが事前にインストールされています。

[警告]

作業用 PC の動作環境(ハードウェア、VirtualBox、ATDE の対応アーキテクチャなど)により、 ATDE が正常に動作しない可能性があります。 VirtualBox の Web ページ(https://www.virtualbox.org/) から、 使用している VirtualBox のドキュメントなどを参照して動作環境を確認してください。

3.1.2.3. ATDE のインポート

  1. VirtualBox を起動し、[ファイル]-[仮想アプライアンスのインポート]を選択します。
  2. [ソース]の項目で、ダウンロードした ATDE のアーカイブ(.ova ファイル)を選択します。
  3. [設定]の項目で、[ハードドライブをVDIとしてインポート]のチェックを外します。
  4. [完了]をクリックします。インポートの処理が完了するまで数分程要します。
  5. インポートの処理が完了したら、ホスト OS の環境に合わせた設定に更新するため 仮想マシンを選択して[設定]をクリックした後に[OK]をクリックします。
[ティップ]

ATDE に割り当てるメモリおよびプロセッサ数を増やすことで、 ATDE をより快適に使用することができます。 仮想マシンのハードウェア設定の変更方法については、 VirtualBox の Web ページ(https://www.virtualbox.org/) から、 VirtualBox のドキュメントなどを参照してください。

3.1.2.4. ATDE の起動

  1. 仮想マシンを選択して[起動]をクリックしてください。
  2. ATDE のログイン画面が表示されます。

ATDE にログイン可能なユーザーを、表3.1「ユーザー名とパスワード」に示します [6]

表3.1 ユーザー名とパスワード

ユーザー名パスワード権限

atmark

atmark

一般ユーザー

root

root

特権ユーザー


3.1.2.5. コマンドライン端末(GNOME端末)の起動

Armadillo を利用した開発では、 CUI (Character-based User Interface)環境を提供するコマンドライン端末を通じて、 Armadillo や ATDE に対して操作を行う場面が多々あります。 コマンドライン端末にはいくつかの種類がありますが、ここではGNOMEデスクトップ環境に標準インストールされているGNOME端末を起動します。

GNOME端末を起動するには、図3.1「GNOME端末の起動」のようにデスクトップ左上のアプリケーションの「ユーティリティ」カテゴリから「端末」を選択してください。

images/common-images/open-gnome_terminal-on-atde/gnome_terminal_menu.png

図3.1 GNOME端末の起動


図3.2「GNOME端末のウィンドウ」のようにウィンドウが開きます。

images/common-images/open-gnome_terminal-on-atde/gnome_terminal_open.png

図3.2 GNOME端末のウィンドウ


3.1.2.6. ソフトウェアのアップデート

コマンドライン端末から次の操作を行い、ソフトウェアを最新版へアップデートしてください。

[ATDE ~]$ sudo apt update
[ATDE ~]$ sudo apt upgrade

図3.3 ソフトウェアをアップデートする


3.1.2.7. 取り外し可能デバイスの使用

VirtualBoxは、ゲストOS (ATDE)による取り外し可能デバイス(USBデバイスやDVDなど)の使用をサポートしています。 デバイスによっては、ホストOS (VirtualBoxを起動しているOS)と ATDE で同時に使用することができません。 そのようなデバイスを ATDE で使用するためには、ATDE にデバイスを接続する 図3.4「ATDE にデバイスを接続する」 の操作が必要になります。

images/atde-images/atde9-vb-device-usb.png

図3.4 ATDE にデバイスを接続する


3.1.2.8. VirtualBox Guest Additions の再インストール

ATDE は VirtualBox 仮想マシン用ソフトである VirtualBox Guest Additions があらかじめインストールされた状態で配布されています。

Guest Additions のバージョンは VirtualBox 自体のバージョンと連動しているため、 お使いの VirtualBox のバージョンと ATDE にインストール済みの Guest Additions のバージョンが異なる場合があります。

VirtualBox と Guest Additions のバージョンが異なることによって問題が起こる可能性は低いですが、 これに起因すると思われる不具合(ATDEの画面・共有フォルダー・クリップボード等の不調)が発生した場合は、 以下の手順を参考に Guest Additions を再インストールしてください。 (実行前に ATDE のスナップショットを作成しておくことを推奨します)

  1. ATDE を起動後、上部バーの[ツール]-[Guest Additions CD イメージの挿入]を選択してください。
  2. お使いの VirtualBox と同じバージョンの VBox_GAs_[VERSION] が「ファイル」上に表示されます。
  3. VBox_GAs_[VERSION] をマウントするために、「ファイル」から VBox_GAs_[VERSION] を押下してください。
  4. インストールする前に、以下のコマンドで既にインストール済みの Guest Additions をアンインストールします。

    sudo /opt/VBoxGuestAdditions-[VERSION]/uninstall.sh
  5. 以下のコマンドでお使いの VirtualBox のバージョンに合った Guest Additions がインストールされます。

    cd /media/cdrom0
    sudo sh ./autorun.sh

3.1.2.9. 共有フォルダーの作成

ホスト OS と ATDE 間でファイルを受け渡す手段として、共有フォルダーがあると大変便利です。 ここでは、ホスト OS と ATDE 間の共有フォルダを作成する手順を紹介しますが、 不要な方はこの手順をスキップしてください。

  1. VirtualBox の上部バーから[デバイス]-[共有フォルダー]-[共有フォルダー設定]を選択します。(図3.5「共有フォルダー設定を開く」
  2. 図3.6「共有フォルダー設定」 の赤枠で示したアイコンをクリックします。
  3. 図3.7「共有フォルダーの追加」 のように、[フォルダーのパス]-[その他]を選択して、共有フォルダーに設定したいホストOS上のフォルダーを選択します。
  4. 図3.7「共有フォルダーの追加」 のように、[自動マウント]と[永続化する]にチェックを入れます。
  5. [OK]をクリックして共有フォルダーを追加します。
images/atde-images/atde9-vb-share-folder-bar.png

図3.5 共有フォルダー設定を開く


images/atde-images/atde9-vb-share-folder-setting.png

図3.6 共有フォルダー設定


images/atde-images/atde9-vb-share-folder-add.png

図3.7 共有フォルダーの追加


images/atde-images/atde9-vb-share-folder-file.png

図3.8 「ファイル」に表示される共有フォルダー


追加した共有フォルダーは、図3.8「「ファイル」に表示される共有フォルダー」のように「ファイル」からアクセスするか、 または /media/sf_share(共有フォルダー名) からアクセスできます。 ( share というフォルダー名で作成すると、ATDE上では sf_share として表示されます。)

3.1.3. VS Codeのセットアップ

作業用 PC のセットアップです。 Armadillo-IoT ゲートウェイ A6E の開発には、 VS Code を使用します。 ATDE のバージョン v20230123 以上には、 VS Code がインストール済みのため新規にインストールする必要はありませんが、 使用する前には図3.3「ソフトウェアをアップデートする」にしたがって最新版へのアップデートを行ってください。

以下の手順は全てATDE上で実施します。

3.1.3.1. VS Code を起動する

VS Code を起動するために code コマンドを実行するか、「アプリケーション」の中から「Visual Studio Code」を探して起動してください。

[ATDE ~]$ code

図3.9 VS Code を起動する


[ティップ]

VS Code を起動すると、日本語化エクステンションのインストールを提案してくることがあります。 その時に表示されるダイアログに従ってインストールを行うと VS Code を日本語化できます。

3.1.3.2. VS Code に開発用エクステンションをインストールする

VS Code 上でアプリケーションを開発するために、 ABOSDE (Armadillo Base OS Development Environment) というエクステンションをインストールします。

エクステンションはマーケットプレイスからインストールすることができます。 VS Code を起動し、左サイドバーのエクステンションを選択して、検索フォームに「abos」と入力してください。

images/abos-images/vscode_install_extension.png

図3.10 VS Code に開発用エクステンションをインストールする


表示された「Armadillo Base OS Development Environment」の 「Install」ボタンを押すとインストールは完了します。

3.1.4. Armadillo の初期化と ABOS のアップデート

Armadillo をセットアップします。 まずは、お手元の Armadillo に搭載されている Armadillo Base OS(ABOS) を最新版にします。 ABOS のバージョンが古い場合、本マニュアルで紹介されている重要な機能を使用できない可能性があります。 そのため、以下の手順に従って、ABOS のアップデートを兼ねた Armadillo の初期化を行ってください。

3.1.4.1. 初期化インストールディスクの作成

  1. 1 GB 以上の microSD カードを用意してください。
  2. 標準のインストールディスクイメージをダウンロードします。 Armadillo-IoT ゲートウェイ A6E インストールディスクイメージ から 「Armadillo Base OS インストールディスクイメージ」を ATDE にダウンロードしてください。
  3. ATDE に microSD カードを接続します。詳しくは「取り外し可能デバイスの使用」を参考にしてください。
  4. microSD カードのデバイス名を確認します

    [ATDE ~]$ ls /dev/sd?
    /dev/sda  /dev/sdb
    [ATDE ~]$ sudo fdisk -l /dev/sdb
    Disk /dev/sdb: 7.22 GiB, 7751073792 bytes, 15138816 sectors
    Disk model: SD/MMC
    : (省略)
  5. microSD カードがマウントされている場合、アンマウントします。

    [ATDE ~]$ mount
    : (省略)
    /dev/sdb1 on /media/52E6-5897 type ext2 (rw,nosuid,nodev,relatime,uid=1000,gid=1000,fmask=0022,dmask=0077,codepage=cp437,iocharset=utf8,shortname=mixed,showexec,utf8,flush,errors=remount-ro,uhelper=udisks)
    [ATDE ~]$ sudo umount /dev/sdb1
  6. ダウンロードしたファイルを展開し、imgファイルをmicroSDカードに書き込んでください。

    Linux PCの場合、以下のようにmicroSDカードに書き込むことができます。

    [ATDE ~]$ unzip baseos-6e-installer-[VERSION].zip
    [ATDE ~]$ sudo dd if=baseos-6e-installer-[VERSION].img \
                      of=/dev/sdb bs=1M oflag=direct status=progress

    また、Windowsの場合、エクスプローラー等でZipファイルからimgファイルを取り出し、「Win32 Disk Imager」などを使用してmicroSDカードに書き込むことができます。

3.1.4.2. インストールディスクを使用する

以下の手順に沿って、 図3.11「Armadillo-IoT ゲートウェイ A6Eを初期化する接続」 のとおりに接続します。 なお、microSDカードをCON1に挿入するために、ケースを外した状態にする必要があります。「ケースの分解」を参考にケースを外してください。

  1. 起動デバイス設定スイッチ(SW2)を「SD」に切り替えます。
  2. microSD カードを CON1 に挿入します。(方法は「microSDカードの挿抜方法」を参考にしてください)
  3. AC アダプタを接続して電源を投入するとシステムLED(SYS) が点灯します。
  4. 4分程度でeMMCのソフトウェアの初期化が完了し、電源が切れます(システムLED(SYS) が消灯)。
  5. システムLED(SYS) が消灯したら、電源を取り外し、続いて 起動デバイス設定スイッチ を eMMC に設定し、microSD カードを外してください。
images/a6e-connection-initialize.svg

図3.11 Armadillo-IoT ゲートウェイ A6Eを初期化する接続


images/common-images/callouts/1.svg
Armadillo-IoT ゲートウェイ A6E
images/common-images/callouts/2.svg
ACアダプタ(12V/2.0A)
images/common-images/callouts/3.svg
起動デバイス設定スイッチ
images/common-images/callouts/4.svg
microSD カード
[ティップ]起動デバイス設定スイッチについて

この手順では起動デバイス設定スイッチの操作が必要になります。 起動デバイス設定スイッチを操作することで、起動デバイスを設定することができます。

images/ag6271-boot-sw.svg

図3.12 起動デバイス設定スイッチの操作


images/common-images/callouts/1.svg
起動デバイスはeMMCになります。
images/common-images/callouts/2.svg
起動デバイスはmicroSDになります。

起動デバイス設定スイッチの両脇の基板上に、白い文字でeMMC/SDとシルク記載しているので、操作の目印にご利用ください。

3.1.5. Armadillo に初期設定をインストールする

次に、 Armadillo に初期設定( initial_setup.swu )をインストールします。 initial_setup.swu はログインパスワードやユーザー固有の証明書などの 初期設定を Armadillo にインストールするためのファイルです。 initial_setup.swu でインストールされるユーザー固有の証明書がない場合、 ユーザーが開発したアプリケーションをインストール、またはアップデートすることができません。 このため開発前に、初期化された Armadillo に initial_setup.swu をインストールする必要があります。 初期化された Armadillo に対してユーザーが開発したアプリケーションのインストール・アップデートを行うために必須の手順になりますので、 必ず行ってください。

ここでは、 initial_setup.swu を VS Code で作成し、 ABOS Web で Armadillo にインストールします。

3.1.5.1. initial_setup.swu の作成

図3.13「initial_setup.swu を作成する」 に示すように、VS Code の左ペインの [COMMON PROJECT COMMAND] から [Generate Initial Setup Swu] を実行してください。

images/abos-images/abosde_initial_setup_swu.png

図3.13 initial_setup.swu を作成する


初回実行時には各種設定の入力を求められます。 入力する設定の内容を 図3.14「initial_setup.swu 初回生成時の各種設定」 に示します。

なお、この後の ゲートウェイコンテナアプリケーション による動作確認では ABOS Web を使用した手順を記載しています。 この後の手順通りに動作確認を行いたい場合は、ABOS Web のパスワードを設定してください。

Executing task: ./scripts/generate_initial_setup_swu.sh

mkdir: ディレクトリ '/home/atmark/mkswu' を作成しました
設定ファイルを更新しました:/home/atmark/mkswu/mkswu.conf
証明書のコモンネーム(一般名)を入力してください: [COMMON_NAME] 1
証明書の鍵のパスワードを入力ください(4-1024文字)2
証明書の鍵のパスワード(確認):
Generating an EC private key
writing new private key to '/home/atmark/mkswu/swupdate.key.tmp'
 -----
アップデートイメージを暗号化しますか? (N/y) 3
アットマークテクノが作成したイメージをインストール可能にしますか? (Y/n) 4
rootパスワード: 5
root のパスワード(確認):
atmarkユーザのパスワード(空の場合はアカウントをロックします): 6
atmark のパスワード(確認):
BaseOS/プリインストールコンテナを armadillo.atmark-techno.com サーバーから自動アップデートしますか? (N/y) 7
abos-web のパスワードを設定してください。
abos-web のパスワード(空の場合はサービスを無効にします): 8
abos-web のパスワード(確認):
/home/atmark/mkswu/initial_setup.swu を作成しました。

"/home/atmark/mkswu/initial_setup.swu" をそのまま使うことができますが、
モジュールを追加してイメージを再構築する場合は次のコマンドで作成してください:
  mkswu "/home/atmark/mkswu/initial_setup.desc" [他の.descファイル]

インストール後は、このディレクトリを削除しないように注意してください。
鍵を失うと新たなアップデートはデバイスの /etc/swupdate.pem
を修正しないとインストールできなくなります。
 *  Terminal will be reused by tasks, press any key to close it.

[ATDE ~]$ ls ~/mkswu
initial_setup.desc  initial_setup.swu  mkswu.conf
swupdate.aes-key    swupdate.key       swupdate.pem 9

図3.14 initial_setup.swu 初回生成時の各種設定


1

COMMON_NAME には証明鍵の「common name」として会社や製品が分かるような任意の名称を入力してください。

2

証明鍵を保護するパスフレーズを2回入力します。

3

SWUイメージ自体を暗号化する場合に「y」を入力します。 詳細は 「SWUpdate と暗号化について」 を参考にしてください。

4

アットマークテクノのアップデートをインストールしない場合は「n」を入力します。

5

rootのパスワードを2回入力します。 使用するパスワードは以下のルールに従ってください。

  • 辞書に載っている言葉を使用しない
  • 単調な文字列を使用しない
  • 8文字以上のパスワード長にする

6

atmarkユーザーのパスワードを2回入力します。 何も入力しない場合はユーザーをロックします。 使用できるパスワードの制限はrootと同様です。

7

自動アップデートを無効のままで進みます。ここで「y」を入れると、定期的に アットマークテクノのサーバーからアップデートの有無を確認し、自動的にインストールします。

8

abos-webを使用する場合はパスワードを設定してください。 ここで設定したパスワードは abos-web から変更できます。 使用できるパスワードの制限はrootと同様です。 詳細は 「ABOS Web のパスワード変更」 を参考にしてください。

9

作成したファイルを確認します。「swupdate.aes-key」は暗号化の場合にのみ作成されます。

ファイルは ~/mkswu/initial_setup.swu に保存されます。

3.1.5.2. initial_setup.swu を Armadillo にインストール

上の手順で作成した SWU イメージ(initial_setup.swu)を Armadillo へインストールします。 インストール方法は様々ありますが(「SWU イメージのインストール」)、ここでは ABOS Web を使用した手動インストールを行います。

ABOS には ABOS Web という機能が含まれています。 この機能を活用することで、 Web ブラウザからネットワークの設定や、 SWU イメージのインストールなどを簡単に行うことができます。 (ただし、Armadillo と作業用 PC が同一 LAN 内に存在している必要があります)

以下の手順に沿って、 ABOS Web へアクセスし、initial_setup.swu のインストールを行ってください。

まず、 図3.15「ABOSにアクセスするための接続」 のとおりに Armadillo に配線を行い、電源を入れてください。

images/a6e-connection-network.svg

図3.15 ABOSにアクセスするための接続


images/common-images/callouts/1.svg
Armadillo-IoT ゲートウェイ A6E
images/common-images/callouts/2.svg
ACアダプタ(12V/2.0A)
images/common-images/callouts/3.svg
作業用 PC
images/common-images/callouts/4.svg
LAN HUB
images/common-images/callouts/5.svg
Ethernetケーブル
images/common-images/callouts/6.svg
起動デバイス設定スイッチ

1分ほど待機して、ABOSDE でローカルネットワーク上の Armadillo をスキャンします。 図3.16「ABOSDE で ローカルネットワーク上の Armadillo をスキャンする」 の赤枠で囲われているボタンをクリックしてください。

Armadillo が正常に起動していた場合、図3.17「ABOSDE に表示されている Armadillo を更新する」 の一覧に起動した Armadillo が armadillo.local という名称で表示されます。 表示されない場合は1分ほど待機してから図3.17「ABOSDE に表示されている Armadillo を更新する」の赤枠で囲われているマークをクリックしてスキャンを再度試みてください。

images/abos-images/abosde_monitor_scan.png

図3.16 ABOSDE で ローカルネットワーク上の Armadillo をスキャンする


images/abos-images/abosde_monitor_rescan.png

図3.17 ABOSDE に表示されている Armadillo を更新する


ただし、ATDE のネットワークをブリッジ接続以外に設定している場合は Armadillo がリストに表示されない場合があります。表示するためにはATDE のネットワークをブリッジ接続に設定してください。 また、ABOS Web が動作する Armadillo が同じ LAN 上に複数あると、ABOS Web に接続する URL のホスト名部分(armadillo.local)が、2台目では armadillo-2.local、3台目では armadillo-3.local のように、違うものが自動的に割り当てられます。 目的の Armadillo がどのホスト名なのか不明な場合には、Armadillo のラベルに記載されているMACアドレスと一致するもの( 図3.18「ABOSDE を使用して ABOS Web を開く」 の赤枠に表示されます )を探してください。

続いて、図3.18「ABOSDE を使用して ABOS Web を開く」 の赤枠で囲われているマークをクリックして、 ABOS Web を Web ブラウザで開きます。

images/abos-images/abosde_monitor_abos_web_mac.png

図3.18 ABOSDE を使用して ABOS Web を開く


3.1.5.3. ABOS Web へアクセス

ABOS Web が正常に起動していれば、Web ブラウザに パスワード登録画面( 図3.19「パスワード登録画面」 )が表示されます。 initial_setup.swu を作成する手順で設定したパスワードを入力して、ABOS Web のログイン用パスワードを設定します。

images/abos-images/abos-web/new-password-8.png

図3.19 パスワード登録画面


パスワード登録画面で、"パスワード" フィールドと "パスワード(確認)" フィールドに、登録したいパスワードを入力してから、"登録" ボタンをクリックしてください。 パスワード登録完了画面が表示されたら、パスワード登録の完了です。

images/abos-images/abos-web/new-password_success.png

図3.20 パスワード登録完了画面


パスワード登録完了画面にある "ログインページ" というリンクをクリックすると、ログイン画面が表示されますので、先ほど登録したパスワードを入力して "ログイン" ボタンをクリックしてください。

images/abos-images/abos-web/login.png

図3.21 ログイン画面


ログインに成功すると、ABOS Web の設定画面( 図3.22「トップページ」 )に表示が変わり、設定操作を行うことができます。 これで、ABOS Web へのアクセスが完了しました。

images/abos-images/abos-web/top-1-4-0.png

図3.22 トップページ


3.1.5.4. ABOS Web から initial_setup.swu をインストール

ABOS Web のトップページから"SWU インストール"をクリックして、 図3.23「SWU インストール」 の画面に遷移します。

images/abos-images/abos-web/swu-select-image-1-4-0.png

図3.23 SWU インストール


"参照…"から ~/mkswu/initial_setup.swu を選択し、"インストール"をクリックしてください。 数分ほど待機すると 図3.24「SWU インストールに成功した画面」 のように"インストールが成功しました。"と表示され、Armadillo が再起動します。 (ABOS Web も再起動されるので、再起動完了後にページを更新するとログイン画面に戻ります)

images/abos-images/abos-web/swu-install-success.png

図3.24 SWU インストールに成功した画面


これで Armadillo に初期設定をインストールする手順が完了です。 インストール完了後に ~/mkswu ディレクトリ以下にある mkswu.conf と、鍵ファイルの swupdate.* をなくさないようにしてください。

[ティップ]ABOS Web にブラウザから直接アクセスする

ABOSDE を使わずに、 直接 Web ブラウザのアドレスバーに ABOS Web のURLを入力することでも ABOS Web にアクセスできます。 ATDE で Web ブラウザを起動した後、Web ブラウザのアドレスバーに次の URL を入力してください: https://armadillo.local:58080

複数台の Armadillo が接続されている場合には、armadillo.local の部分が armadillo-2.local や armadillo-3.local となっている可能性があります。 これらは ABOSDE のリストに表示されているホスト名と同名ですので、目的の Armadillo と一致するホスト名を入力してください。

また、Web ブラウザから直接アクセスする方法では、ホスト名ではなくIPアドレスを指定することもできます。 例えば、Armadillo の(ネットワークコネクタの)IPアドレスが 192.0.2.80 である場合は、次の URL を入力してください: https://192.0.2.80:58080

IPアドレスを固定している場合はIPアドレスを指定する方法が便利になる場面もあります。 また、IPアドレスを指定する方法は ATDE のネットワークを NAT に設定している場合でも有効です。

[ティップ]ABOS Web からログアウトする

ログアウトを行う場合は、サイドメニューから "ログアウト" を選択してください。 ログアウトすると、ログイン画面が再び表示されますので、ABOS Web をすぐに使わないのであれば、Web ブラウザを閉じてください。

3.1.6. ゲートウェイコンテナアプリケーションで動作確認する

本項では Armadillo-IoT ゲートウェイ A6E に初めからインストールされているゲートウェイコンテナアプリケーションを使用して、 Armadillo による開発方法の勝手を大まかに把握したい方を想定した簡単な動作確認を行います。 なお、開発環境のセットアップに直接関わる手順ではないので、この動作確認が不要な方は本項をスキップしてください。

3.1.6.1. プロジェクトの作成

Armadillo でのアプリケーションの開発には ABOSDE を使用します。

VS Code の左ペインの [A6E] から [GW New Project] を実行(右に表示されている三角形ボタン)し、表示されるディレクトリ選択画面からプロジェクトを保存する ディレクトリを選択してください。 保存先を選択すると、プロジェクト名を入力するダイアログが表示されるので、任意のプロジェクト名を入力してエンターキーを押してください。 この操作により、選択した保存先に、入力したプロジェクト名と同名のディレクトリが作成されます。

また、ここでは次のように設定しています。

  • 保存先 : ホームディレクトリ
  • プロジェクト名 : my_project
images/common-images/gw_vscode_new_project.png

図3.25 プロジェクトを作成する


images/abos-images/cui-app/flutter_vscode_project_name.png

図3.26 プロジェクト名を入力する


プロジェクトを作成したら、VS Code で my_project のディレクトリを開いてください。

3.1.6.2. 初期設定

Armadillo による開発は、プロジェクト上で編集したファイルを SSH 経由で Armadillo に転送して実行させるという方法で行います。 そのために、 SSH に関わる初期設定などの作成と、それらを Armadillo にインストールさせる手順をプロジェクト作成時に行う必要があります。

まずは、 Armadillo と SSH で接続するための秘密鍵と公開鍵の生成を行います。 以下の手順を実施してください。

VS Code の左ペインの [my_project] から [Setup environment] を実行します。

images/common-images/gw_vscode_setup_environment.png

図3.27 VS Code で初期設定を行う


選択すると、 VS Code の下部に以下のようなターミナルが表示されます。

images/abos-images/cui-app/flutter_vscode_terminal.png

図3.28 VS Code のターミナル


このターミナル上で以下のように入力してください。

 *  Executing task: ./scripts/setup_env.sh

Generating public/private ed25519 key pair.
Enter passphrase (empty for no passphrase): 1
Enter same passphrase again: 2
Your identification has been saved in /home/atmark/.ssh/id_ed25519_vscode
:(省略)

 *  Terminal will be reused by tasks, press any key to close it.  3

図3.29 SSH 用の鍵を生成する


1

パスフレーズを設定します。設定しない場合は何も入力せず Enter を押します。

2

1 でパスフレーズを設定した場合は、確認のため再度入力してください。

3

ここで何か任意のキーを押すとターミナルが閉じます。

パスフレーズを設定した場合は、アプリケーションを Armadillo へ転送する時にパス フレーズの入力を求められることがあります。

[ティップ]

ssh の鍵は $HOME/.ssh/id_ed25519_vscode (と id_ed25519_vscode.pub ) に保存されていますので、 プロジェクトをバックアップする時は $HOME/.ssh も保存してください。

3.1.6.3. SWU イメージの作成

次に、ゲートウェイコンテナアプリケーションのソースファイルと設定ファイル、SSH の公開鍵を含む SWU イメージを作成します。

SWU イメージの作成も VS Code で行います。 VS Code の左ペインの [my_project] から [Generate development swu] を実行します。

images/common-images/gw_vscode_build_dev_swu_image.png

図3.30 VS Code で SWU イメージの作成を行う


VS Code のターミナルに以下のように表示されると SWUイメージの作成は完了です。

./swu/app.desc のバージョンを 0 から 1 に変更しました。
./development.swu を作成しました。
次は Armadillo に ./development.swu をインストールしてください。
 *  Terminal will be reused by tasks, press any key to close it.

図3.31 SWU イメージの作成完了


作成した SWU イメージは my_project ディレクトリ下に development.swu という ファイル名で保存されています。

3.1.6.4. SWU イメージのインストール

上で作成した development.swu を Armadillo へインストールします。 initial_setup.swu をインストールしたときと同様に ABOS Web からインストールさせることも可能ですが、 ここでは ABOSDE を使用してインストールする手順をご紹介します。

図3.32「ABOSDE で Armadillo に SWU をインストール」 のように、目的の Armadillo の隣にある赤枠で囲まれているボタンをクリックしてください。 パスワードの入力を要求されますので、ABOS Web のパスワードを入力してください。 その後、 ~/my_project/development.swu を選択してインストールを開始します。

インストールが成功すると、VS Code のターミナルに Successfully installed SWU と表示されます。

インストール後に自動で Armadillo が再起動し、1分ほど待機するとLED が点滅します。

images/abos-images/abosde_install_swu_tutorial.png

図3.32 ABOSDE で Armadillo に SWU をインストール


3.1.6.5. ssh 接続に使用する IP アドレスの設定

以下の手順にしたがい、 ABOS Web が動作している Armadillo の一覧を確認し、 ssh 接続に使用する Armadillo の IP アドレスを指定してください。 なお、この手順は Armadillo の IP アドレス が変更される度に行う必要があります。

図3.16「ABOSDE で ローカルネットワーク上の Armadillo をスキャンする」 の赤枠で囲われているボタン、 または 図3.17「ABOSDE に表示されている Armadillo を更新する」 の赤枠で囲われているマークをクリックして、 ローカルネットワーク上で ABOS Web が実行されている Armadillo をスキャンしてください。

その後、目的の Armadillo について、図3.33「ABOSDE を使用して ssh 接続に使用する IP アドレスを設定する」 の赤枠で囲われているマークをクリックしてください。

images/abos-images/abosde_monitor_set_ip.png

図3.33 ABOSDE を使用して ssh 接続に使用する IP アドレスを設定する


これにより、指定した Armadillo の IP アドレスを ssh 接続に使用する IP アドレスに設定することができます。 また、プロジェクトディレクトリ内の config/ssh_config ファイルに指定した Armadillo の IP アドレスが記載されます。 ATDE のネットワークを NAT に設定している場合や、ABOS Web を起動していない場合等、 ABOSDE のリストに Armadillo が表示されない場合は、 プロジェクトディレクトリに入っている config/ssh_config ファイルを編集して IP アドレスを書き換えてください。

[ATDE ~/my_project]$ code config/ssh_config
Host Armadillo
    Hostname x.x.x.x 1
    User root
    IdentityFile ${HOME}/.ssh/id_ed25519_vscode
    UserKnownHostsFile config/ssh_known_hosts
    StrictHostKeyChecking accept-new

図3.34 ssh_config を編集する


1

Armadillo の IP アドレスに置き換えてください。

[ティップ]

Armadillo を初期化した場合や、プロジェクトを実行する Armadillo を変えた場合は, プロジェクトの config/ssh_known_hosts に保存されている公開鍵で Armadillo を認識できなくなります。 その場合はファイルを削除するか、「Setup environment」タスクを再実行してください。

3.1.6.6. アプリケーションの実行

ゲートウェイコンテナアプリケーションの開発では、主に app/config ディレクトリ以下に配置されている設定ファイルを編集することで、ゲートウェイコンテナの振る舞いを変更します。 VS Code の左ペインの [my_project] から [App run on Armadillo] を実行することで、 これらの設定ファイル等が Armadillo へ転送されてアプリケーションが起動します。 まずは設定ファイルを変更せずに図3.35「Armadillo 上でアプリケーションを実行する」の赤枠をクリックして、[App run on Armadillo] を実行してください。

images/common-images/gw_vscode_run_armadillo.png

図3.35 Armadillo 上でアプリケーションを実行する


[ティップ]

VS Code のターミナルに以下のメッセージが表示されることがあります。 これが表示された場合は yes と入力して下さい。

Are you sure you want to continue connecting (yes/no/[fingerprint])?

図3.36 実行時に表示されるメッセージ


[App run on Armadillo] を実行すると、30秒ほど経過してから、VS Code のターミナルに次のようなログが10秒おきに表示されます。

2024-08-20 19:59:50,524 <INFO> : {'data': {'CPU_temp': 44.545, 'timestamp': 1724151581}}
2024-08-20 19:59:50,533 <INFO> : {'data': {'CPU_temp': 43.317, 'timestamp': 1724151582}}
2024-08-20 19:59:50,538 <INFO> : {'data': {'CPU_temp': 42.703, 'timestamp': 1724151583}}
2024-08-20 19:59:50,543 <INFO> : {'data': {'CPU_temp': 44.545, 'timestamp': 1724151584}}
2024-08-20 19:59:50,547 <INFO> : {'data': {'CPU_temp': 42.703, 'timestamp': 1724151585}}
2024-08-20 19:59:50,553 <INFO> : {'data': {'CPU_temp': 42.703, 'timestamp': 1724151586}}
2024-08-20 19:59:50,558 <INFO> : {'data': {'CPU_temp': 43.931, 'timestamp': 1724151587}}
2024-08-20 19:59:50,563 <INFO> : {'data': {'CPU_temp': 42.703, 'timestamp': 1724151588}}
2024-08-20 19:59:50,567 <INFO> : {'data': {'CPU_temp': 43.317, 'timestamp': 1724151589}}

このログの内容や表示の頻度などは設定ファイル app/config/sensing_mgr.conf の記載内容で決定されます。 デフォルトでは、クラウドサービスは使用せず、取得した CPU 温度をターミナルに出力するだけの設定になっています。 今度は、app/config/sensing_mgr.conf の内容を編集することで、表示されるログの内容が実際に変化することを確認します。

その前に、現在起動しているアプリケーションを終了するために、 VS Code の左ペインの [my_project] から [App stop on Armadillo] を実行してください。 (このゲートウェイコンテナアプリケーションを停止しても、アプリケーションLED(APP)の点滅は停止しないことに注意してください。)

images/common-images/gw_vscode_stop_armadillo.png

図3.37 アプリケーションを終了する


3.1.6.7. 設定ファイルの編集

ここでは、クラウドサービスを使用しない手軽な方法として、VS Code のターミナルに表示されるログを使用した簡単な動作確認を行います。 クラウドサービスなどを利用した本格的な開発を行うための内容については「ゲートウェイコンテナアプリケーションの開発」をご参照ください。

プロジェクトディレクトリに入っている app/config/sensing_mgr.conf を以下のように編集して保存してください。

[DEFAULT]

(省略)

; send_interval[sec]
send_interval=1 1

(省略)

[CPU_temp]
; type=polling or none
type=none 2

(省略)

[DI1]
; type=polling or edge
type=polling 3
; interval[sec]
interval=1 4
; edge_type=falling or rising or both
edge_type=

(省略)

1

ターミナルに表示されるログの頻度を10秒から1秒に変更します。

2

CPU温度をターミナルに表示させないために、CPU温度の取得を無効にします。

3

接点入力の DI1 を有効にして、その状態(1か0)をターミナルに表示させます。

4

間隔を1秒に設定します。

上記のように編集して保存した後に、[App run on Armadillo] を実行してください。 30秒ほど経過してから、VS Code のターミナルに次のようなログが1秒おきに表示されます。

2024-08-20 20:09:37,444 <INFO> : {'data': {'DI1_polling': 1, 'timestamp': 1724152176}}

Armadillo-IoT ゲートウェイ A6E の DI1 に何も接続されていなければ、DI1_polling の値は常に1となります。

今度は、DI1 にHigh信号を実際に入力して、DI1_polling の値が 0 に変化することを確認します。 図3.38「DI1 にHigh信号を入力する接続」のように配線を行って、DI1 にHigh信号を入力してください。 このとき、VIN と COM を渡す配線を端子台に取り付ける際は、必ず COM → VIN の順番で接続してください。 また、端子台から取り外す際は、必ず VIN → COM の順番で外してください。 (ショート防止のため)

images/a6e-connection-di1.svg

図3.38 DI1 にHigh信号を入力する接続


このように接続すると、DI1_polling の値が0に変化します。

2024-08-20 20:10:37,555 <INFO> : {'data': {'DI1_polling': 0, 'timestamp': 1724152236}}

接続されている配線の VIN 側の一端を外したり接触させたりすることで、 DI1_polling の値が変動することを確認できます。

3.1.6.8. アプリケーションを元に戻す

動作確認として使用した Armadillo 上のゲートウェイコンテナアプリケーションを最初の状態に戻すためには、編集した app/config/sensing_mgr.conf を元に戻して保存した上で、 [App run on Armadillo] を実行してください。

3.1.7. シリアルコンソールを使用する

Armadillo ではシリアルコンソールを通じてLinuxコマンドを直接実行することができます。 シリアルコンソールを活用することで、ABOS Web や ABOSDE からではできない多くのことが可能になるため、 より応用的な開発やメンテナンス・デバッグの際に重宝します。 また、この章以降ではシリアルコンソールを使用した手順が多々登場します。

本項ではシリアル通信ソフトウェア(minicom)を使用したシリアルコンソールの操作方法について記載しています。

[注記]minicomのセットアップについて

ATDE9 v20240925 以降の ATDE では Armadillo 用の minicom の通信設定を既に済ませた状態で配布しています。 これより前のバージョンの場合は、「シリアル通信ソフトウェア(minicom)のセットアップ」 を参照して minicom のセットアップを行ってください。

3.1.7.1. Armadilloと開発用PCを接続

Armadillo-IoT ゲートウェイ A6Eのシリアルコンソールを使用するために、 図3.39「シリアルコンソールを使用する配線例」 のとおりに配線を行ってください。 この配線図はArmadillo-IoT ゲートウェイ A6Eのシリアルコンソールを使用するための最低限の配線ですので、これに加えて他のインターフェースを接続しても問題ありません。

images/a6e-connection-serial.svg

図3.39 シリアルコンソールを使用する配線例


images/common-images/callouts/1.svg
Armadillo-IoT ゲートウェイ A6E
images/common-images/callouts/2.svg
ACアダプタ(12V/2.0A)
images/common-images/callouts/3.svg
作業用PC
images/common-images/callouts/4.svg
シリアル通信用USBケーブル(A-microB)

3.1.7.2. minicom の起動

minicom を起動する前に、Armadillo からのログを表示させるため、表3.2「動作確認に使用する取り外し可能デバイス」に示すデバイスをゲストOSに接続してください。

表3.2 動作確認に使用する取り外し可能デバイス

デバイスデバイス名

USBシリアル変換IC

Silicon CP2102N USB to UART Bridge Controller


図3.40「minicom起動方法」のようにして、minicom を起動してください。 また、minicomを起動する端末の横幅を80文字以上にしてください。横幅が80文字より小さい場合、コマンド入力中に表示が乱れることがあります。

[ATDE ~]$ sudo LANG=C minicom --wrap --device /dev/ttyUSB0

図3.40 minicom起動方法


[注記]

デバイスファイル名は、環境によって /dev/ttyS0/dev/ttyUSB1 など、本書の実行例とは異なる場合があります。

[ティップ]

minicomがオープンする /dev/ttyS0/dev/ttyUSB0 といったデバイスファイルは、 root または dialout グループに属しているユーザーしかアクセスできません。

ユーザーを dialout グループに入れることで、以降、sudoを使わずにminicomで /dev/ttyUSB0 をオープンすることができます。

[ATDE ~]$ sudo usermod -aG dialout atmark
[ATDE ~]$ LANG=C minicom --wrap --device /dev/ttyUSB0

既に電源が接続されていて起動している場合は、Enterを1回押してください。 次のようなログインプロンプトが表示されます。( 「ログイン」

armadillo login:

電源が接続されていない場合は、電源入力インターフェースに電源を接続して Armadillo-IoT ゲートウェイ A6E を起動してください。 CON7 (USB コンソールインターフェース)から以下のような起動ログが表示されます。

以下に起動ログの例を示します。

U-Boot 2020.04-at10(Oct 04 2022 - 11:22:32 +0900)

CPU:   i.MX6ULL rev1.1 at 396 MHz
Model: Atmark Techno Armadillo-IoT Gateway A6E
DRAM:  512 MiB
PMIC: PFUZE3000 DEV_ID=0x30 REV_ID=0x11
MMC:   FSL_SDHC: 0, FSL_SDHC: 1
Loading Environment from MMC... OK
In:    serial
Out:   serial
Err:   serial
Saving Environment to MMC... Writing to MMC(1)... OK
switch to partitions #0, OK
mmc1 is current device
Net:
Warning: ethernet@2188000 using MAC address from ROM
eth0: ethernet@2188000
Normal Boot
Hit any key to stop autoboot:  0
switch to partitions #0, OK
mmc1 is current device
11659840 bytes read in 518 ms (21.5 MiB/s)
Booting from mmc ...
38603 bytes read in 21 ms (1.8 MiB/s)
Loading fdt boot/armadillo.dtb
43 bytes read in 14 ms (2.9 KiB/s)
1789 bytes read in 18 ms (96.7 KiB/s)
Applying fdt overlay: armadillo-iotg-a6e-ems31.dtbo
## Booting kernel from Legacy Image at 80800000 ...
   Image Name:   Linux-5.10.145-32-at
   Created:      2022-10-13   8:10:47 UTC
   Image Type:   ARM Linux Kernel Image (uncompressed)
   Data Size:    11659776 Bytes = 11.1 MiB
   Load Address: 82000000
   Entry Point:  82000000
   Verifying Checksum ... OK
## Flattened Device Tree blob at 83500000
   Booting using the fdt blob at 0x83500000
   Loading Kernel Image
   Loading Device Tree to 9ef2d000, end 9ef59fff ... OK

Starting kernel ...

[    0.601992] imx6ul-pinctrl 2290000.iomuxc-snvs: no groups defined in /soc/bus@2200000/iomuxc-snvs@2290000

   OpenRC 0.44.10 is starting up Linux 5.10.145-32-at (armv7l)

 * Mounting /proc ... [ ok ]
 * Mounting /run ... * /run/openrc: creating directory
 * /run/lock: creating directory
 * /run/lock: correcting owner
 * Caching service dependencies ... [ ok ]
 * Starting atmark firstboot script ... * Mounting /sys ... * Remounting devtmpfs on /dev ... * Starting rngd ... [ ok ]
 [ ok ]
 * Mounting security filesystem ... [ ok ]
 [ ok ]
 * Mounting config filesystem ... [ ok ]
 * Mounting /dev/mqueue ... * Mounting fuse control filesystem ... [ ok ]
 [ ok ]
 * Mounting /dev/pts ... [ ok ]
 * Mounting /dev/shm ... [ ok ]
udev                     | * Starting udev ... [ ok ]
Warning: The kernel is still using the old partition table.
The new table will be used at the next reboot or after you
run partprobe(8) or kpartx(8)
The operation has completed successfully.
Could not create partition 2 from 0 to 614399
Could not create partition 3 from 0 to 102399
Could not create partition 4 from 0 to 409599
Could not create partition 5 from 0 to 20479
Error encountered; not saving changes.
 * partitioning disk failed
fsck                     | * Checking local filesystems  ... [ ok ]
root                     | * Remounting filesystems ... [ ok ]
localmount               | * Mounting local filesystems ... [ ok ]
overlayfs                | * Preparing overlayfs over / ... [ ok ]
hostname                 | * Setting hostname ... [ ok ]
sysctl                   | * Configuring kernel parameters ...udev-trigger
       | * Generating a rule to create a /dev/root symlink ... [ ok ]
 [ ok ]
udev-trigger             | * Populating /dev with existing devices through uevents ... [ ok ]
bootmisc                 | * Migrating /var/lock to /run/lock ... [ ok ]
bootmisc                 | * Creating user login records ... [ ok ]
bootmisc                 | * Wiping /var/tmp directory ... [ ok ]
syslog                   | * Starting busybox syslog ...dbus
 | * /run/dbus: creating directory
 [ ok ]
dbus                     | * /run/dbus: correcting owner
dbus                     | * Starting System Message Bus ... [ ok ]
klogd                    | * Starting busybox klogd ... [ ok ]
networkmanager           | * Starting networkmanager ... [ ok ]
dnsmasq                  | * /var/lib/misc/dnsmasq.leases: creating file
dnsmasq                  | * /var/lib/misc/dnsmasq.leases: correcting owner
dnsmasq                  | * Starting dnsmasq ... [ ok ]
buttond                  | * Starting button watching daemon ... [ ok ]
reset_bootcount          | * Resetting bootcount in bootloader env ...Environment OK, copy 0
reset_bootcount          | [ ok ]
zramswap                 | [ ok ]
zramswap                 | * Creating zram swap device ...podman-atmark
   | * Starting configured podman containers ... [ ok ]
atmark-power-utils       | * Starting atmark-power-utils ... [ ok ]
chronyd                  | * Starting chronyd ... [ ok ]
 [ ok ]
local                    | * Starting local ... [ ok ]

Welcome to Alpine Linux 3.16
Kernel 5.10.145-32-at on an armv7l (/dev/ttymxc2)

armadillo login:

U-Boot プロンプト

ユーザースイッチ(SW1) を押しながら電源を投入すると、 U-Boot のプロンプトが表示されます。

U-Boot 2020.04-at10 (Oct 04 2022 - 11:22:32 +0900)

CPU:   i.MX6ULL rev1.1 at 396 MHz
Model: Atmark Techno Armadillo-IoT Gateway A6E
DRAM:  512 MiB
PMIC: PFUZE3000 DEV_ID=0x30 REV_ID=0x11
MMC:   FSL_SDHC: 0, FSL_SDHC: 1
Loading Environment from MMC... OK
In:    serial
Out:   serial
Err:   serial
Saving Environment to MMC... Writing to MMC(1)... OK
switch to partitions #0, OK
mmc1 is current device
Net:   eth0: ethernet@2188000
Normal Boot
=>

3.1.7.3. ログイン

起動が完了するとログインプロンプトが表示されます。 初期状態では「root」ユーザーと、一般ユーザーである「atmark」ユーザーが存在しますが、「atmark」ユーザーは初期状態ではロックされていますので、「root」ユーザーでログインしてください。 initial_setup.swu をインストールしていない場合、「root」ユーザーは初回ログイン時にパスワードを入力せずに新しいパスワードを促されます。

「root」ユーザーでログインし、 passwd atmark コマンドで「atmark」ユーザーのパスワードを設定することで、「atmark」ユーザーのロックが解除されます。 設定するパスワードには大文字のアルファベット、小文字のアルファベット、0から9までの数字、その他(記号・句読点など)を含める事ができます。

  1. root でログイン

    初期パスワードを変更します。

    armadillo login: root
    You are required to change your password immediately (administrator enforced).
    New password: 1
    Retype new password: 2
    Welcome to Alpine!

    1

    新しいパスワードを入力します

    2

    新しいパスワードを再入力します

  2. atmark でログイン

    「atmark」ユーザーは初期状態ではロックされています。 そのため、「root」ユーザーでログイン後に「atmark」ユーザーのパスワードを設定してから「atmark」ユーザーでログインします。

    armadillo:~# passwd atmark 1
    New password:
    Retype new password:
    passwd: password updated successfully
    armadillo:~# persist_file /etc/shadow 2
    armadillo:~# exit
    
    Welcome to Alpine Linux 3.16
    Kernel 5.10.126-24-at on an armv7l (/dev/ttymxc2)
    
    armadillo login: atmark
    Password: 3
    Welcome to Alpine!

    1

    atmarkユーザーのパスワード変更コマンドです。「SWUイメージの作成」 を使用した場合には不要です。

    2

    パスワードファイルを永続化します。

    3

    設定したパスワードでログインすることができます。

[警告]

Armadillo BaseOS ではルートファイルシステムに overlayfs を採用しており、そのままではシステムが OFF すると内容は消えてしまいます。そのため persist_file コマンドが用意されています。このコマンドを利用することでファイル単位で変更を反映することができます。パスワードを設定した後には以下のコマンドを実行してください。

[armadillo ~]# persist_file /etc/shadow

persist_file コマンドに関する詳細は「persist_file について」を参照してください。

3.1.7.4. Armadillo の終了方法

eMMC や USB メモリ等に書き込みを行っている時に電源を切断すると、データが破損する可能性が有ります。 安全に終了させる場合は、次のように poweroff コマンドを実行し、「reboot: Power down」と表示されたのを確認してから電源を切断します。

armadillo:~# poweroff
armadillo:~# zramswap                 | * Deactivating zram swap device ...podman-atmark            | * Stopping all podman containers ...local
   | * Stopping local ... [ ok ]
 [ ok ]
atmark-power-utils       | * Stopping atmark-power-utils ...rngd
     | * Stopping rngd ...chronyd                  | * Stopping chronyd ...dnsmasq                  | * Stopping dnsmasq ...buttond                  | * Stopping button watching daemon ... [ ok ]
 [ ok ]
 * start-stop-daemon: no matching processes found
 [ ok ]
 [ ok ]
atmark-power-utils       | [ ok ]
klogd                    | * Stopping busybox klogd ... [ ok ]
networkmanager           | * Stopping networkmanager ... [ ok ]
syslog                   | * Stopping busybox syslog ... [ ok ]
udev                     | * Stopping udev ... [ ok ]
dbus                     | * Stopping System Message Bus ...nm-dispatcher: Caught signal 15, shutting down...
 [ ok ]
cgroups                  | * cgroups: waiting for podman-atmark (50 seconds)
 [ ok ]
localmount               | * Unmounting loop devices
localmount               | * Unmounting filesystems
localmount               | *   Unmounting /var/tmp ... [ ok ]
localmount               | *   Unmounting /var/app/volumes ... [ ok ]
localmount               | *   Unmounting /var/app/rollback/volumes ... [ ok ]
localmount               | *   Unmounting /var/lib/containers/storage_readonly ... [ ok ]
localmount               | *   Unmounting /var/log ... [ ok ]
localmount               | *   Unmounting /tmp ... [ ok ]
killprocs                | * Terminating remaining processes ...mount-ro
         | * Remounting remaining filesystems read-only ... *   Remounting / read only ... [ ok ]
mount-ro                 | [ ok ]
indicator_signals        | * Signaling external devices we are shutting down ... [ ok ]
The system is going down NOW!
Sent SIGTERM to all processes
Sent SIGKILL to all processes
Requesting system poweroff
[   99.211013] reboot: Power down
[警告]

haltコマンドで終了させた場合、「reboot: System halted」と表示されてから約128秒後、Armadilloは自動的に再起動します。確実に終了させるためにもpoweroffコマンドを利用してください。

[警告]

電源を再投入する際は、コンデンサに蓄えられた電荷を抜くため、電源を切断後、一定時間以上待つ必要があります。 開発セット付属のACアダプタの場合に必要な時間は以下のとおりです。

  • DCプラグ側で電源を切断した場合 : 約5秒
  • ACプラグ側で電源を切断した場合 : 約1分

コンデンサに蓄えられた電荷が抜ける前に電源を再投入した場合、 電源シーケンスが守られず、起動しない等の動作不具合の原因となります。

3.1.7.5. minicom の終了

minicomを終了させるには、まず Ctrl-a に続いて q キーを入力します。その後、以下のように表示されたら「Yes」にカーソルを合わせてEnterキーを入力するとminicomが終了します。

+-----------------------+
| Leave without reset? |
|     Yes       No     |
+-----------------------+

図3.41 minicom終了確認


3.1.8. ユーザー登録

アットマークテクノ製品をご利用のユーザーに対して、 購入者向けの限定公開データの提供や大切なお知らせをお届けするサービスなど、 ユーザー登録すると様々なサービスを受けることができます。 サービスを受けるためには、「アットマークテクノ Armadilloサイト」 にユーザー登録をする必要があります。

ユーザー登録すると次のようなサービスを受けることができます。

  • 製品仕様や部品などの変更通知の閲覧・配信
  • 購入者向けの限定公開データのダウンロード
  • 該当製品のバージョンアップに伴う優待販売のお知らせ配信
  • 該当製品に関する開発セミナーやイベント等のお知らせ配信

詳しくは、「アットマークテクノ Armadilloサイト」をご覧ください。

3.1.8.1. 購入製品登録

ユーザー登録完了後に、購入製品登録することで、「購入者向けの限定公開データ」をダウンロードすることができるようになります。

購入製品登録の詳しい手順は以下のURLをご参照ください。

以上で開発環境のセットアップと動作確認の手順は終了です。

3.2. アプリケーション開発の流れ

基本的な Armadillo-IoT ゲートウェイ A6E でのアプリケーション開発の流れを図3.42「アプリケーション開発の流れ」に示します。

本章では、図3.42「アプリケーション開発の流れ」に示す開発時の流れに沿って手順を紹介していきます。

images/development-flow-a6e.png

図3.42 アプリケーション開発の流れ


  1. 「開発の準備」に従って開発環境の準備を行います。
  2. 拡張基板を追加するなど、ハードウェアの追加・変更をする場合、「ハードウェアの設計」を行います。

    1. 拡張インターフェース(CON8)のピンを使用する場合「Device Treeをカスタマイズする」を参考にデバイスツリーのカスタマイズを行います。
  3. Armadillo-IoT ゲートウェイ A6E に周辺デバイスを接続して使用する場合は、使用手順を「インターフェースの使用方法とデバイスの接続方法」で確認します。
  4. 「ソフトウェアの設計」を行います。
  5. 「ネットワーク設定」を行います。
  6. Armadillo Twin を使用したデバイス運用管理を検討する場合、「Armadillo Twin を体験する」を行います。
  7. アプリケーションの開発を行います。図3.42「アプリケーション開発の流れ」 の網掛け部分です。

    1. 「ソフトウェアの設計」 でゲートウェイコンテナを使用する場合は、「ゲートウェイコンテナアプリケーションの開発」を行います。
    2. 「ソフトウェアの設計」 でゲートウェイコンテナを使用せずに CUI アプリケーションを開発する場合は、シェスクリプトまたは Python で開発することを推奨します。その場合は「CUI アプリケーションの開発」を行います。
    3. C 言語で開発された既存のアプリケーションを Armadillo 上で動作させる必要がある、あるいは開発環境の制約によって C 言語でのアプリケーション開発が必要な場合、「C 言語によるアプリケーションの開発」を行います。
  8. 開発したアプリケーションの動作確認が完了しましたら、「システムのテストを行う」を行います。
  9. システムのテストが完了しましたら、4章量産編へ進みます。

3.3. 開発前に知っておくべき Armadillo Base OS の機能・特徴

「Armadillo Base OSとは」にて Armadillo Base OS についての概要を紹介しましたが、開発に入るにあたってもう少し詳細な概要について紹介します。

3.3.1. 一般的な Linux OS 搭載組み込み機器との違い

images/abos-images/development-abos-debian-diff.png

Linux OS 搭載組み込み機器ではアプリケーションの実行環境をユーザーランド上に直接用意し、Systemdなどでアプリケーションを自動実行させるのが一般的です。 Armadillo Base OS 搭載機器では、アプリケーションの実行環境をコンテナ内に用意して、コンテナ起動用設定ファイルを所定の場所に配置することでコンテナ(=アプリケーション)を自動実行させます。

また、Linux OS 搭載組み込み機器では、ストレージの保護のために overlayfs で運用するのが一般的です。 そのため、アプリケーションが出力するログや画像などのデータは、 USBメモリなどの外部デバイスに保存する必要があります。 Armadillo Base OS 搭載機器もルートファイルシステムが overlayfs 化されていますが、内部に USBメモリなどと同じように使用できるユーザーデータディレクトリを持っており、別途外部記録デバイスを用意しておく必要はありません。

Armadillo Base OS 搭載機器は、標準でセキュアエレメントを搭載しており、対応した暗号化方式の認証鍵や証明書を安全に保存・利用することが可能です。

3.3.2. Armadillo Base OS 搭載機器のソフトウェア開発手法

images/abos-images/development-abos-app.png

Armadillo Base OS 搭載機器上で動作するソフトウェアの開発は、基本的に作業用PC上で行います。

ネットワークの設定は ABOS Web という機能で、コマンドを直接打たずとも設定可能です。

開発環境として、ATDE(Atmark Techno Development Environment)という仮想マシンイメージを提供しています。 その中で、ABOSDE(Armadillo Base OS Development Environment)という、Visual Studio Code にインストールできる開発用エクステンションを利用してソフトウェア開発を行います。

ABOSDE を使用することで、コンテナ及びコンテナ自動起動用設定ファイルの作成、コンテナ内におけるパッケージのインストール、コンテナ内で動作するアプリケーション本体の開発をすべてVS Code内で行うことができます。

3.3.3. アップデート機能について

Armadillo-IoT ゲートウェイ A6E では、開発・製造・運用時にソフトウェアを書き込む際に、 SWUpdate という仕組みを利用します。

3.3.3.1. SWUpdate とは

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

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

  • 機密性、完全性、真正性の担保
  • A/Bアップデート(アップデートの二面化)
  • リカバリーモード
  • ソフトウェアの圧縮、暗号化、署名付与
  • Armadillo Twin でのリモートアップデート対応
  • Web サーバーでのリモートアップデート対応
  • ダウングレードの禁止
[注記]

2024年2月までは、hawkBit の WebUI を利用したアップデートも紹介していましたが、 hawkBit は 2024年3月22日 に行われたバージョン 0.5.0 へのアップデートで、 これまで採用していた Web UI を廃止しました。 これに伴い、今後 OTA によるアップデートを行いたい場合は、 Armadillo Twin の利用を推奨します。

なお、hawkBit 0.4.1 の配布は継続していますので、こちらを利用する場合は Armadillo-IoT ゲートウェイ A6E 開発用ツール から 「Hawkbit docker-composeコンテナ」 をダウンロードして展開してください。

hawkBit に関する詳細な情報は hawkBit 公式サイト を参照してください。

3.3.3.2. SWU イメージとは

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

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

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

SWU イメージは swupdate (https://sbabic.github.io/swupdate/swupdate.html) によって Armadillo Base OS上で検証とインストールが実行されます。 SWU イメージを Armadillo に転送するための方法は、用途や状況に合わせて様々な方法を用意しています。例えば、 USB メモリから読み取る、ウェブサーバーからダウンロードするなどです。

3.3.3.3. 機密性、完全性、真正性の担保

ユーザーは SWU イメージをネットワーク/ストレージ経由で Armadillo にインストールします。

インターネットを通じて Armadillo にインストールする場合、以下の脅威が存在することが考えられます。

  • 攻撃者が正規のユーザーを偽りデータをインストールする(なりすまし)
  • データの一部を悪意のあるコードに書き換えられる(改ざん)
  • データを盗み見される(盗聴)

Armadillo Base OS では暗号化技術、SHA-256 によるハッシュ化、デジタル署名を駆使することで、インストールするデータに対する機密性、完全性、真正性を保証します。

それらの機能は SWUpdate によって実現しています。 SWUpdate は以下の対策を提供します。

  • SWU イメージ内の Armadillo にインストールするデータを暗号化する
  • デジタル署名により正規の SWU イメージであることを保証する
  • 復号したデータに対してもチェックサムの値を計算して、インストールするデータが正しいことを保証する

これらの対策により、たとえ攻撃者が不正な SWU イメージを Armadillo に送信したとしてもデジタル署名により正規の SWU イメージでないことが分かります。

攻撃者がインターネット上で SWU イメージ内のデータを書き換えたとしても、インストール前にそのデータに対してチェックサムが正しいかを確認します。 そのため、不正なデータが Armadillo にインストールされることはありません。

また、攻撃者がネットワーク上で SWU イメージのデータを盗み見たとしても暗号化されているので、重要なデータが漏洩することもありません。

3.3.3.4. A/Bアップデート(アップデートの二面化)

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

常に使用していない方のパーティションを書き換えるため次の特徴を持ちます。

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

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

アップデート直後に起動に失敗した場合、起動可能な状態へ復帰するためアップデート前の状態にロールバックします。

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

自動ロールバックが動作する条件は以下の通りです:

  • アップデート直後の再起動、または「 abos-ctrl rollback-clone 」コマンドを実行した後(アップデートが成功した後では古いバージョンに戻りません)
  • 以下のどちらかに該当した場合:

    • rootfs にブートに必要なファイルが存在しない (/boot/uImage, /boot/armadillo.dtb)
    • 起動を 3 回試みて、Linux ユーザーランドの「reset_bootcount」サービスの起動まで至らなかった

また、ユーザースクリプト等で「abos-ctrl rollback」コマンドを実行した場合にもロールバック可能となります。 このコマンドで「 --allow-downgrade 」オプションを設定すると古いバージョンに戻すことも可能です。

いずれの場合でもロールバックが実行されると /var/at-log/atlog にログが残ります。

[注記]

Armadillo Base OS 3.19.1-at.4 以前のバージョンではアップデート直後の条件が存在しなかったため、古いバージョンに戻ることができる問題がありました。

最新の Armadillo Base OS へのアップデートを推奨しますが、上記バージョン以前の Armadillo Base OS をご利用でダウングレードを防ぎたい場合は、以下のコマンドを入力することで回避可能です:

[armadillo ~]# sed -i -e 's/fw_setenv bootcount/& \&\& fw_setenv upgrade_available/' /etc/init.d/reset_bootcount
[armadillo ~]# tail -n 3 /etc/init.d/reset_bootcount
        fw_setenv bootcount && fw_setenv upgrade_available
        eend $? "Could not set bootloader env"
}
[armadillo ~]# persist_file -v /etc/init.d/reset_bootcount
'/mnt/etc/init.d/reset_bootcount' -> '/target/etc/init.d/reset_bootcount'

3.3.3.6. SWU イメージのインストール

イメージをインストールする方法として以下に示すような方法があります。

  • 手元でイメージをインストールする方法

    • ABOS Web を使用した手動インストール
    • ABOSDE から ABOS Web を使用した手動インストール
    • USBメモリまたは microSD カードからの自動インストール
    • 外部記憶装置からイメージのインストール(手動)
  • リモートでイメージをインストールする方法

    • Armadillo Twin を使用した自動インストール
    • ウェブサーバーからイメージのインストール(手動)
    • ウェブサーバーからの定期的な自動インストール

それぞれのインストール方法の詳細については、以下に記載しております。 もし、作成した SWU イメージのインストールに失敗する場合は、「swupdate がエラーする場合の対処」をご覧ください。

  • ABOS Web を使用した手動インストール

    Armadillo-IoT ゲートウェイ A6E で動作している Web アプリケーションのABOS Webを使用してアップデートすることができます。 「SWUインストール」を参考にしてください。

  • ABOSDE から ABOS Web を使用した手動インストール

    VS Code 拡張機能の ABOSDE を使用することで、Armadillo-IoT ゲートウェイ A6E で動作している ABOS Web 経由でアップデートすることができます。 「Armadillo に SWU をインストールする」を参考にしてください。

  • USBメモリまたはmicroSDカードからの自動インストール

    Armadillo-IoT ゲートウェイ A6EにUSBメモリを接続すると自動的にアップデートが始まります。 アップデート終了後にArmadillo-IoT ゲートウェイ A6Eは自動で再起動します。

    USBメモリやmicroSDカードをvfatもしくはext4形式でフォーマットし、作成した.swuのファイルをディレクトリを作らずに配置してください。

    [ティップ]

    ATDE上でUSBメモリ/microSDカードのパーティションを作成・フォーマットする方法

    https://armadillo.atmark-techno.com/howto/atde-partition-howto

    [ATDE ~/mkswu]$ df -h
    Filesystem           Size  Used Avail Use% Mounted on
    : (省略)
    /dev/sda1        15G  5.6G  9.1G  39% /media/USBDRIVE 1
    [ATDE ~/mkswu]$ cp initial_setup.swu /media/USBDRIVE/ 2
    [ATDE ~/mkswu]$ umount /media/USBDRIVE 3

    1

    USBメモリがマウントされている場所を確認します。

    2

    ファイルをコピーします。

    3

    /media/USBDRIVEをアンマウントします。コマンド終了後にUSBメモリを取り外してください。

    エラーの場合、/var/log/messageに保存されます。例えば、コンソールで証明書が間違っているイメージのエラーは以下の様に表示されます。

    [armadillo ~]# tail /var/log/messages
    Nov 19 10:48:42 user.notice swupdate-auto-update: Mounting sda0 on /mnt
    Nov 19 10:48:42 user.notice swupdate-auto-update: Trying update /mnt/initial_setup.swu
    Nov 19 10:48:42 user.info swupdate: START Software Update started !
    Nov 19 10:48:42 user.err swupdate: FAILURE ERROR : Signature verification failed 1
    Nov 19 10:48:42 user.err swupdate: FAILURE ERROR : Compatible SW not found
    Nov 19 10:48:42 user.err swupdate: FATAL_FAILURE Image invalid or corrupted. Not installing ...

    1

    証明書エラーのメッセージ。

  • 外部記憶装置からイメージのインストール(手動)

    USBメモリやmicroSDカード等の外部記憶装置のルートディレクトリ以外にSWUイメージを保存して、イメージのインストールを行います。 ルートディレクトリに保存すると自動アップデートが行われますので、/var/log/messagesを確認してください。

    以下は外部記憶装置が/dev/mmcblk1p1(microSDカード)として認識された場合に、イメージのインストールを行う例です。

    [armadillo ~]# mount /dev/mmcblk1p1 /mnt
    [armadillo ~]# swupdate -i /mnt/swu/initial_setup.swu
    SWUpdate v5f2d8be-dirty
    
    Licensed under GPLv2. See source distribution for detailed copyright notices.
    
    [INFO ] : SWUPDATE running :  [main] : Running on AGX4500 Revision at1
    [INFO ] : SWUPDATE started :  Software Update started !
    [INFO ] : SWUPDATE running :  [read_lines_notify] : No base os update: copying current os over
    [INFO ] : SWUPDATE running :  [read_lines_notify] : Removing unused containers
    [INFO ] : SWUPDATE running :  [read_lines_notify] : swupdate triggering reboot!
    Killed
  • Armadillo Twin を使用した自動インストール

    Armadillo Twin で Armadillo-IoT ゲートウェイ A6E を複数台管理してアップデートすることができます。 「Armadillo Twin から複数の Armadillo をアップデートする」を参考にしてください。

  • ウェブサーバーからイメージのインストール(手動)

    SWUイメージをウェブサーバーにアップロードして、イメージのインストールを行います。 以下は、http://server/initial_setup.swu のイメージをインストールする例です。

[armadillo ~]# swupdate -d '-u http://server/initial_setup.swu'
SWUpdate v5f2d8be-dirty

Licensed under GPLv2. See source distribution for detailed copyright notices.

[INFO ] : SWUPDATE running :  [main] : Running on AGX4500 Revision at1
[INFO ] : SWUPDATE running :  [channel_get_file] : Total download size is 25 kB.
[INFO ] : SWUPDATE started :  Software Update started !
[INFO ] : SWUPDATE running :  [read_lines_notify] : No base os update: copying current os over
[INFO ] : SWUPDATE running :  [read_lines_notify] : Removing unused containers
[INFO ] : SWUPDATE running :  [read_lines_notify] : swupdate triggering reboot!
Killed
  • ウェブサーバーからの定期的な自動インストール

    swupdate-urlを有効にしたら、定期的にチェックしてインストールします。 以下はサービスの有効化とタイミングの設定の例です。

    [armadillo ~]# rc-update add swupdate-url 1
    [armadillo ~]# persist_file /etc/runlevels/default/swupdate-url 2
    [armadillo ~]#
        echo https://download.atmark-techno.com/armadillo-iot-a6e/image/baseos-6e-latest.swu \
                            > /etc/swupdate.watch 3
    [armadillo ~]# echo 'schedule="0 tomorrow"' > /etc/conf.d/swupdate-url
    [armadillo ~]# echo 'rdelay="21600"' >> /etc/conf.d/swupdate-url 4
    [armadillo ~]# persist_file /etc/swupdate.watch /etc/conf.d/swupdate-url 5

    1

    swupdate-urlサービスを有効します。

    2

    サービスの有効化を保存します。

    3

    イメージのURLを登録します。一行ごとにイメージのURLを設定することができ、複数行にイメージのURLを設定することができます。

    4

    チェックやインストールのスケジュールを設定します。

    5

    変更した設定ファイルを保存します。

    USBメモリからのアップデートと同様に、ログは/var/log/messagesに保存されます。

    [ティップ]

    initial_setupのイメージを作成の際に /usr/share/mkswu/examples/enable_swupdate_url.desc を入れると有効にすることができます。

3.3.4. ファイルの取り扱いについて

Armadillo Base OS ではルートファイルシステムに overlayfs を採用しています。

その為、ファイルを変更した後 Armadillo の電源を切ると変更内容は保持されません。 開発中などに rootfs の変更内容を保持するには、変更したファイルに対して persist_file コマンドを使用します。

[armadillo ~]# echo test > test
[armadillo ~]# persist_file -v test
'/root/test' -> '/mnt/root/test'

図3.43 persist_file コマンド実行例


persist_file コマンドの詳細については、「persist_file について」を参照してください。

また、 SWUpdate によってルートファイルシステム上に配置されたファイルについては、 persist_file を実行しなくても保持されます。 開発以外の時は安全のため、 persist_file コマンドではなく SWUpdate による更新を実行するようにしてください。

3.3.4.1. 電源を切っても保持されるディレクトリ(ユーザーデータディレクトリ)

「ファイルの取り扱いについて」 にて、 Armadillo Base OS 上のファイルは通常、 persist_file コマンドを実行せずに電源を切ると変更内容が保存されないと紹介しましたが、表3.3「電源を切っても保持されるディレクトリ(ユーザーデータディレクトリ)」に示すディレクトリ内にあるファイルはこの限りでありません。

表3.3 電源を切っても保持されるディレクトリ(ユーザーデータディレクトリ)

ディレクトリ 備考

/var/app/volumes

SWUpdate の最中や後も保持され続けます。ロールバックが発生しても、アップデート前の状態には戻りません。ログやデータベースなど、アプリケーションが動作中に作成し続けるようなデータはこのディレクトリに保存してください。

/var/app/rollback/volumes

SWUpdate の最中や後も保持され続けます。ロールバックが発生すると、アップデート前の状態に戻ります。コンフィグファイルなど、アプリケーションのバージョンに追従してアップデートするようなデータはこのディレクトリに保存してください。


[ティップ]

コンテナを前のバージョンに戻した場合(ロールバック)、/var/app/rollback/volumes/ のデータの前のバージョンに戻ります。

その為、アプリケーションのバージョンに依存するようなデータは /var/app/rollback/volumes/ に入れることを推奨します。

mkswuswdesc_files (--extra-os 無し)と podman_startadd_volumes では、相対パスはそのディレクトリをベースにします。 /var/app/rollback/volumes/myvolumemyvolume で簡潔に指定できます。

[警告]

Copy-on-Write (CoW) について。

この二つの volumes ディレクトリは btrfs と呼ばれるファイルシステムに保存されています。 btrfs ではデータは Copy on Write(CoW)を使ってデータ完全性を保証しますが、その保証にはコストがあります。

数百 MB のファイルに小さな変更を頻繁に行う場合 CoW を無効化することを推奨します。 CoW を無効化されたファイルにチェックサムが入らなくなりますので、極端な場合以外に残してください。

[armadillo ~]# cd /var/app/volumes/
[armadillo /var/app/volumes]# mkdir database
[armadillo /var/app/volumes]# chattr +C database 1
[armadillo /var/app/volumes]# echo example data > database/example
[armadillo /var/app/volumes]# lsattr database/ 2
---------------C---- database/example

図3.44 chattr によって copy-on-write を無効化する例


1

chattr +C でディレクトリに NoCow を設定します。これから作成されるファイルが NoCow で作成されます。すでに存在していたファイルに影響ないのでご注意ください。

2

lsattr 確認します。リストの C の字があればファイルが「no cow」です。

3.3.5. インストールディスクについて

インストールディスクは、 Armadillo の eMMC の中身をまとめて書き換えることのできる microSD カードを指します。 インストールディスクは、インストールディスクイメージを microSD カードに書き込むことで作成できます。

インストールディスクには以下の2つの種類があります。

  • 初期化インストールディスク

    Armadillo-IoT ゲートウェイ A6E インストールディスクイメージ にある標準イメージです。 Armadillo を初期化する際に使用します。

  • 開発が完了した Armadillo-IoT ゲートウェイ A6E をクローンするためのインストールディスク。

    量産時など、特定の Armadillo を複製する際に使用されます。 詳しくは、4章量産編で説明します。

3.3.5.1. 初期化インストールディスクの作成

  1. 512 MB 以上の microSD カードを用意してください。
  2. 標準のインストールディスクイメージを使用する場合は、 Armadillo-IoT ゲートウェイ A6E インストールディスクイメージ から 「Armadillo Base OS」を ATDE にダウンロードしてください。

    「Armadilloのソフトウェアをビルドする」 でビルドしたイメージを使用してインストールディスクを作成したい場合は、 以下のコマンドを実行して、インストールディスクイメージを作成してください。

    [ATDE ~/build-rootfs-[VERSION]]$ sudo ./build_image.sh --board a6e
    : (省略)
    [ATDE ~/build-rootfs-[VERSION]]$ ls baseos-6e*img
    baseos-6e-[VERSION].img
    [ATDE ~/build-rootfs-[VERSION]]$ sudo ./build_image.sh --board a6e \
            --boot ~/imx-boot-[VERSION]/imx-boot_armadillo_6e \
            --installer ./baseos-6e-[VERSION].img

    コマンドの実行が完了すると、baseos-6e-[VERSION]-installer.img というファイルが作成されていますので、 こちらを使用してください。

  3. ATDE に microSD カードを接続します。詳しくは「取り外し可能デバイスの使用」を参考にしてください。
  4. microSD カードのデバイス名を確認します

    [ATDE ~]$ ls /dev/sd?
    /dev/sda  /dev/sdb
    [ATDE ~]$ sudo fdisk -l /dev/sdb
    Disk /dev/sdb: 7.22 GiB, 7751073792 bytes, 15138816 sectors
    Disk model: SD/MMC
    : (省略)
  5. microSD カードがマウントされている場合、アンマウントします。

    [ATDE ~]$ mount
    : (省略)
    /dev/sdb1 on /media/52E6-5897 type ext2 (rw,nosuid,nodev,relatime,uid=1000,gid=1000,fmask=0022,dmask=0077,codepage=cp437,iocharset=utf8,shortname=mixed,showexec,utf8,flush,errors=remount-ro,uhelper=udisks)
    [ATDE ~]$ sudo umount /dev/sdb1
  6. ダウンロードしたファイルを展開し、imgファイルをmicroSDカードに書き込んでください。

    Linux PCの場合、以下のようにmicroSDカードに書き込むことができます。

    [ATDE ~]$ unzip baseos-6e-installer-[VERSION].zip
    [ATDE ~]$ sudo dd if=baseos-6e-installer-[VERSION].img \
                      of=/dev/sdb bs=1M oflag=direct status=progress

    また、Windowsの場合、エクスプローラー等でZipファイルからimgファイルを取り出し、「Win32 Disk Imager」などを使用してmicroSDカードに書き込むことができます。

[注記]

インストールディスク作成時に SBOM を作成する場合は build_image.sh の引数に --sbom を渡してください。 ライセンス情報等を記載するためのコンフィグファイルはデフォルトは baseos_sbom.yaml となっています。 コンフィグファイルを変更する場合は --sbom-config <config> に引数を入れてください。 また、コンテナイメージを含める場合等に外部の SBOM を入れる必要がある場合は --sbom-external <sbom> に引数を入れてください。 SBOM のライセンス情報やコンフィグファイルの設定方法については 「ビルドしたルートファイルシステムの SBOM を作成する」 をご覧ください。

3.3.5.2. インストールディスクを使用する

  1. SW2(起動デバイス設定スイッチ)を ON にします(起動デバイスを microSD に設定されます)。
  2. microSD カードを microSD スロットに挿入します。
  3. 電源を投入すると、1分程度でeMMCのソフトウェアの初期化が完了します。
  4. 完了すると電源が切れます(SYS(システムLED)が消灯、コンソールに reboot: Power down が表示)。
  5. 電源を取り外し、続いて SW2 を OFF に設定し、microSD カードを外してください。
  6. 10秒以上待ってから再び電源を入れると、初回起動時と同じ状態になります。

3.4. ハードウェアの設計

Armadillo-IoT ゲートウェイ A6Eの機能拡張や信頼性向上のための設計情報について説明します。

3.4.1. 信頼性試験データについて

Armadillo-IoT ゲートウェイ A6Eの各種信頼性試験データを、「アットマークテクノ Armadilloサイト」から 「購入者向けの限定公開データ」としてダウンロード可能ですのでご確認ください。

3.4.2. 放射ノイズ

CON8(拡張インターフェース)を使用して、Armadillo-IoT ゲートウェイ A6Eと拡張基板を接続すると、 放射ノイズが問題になる場合があります。放射ノイズを減らすために、以下の対策が効果的です。

  • Armadillo-IoT ゲートウェイ A6EのGND(固定穴等)と拡張基板のGNDを太い導線や金属スペーサ等で接続する
  • 未使用の拡張ピンはLowレベル出力とする
  • 使用する拡張ピンはコンデンサ(1000pF程度)を介してGNDと接続する
  • ハーネスケーブル等で拡張する場合は、最短で接続する。
  • シールド付きのケーブルを使用する

    • 長さが余る場合は、ケーブルを折りたたむ
    • シールドは拡張基板のGNDに接続する

3.4.3. ESD/雷サージ

Armadillo-IoT ゲートウェイ A6EのESD耐性を向上させるために、以下の対策が効果的です。

  • Armadillo-IoT ゲートウェイ A6Eを金属筐体に組み込み、GND(固定穴等)を金属ねじ等で接続する
  • 金属筐体を接地する

また、Armadillo-IoT ゲートウェイ A6Eに接続されたケーブルが屋外に露出するような設置環境では、 ケーブルに侵入した雷サージ等のストレスによりインターフェース回路が破壊される場合があります。 ストレスへの耐性を向上させるために、以下の対策が効果的です。

  • Armadillo-IoT ゲートウェイ A6Eと通信対向機のGND接続を強化する
  • シールド付きのケーブルを使用する

3.4.4. 周辺装置との接続

Armadillo-IoT ゲートウェイ A6Eと周辺装置の接続例を図3.45「Armadillo-IoT ゲートウェイ A6Eの接続例」に示します。

images/ag6271-connection.svg

図3.45 Armadillo-IoT ゲートウェイ A6Eの接続例


images/common-images/callouts/1.svg
Armadillo-IoT ゲートウェイ A6E
images/common-images/callouts/2.svg
ACアダプタ(12V/2A)
images/common-images/callouts/3.svg
作業用PC
images/common-images/callouts/4.svg
シリアル通信用USBケーブル(A-microB)
images/common-images/callouts/5.svg
LAN HUB
images/common-images/callouts/6.svg
Ethernetケーブル
images/common-images/callouts/7.svg
nanoSIMカード
images/common-images/callouts/8.svg
LTE用外付けアンテナ

3.4.5. 拡張基板の設計

Armadillo-IoT ゲートウェイ A6E の拡張インターフェース(CON8)には、複数の機能をもった信号線が接続されており、様々な機能拡張が可能です。 垂直方向に拡張して製品付属のケースに収める場合と、水平方向に拡張してオプション品のArmadillo-IoT ゲートウェイA6E 標準ケースセット ロング(9M) (OP-CASEA6E-PLA-20)に収める場合の制限事項について説明します。

[ティップ]

拡張インターフェースのピン配置マルチプレクス表は 「Armadillo-IoT ゲートウェイ A6E マルチプレクス表」からダウンロードしてください。

3.4.5.1. 垂直方向に拡張基板を配置した場合の接続例

垂直方向に拡張基板を配置することで、ケースのサイズを変えることなく機能拡張が可能です。

CON8(拡張インターフェース)と拡張基板はストレートアングルのピンヘッダおよびピンソケットで接続します。

一般的なピンソケットを実装した場合、嵌合高さは約 11mm となります。

拡張ボード固定用に、φ2.3mm の穴を 2 箇所用意しており、M2のスペーサーとねじで拡張基板を固定することが可能です。

images/aiot-a6e-ext-board.svg

図3.46 垂直方向に拡張基板を配置した場合の接続例


3.4.5.2. 水平方向に拡張した場合の接続例

水平方向に拡張基板を配置し、オプション品のArmadillo-IoTゲートウェイA6E 標準ケースセットロング(9M) (OP-CASEA6E-PLA-20)を使用することで、外部コネクタの増設が可能になります。

CON8(拡張インターフェース)と拡張基板はライトアングルのピンヘッダおよびピンソケットで接続します。

images/aiot-a6e-ext-board-horizon.png

図3.47 水平方向に拡張基板を配置した場合の接続例


本製品と拡張基板を接続するための推奨コネクタは表3.4「推奨コネクタ」のとおりです。

表3.4 推奨コネクタ

メーカー 型番

本製品側推奨コネクタ

Sullins Connector Solutions

PRPC017DBAN-M71RC

拡張基板側推奨コネクタ

Sullins Connector Solutions

PPPC172LJBN-RC


搭載例は以下のとおりです。

images/aiot-a6e-ext-board-horizon-case.png

図3.48 Armadillo-IoTゲートウェイA6E 標準ケースセットロング(9M) (OP-CASEA6E-PLA-20)搭載例


Armadillo-IoTゲートウェイA6E 標準ケースセットロング(9M) (OP-CASEA6E-PLA-20)の詳細は「Armadillo-IoTゲートウェイA6E 標準ケースセットロング(9M)」をご参照ください。

3.4.5.3. 水平方向に拡張する場合の基板形状図

images/aiot-a6e-ext-board-dimension.png

図3.49 水平方向に拡張する場合の基板形状図


3.4.5.4. 水平方向に拡張する場合の部品搭載制限

images/aiot-a6e-ext-board-a-side-no-parts-area-dimension.png

図3.50 水平方向に拡張する場合の部品搭載制限(A面側)


images/aiot-a6e-ext-board-b-side-no-parts-area-dimension.png

図3.51 水平方向に拡張する場合の部品搭載制限(B面側)


3.4.6. 電気的仕様

3.4.6.1. 絶対最大定格

表3.5 絶対最大定格

項目 記号 Min. Max. 単位 備考

電源電圧

VIN

-0.3

26.4

V

CON5,CON6

入出力電圧(GPIO信号)

VI,VO

-0.3

OVDD+0.3

V

CON8(OVDD=VCC_3.3V)

入出力電圧(RS-485信号)

VI_RS485

VO_RS485

-8.0

12.5

V

CON6(DATA+,DATA-)

入力電圧(接点入力)

VI_DI

-26.4

26.4

V

CON6(DI1,DI2,COM)

出力耐圧(接点出力)

Voff_DO

-60

60

V

CON6(DO1A,DO1B,DO2A,DO2B)

RTCバックアップ電源電圧

RTC_BAT

-0.3

5.5

V

CON10

動作温度範囲

Topr

-20

60

結露なきこと


[警告]

絶対最大定格は、あらゆる使用条件や試験状況において、瞬時でも超えてはならない値です。上記の値に対して余裕をもってご使用ください。

3.4.6.2. 推奨動作条件

表3.6 推奨動作条件

項目 記号 Min. Typ. Max. 単位 備考

電源電圧

VIN

8

12

26.4

V

CON5,CON6

RTCバックアップ電源電圧

RTC_BAT

2.4

3

3.6

V

CON10,対応電池 : CR1220等


3.4.6.3. 入出力仕様

  • 電源入力仕様

    表3.7 電源入力仕様

    項目 記号 Min. Typ. Max. 単位 備考

    電源電圧

    VIN

    8

    12

    26.4

    V

    CON5,CON6


  • 電源出力仕様

    表3.8 電源出力仕様

    項目 記号 Min. Typ. Max. 単位 備考

    5V 電源電圧

    VCC_5V

    4.75

    5

    5.25

    V

    CON8

    3.3V 電源電圧

    VCC_3.3V

    3.102

    3.3

    3.498

    V

    CON8

    USB VBUS 電圧

    USB_OTG1_VBUS

    4.75

    5

    5.25

    V

    CON9


  • 入出力インターフェース(CON6)の入出力仕様

    表3.9 入出力インターフェース(CON6)の入出力仕様

    接点入力

    入力インピーダンス

    4.7 kΩ

    定格電圧

    DC 8~26.4 V

    入力ON電流

    1.0 mA 以上

    入力OFF電流

    0.2 mA 以下

    接点出力

    定格電圧

    最大 48 V

    定格電流

    最大 500 mA

    応答時間

    2ms 以内

    出力形式

    無極性

    絶縁耐圧

    2kV


  • 拡張インターフェース(CON8)の入出力仕様

    表3.10 拡張インターフェース(CON8)の入出力仕様(OVDD = VCC_3.3V)

    項目 記号 Min. Max. 単位 備考

    ハイレベル出力電圧

    VOH

    OVDD-0.15

    OVDD

    V

    IOH = -0.1mA, -1mA

    ローレベル出力電圧

    VOL

    0

    0.15

    V

    IOL = 0.1mA, 1mA

    ハイレベル入力電圧[a]

    VIH

    0.7xOVDD

    OVDD

    V

    -

    ローレベル入力電圧[a]

    VIL

    0

    0.3xOVDD

    V

    -

    入力リーク電流(no Pull-up/Pull-down)

    IIN

    -1

    1

    μA

    -

    Pull-up抵抗(5kΩ)

    -

    4

    6

    -

    Pull-up抵抗(47kΩ)

    -

    37.6

    56.4

    -

    Pull-up抵抗(100kΩ)

    -

    80

    120

    -

    Pull-down抵抗(100kΩ)

    -

    80

    120

    -

    [a] オーバーシュートとアンダーシュートは0.6V以下でかつ4nsを超えないようにしてください。


3.4.6.4. 電源回路の構成

Armadillo-IoT ゲートウェイ A6Eの電源回路の構成は図3.52「電源回路の構成」のとおりです。

images/ag6271-block-power.svg

図3.52 電源回路の構成


電源シーケンスは次のとおりです。

images/a6e-power-sequence.svg

図3.53 電源シーケンス


入力電圧(VIN)を電源ICで各電圧に変換し、内部回路および各インターフェースに供給しています。 各インターフェースやスイッチング・レギュレータの最大出力電流値を超えないように、 外部機器の接続、供給電源の設計を行なってください。

[ティップ]

WLAN モデル、LAN モデルはLTE非搭載のため、図3.52「電源回路の構成」からLTEと直前のLDOを除外した構成となります。

3.4.7. 各動作モードにおける電源供給状況

各動作モードにおける電源供給状況は以下の通りです。

表3.11 各動作モードにおける電源供給状況

動作モードVCC_5VVCC_3.3V

電源未接続

OFF

OFF

Shutdown

ON

OFF

Sleep(SMS)

ON

ON

Sleep

ON

ON

Active

ON

ON


3.4.8. rebootコマンドによる再起動時の電源供給について

rebootコマンドで再起動した場合の各電源供給状況は以下の通りです。

表3.12 rebootコマンドで再起動した場合の各電源供給状況

電源供給状況

VCC_5V

供給を保持します

VCC_3.3V

供給を保持します


3.4.9. 形状図

3.4.9.1. 筐体形状図

images/ag6271-case-dimension.svg

図3.54 筐体形状


3.4.9.2. 基板形状図

images/ag6271-board-dimension-hole.svg

図3.55 基板形状および固定穴寸法


images/ag6271-board-dimension-parts.svg

図3.56 コネクタ、スイッチ、LED位置


images/a6e-board-dimension-height.svg

図3.57 部品高さ


[ティップ]

型番により部品の搭載/非搭載が異なります。詳細は納入仕様書をご確認ください。

本製品シリーズの納入仕様書は、アットマークテクノ Armadilloサイト(https://armadillo.atmark-techno.com/resources/documents/armadillo-iot-a6e/spec)からご覧いただけます。(要ログイン)

[警告]

基板改版や部品変更により、基板上の部品位置、高さは変更になることがあります。 ケースや拡張基板を設計する場合、ある程度の余裕をもった寸法での設計をお願いいたします。

[ティップ]

DXF形式の形状図を「アットマークテクノ Armadilloサイト」から「購入者向けの限定公開データ」としてダウンロード可能です。

3.4.9.3. LTE アンテナ形状図

images/a6e-lte-antenna-dimension.svg

図3.58 LTE アンテナ形状図


3.4.10. オプション品

Armadillo-IoT ゲートウェイ A6E のオプション品については、「オプション品」 を参照してください。

3.5. ケースの組み立てと分解方法

本製品はねじを使用しないスナップフィット方式を採用しており、容易に組み立てと分解が可能です。分解する際には手のけがやパーツの破損を防止するためマイナスドライバーなどの工具を使用してください。

[ティップ]

組み立てや分解を行う際は以下の動画を参考にしてください。 (https://www.youtube.com/watch?v=MIADkKwxZmU)

images/aiot-a6e-case-assembly.svg

図3.59 ケースモデル展開図


表3.13 ケースモデル展開図パーツ一覧

番号名称説明

1

ケーストップ

ケース上側のパーツです。 ケースボトムとは4か所のツメで固定されます。 ケースを分解する際は、マイナスドライバーを使用してツメを破損させないよう慎重に取り外してください。

2

ケースボトム

ケース下側のパーツです。

3

フック

ケースをDINレールに固定するためのパーツです。

4

基板

5

カバーパーツA

ケース開口部のカバーです。 ケーストップとは1か所のツメで固定されます。

6

カバーパーツB

ケース開口部のカバーです。 ケーストップとは1か所のツメで固定されます。

7

カバーパーツC

ケース開口部のカバーです。 ケーストップとは1か所のツメで固定されます。

8

カバーパーツD

ケース開口部のカバーです。 ケーストップとは1か所のツメで固定されます。

9

LEDライトパイプ

カバーパーツCに装着するLEDのライトパイプです。強い衝撃を加えた場合、ライトパイプが外れる場合がありますので、図3.59「ケースモデル展開図」を参考にカバーパーツCの丸穴に差し込んでください。


フックは以下の図を参考に取り付けてください。

images/aiot-a6e-case-lock-step1.svg

図3.60 フック取り付け1


images/aiot-a6e-case-lock-step2.svg

図3.61 フック取り付け2


3.5.1. ケースの組み立て手順

[警告]

microSDカードの取り付けは、ケースの組み立て前に行う必要があります。取り付け手順については、「microSDカードの挿抜方法」を参照してください。

以下の手順に従い、ケースを組み立ててください。

  1. 基板をケーストップに入れる
  2. ケースボトムをケーストップにはめ込み、基板を固定する
  3. フックをケースボトムにはめ込む
  4. カバーパーツをケーストップにはめ込む

3.5.2. ケースの分解

[警告]

WLAN+BT コンボモジュールを搭載した製品におきましては、ケーストップに貼り付けられているWLAN基板アンテナのケーブルが製品基板のANT3と接続しています。 ケースを分解する際に、無理な力をかけるとケーブル部が破損する場合がありますので、慎重に作業してください。

images/a6e-wlan-interface.jpg

図3.62 WLAN基板アンテナの位置


[警告]

ツメに強い力を加えますと破損する恐れがありますので、十分ご注意ください。

マイナスドライバーなどの工具を用意してください。以下の手順に従い、ケースを分解してください。

  1. フックをケースボトムから取り外す
  2. ケースボトムを取り外す
  3. 基板を取り外す
  4. カバーパーツを取り外す

フックはツメで固定されていますので、図3.63「フックのツメ」を参考にツメを押しながらフックを引き出してください。

images/aiot-a6e-case-fook.svg

図3.63 フックのツメ


ケースボトムはツメ4か所で固定されていますので、図3.64「ケースボトムのツメ」を参考にマイナスドライバーをケースの隙間に差し込み順に外してください。

images/aiot-a6e-case-bottom.svg

図3.64 ケースボトムのツメ


Cat.1モデル, Cat.M1モデルではアンテナコネクタがケース開口部より飛び出しているため、反対側のLANコネクタ側から先にケーストップから出すようにしてください。基板を取り外す際、LANコネクタの突起部がケーストップに当たらないよう、ケースを広げながら基板を取り外すようにしてください。

カバーはツメ1か所でケーストップに固定されています。図3.65「カバーのツメ」を参考にマイナスドライバーをケースの隙間に差し込み外してください。

images/ag6221c-snap-fit2.svg

図3.65 カバーのツメ


3.6. WLANアンテナの取り付けと取り外し

WLAN+BTコンボモジュール用のアンテナを取り付ける方法および取り外す方法を、 WLANコンボ搭載モデルに付属しているWLAN基板アンテナを例に説明します。

[警告]

WLANアンテナの取り付けと取り外しは、しっかりと静電気対策した上で実施してください。 静電気により製品が故障する可能性があります。

アンテナコネクタは図3.66「WLAN+BTコンボモジュールのアンテナコネクタの位置」の位置にあります。

images/wlan-ant-position.svg

図3.66 WLAN+BTコンボモジュールのアンテナコネクタの位置


WLANコンボ搭載モデルに付属しているWLAN基板アンテナは、I-PEX製のMHF4Lコネクタを採用しています。

images/wlan-pcb-ant.svg

図3.67 WLAN基板アンテナ


[警告]

WLAN+BTコンボモジュールのアンテナコネクタは 非常に小さく破損しやすい部品ですので、取り扱いには十分ご注意ください。 コネクタメーカーサイトにて、取り扱いマニュアルおよび動画を公開しているので、 本書と合わせてご確認ください。

3.6.1. WLAN基板アンテナの取り付け

WLAN基板アンテナはMHF4Lコネクタ用の挿抜治具(90609-0001/IPEX)を使用して取り付けるか、手で直接取り付けします。

3.6.1.1. 挿抜治具による取り付け

WLAN基板アンテナのコネクタのストッパーに当たるまで挿抜治具をスライドさせ、 コネクタ全体を抱えるようにします。WLAN基板アンテナのコネクタが基板に対し平行になっていることを確認し、 垂直に挿抜治具を押してコネクタを嵌合します。

images/mhf4-ant-push.svg

図3.68 WLAN基板アンテナの挿抜治具による取り付け


[警告]

必ずWLAN基板アンテナのコネクタを基板に対して平行にしてから嵌合してください。 曲がったまま嵌合すると、コネクタ破損の原因となります。

3.6.1.2. 手で直接取り付け

WLAN基板アンテナのケーブルを持ち、WLAN+BTコンボモジュールのアンテナコネクタにWLAN基板アンテナのコネクタをセットします。 セットしたら前後に軽く動かし、動かないことを確認します。

images/wlan-ant-connect-set.svg

図3.69 WLAN基板アンテナの手による取り付け前の準備


WLAN基板アンテナのケーブル側から、コネクタの中心を真上からカチっという音がするまで押します。

images/wlan-ant-connect-push.svg

図3.70 WLAN基板アンテナの手による取り付け


3.6.2. WLAN基板アンテナの取り外し

WLAN基板アンテナのコネクタ首部へのストレスを避けるため、挿抜治具(90609-0001/IPEX)を使用して取り外します。 WLAN基板アンテナのコネクタのストッパーに当たるまで挿抜治具をスライドさせ、コネクタ全体を抱えるようにします。 基板と垂直に挿抜治具を引き上げてコネクタを取り外します。

images/mhf4-ant-pull.svg

図3.71 WLAN基板アンテナの挿抜治具による取り外し


[警告]

挿抜治具は必ず基板と垂直に引き上げてください。 ひねったり、ななめに引き上げたりした場合、コネクタ破損の原因となります。

3.6.3. WLAN基板アンテナのケースへの取り付け

WLAN基板アンテナはケーストップに貼り付けます。 アンテナ裏側の剥離紙をはがし、ケーストップのフックパーツ挿し込み口の位置を確認し、 図3.72「WLAN基板アンテナの貼り付け位置」の位置に貼り付けます。

アンテナケーブルはタクトスイッチに干渉しないように、引き回します。

images/wlan-pcb-ant-put-case.svg

図3.72 WLAN基板アンテナの貼り付け位置


[警告]

アンテナケーブルは図3.73「WLAN基板アンテナのケーブル引き回し」のNGの方向に常に力が加わるような引き回しを行わないでください。コネクタ破損の恐れがあります。

images/wlan-pcb-ant-tension.svg

図3.73 WLAN基板アンテナのケーブル引き回し


3.7. インターフェースの使用方法とデバイスの接続方法

Armadillo を用いた開発に入る前に、開発するシステムに接続する必要のある周辺デバイスをこのタイミングで接続しておきます。

以下では、各デバイスの接続方法と、使用方法について紹介します。図3.74「Armadillo-IoT ゲートウェイ A6Eのインターフェース 表面」及び図3.75「Armadillo-IoT ゲートウェイ A6Eのインターフェース 裏面」に Armadillo-IoT ゲートウェイ A6E のインターフェースを示します。

[ティップ]

型番により部品の搭載/非搭載が異なります。詳細は納入仕様書をご確認ください。

本製品シリーズの納入仕様書は、アットマークテクノ Armadilloサイト(https://armadillo.atmark-techno.com/resources/documents/armadillo-iot-a6e/spec)からご覧いただけます。(要ログイン)

images/ag6271c-interface-a.svg

図3.74 Armadillo-IoT ゲートウェイ A6Eのインターフェース 表面


images/ag6271c-interface-b.svg

図3.75 Armadillo-IoT ゲートウェイ A6Eのインターフェース 裏面


表3.14 Armadillo-IoT ゲートウェイ A6E インターフェース一覧

部品番号 インターフェース名 型番 メーカー

CON1

SDインターフェース

SDHK-8BNS-K-303-TB(HF)

J.S.T.Mfg.

CON3

nanoSIM インターフェース

SF72S006VBDR2500

Japan Aviation Electronics Industry

CON4

LANインターフェース

08B0-1X1T-36-F

Bel Fuse Inc.

CON5

電源入力インターフェース

PJ-102AH

Same Sky

CON6

入出力インターフェース

1-1776275-2

TE Connectivity

CON7

USBコンソールインターフェース

ZX80-B-5P(30)

HIROSE ELECTRIC

CON8

拡張インターフェース

A1-34PA-2.54DSA(71)

HIROSE ELECTRIC

CON9

USBインターフェース

SS-52100-001

Bel Fuse Inc.

CON10

RTCバックアップインターフェース

BH-44C-5

Adam Tech

CON11

ANT2中継コネクタ

U.FL-R-SMT-1(10)

HIROSE ELECTRIC

CON12

ANT2中継コネクタ

U.FL-R-SMT-1(10)

HIROSE ELECTRIC

ANT1

LTEアンテナインターフェース

S-037-TGG

COSMTEC RESOURCES CO., LTD

ANT2

LTEアンテナインターフェース

S-037-TGG

COSMTEC RESOURCES CO., LTD

ANT3

WLAN/BT アンテナインターフェース

453-00046R

Ezurio

SYS

システムLED

SML-D12M1WT86

ROHM

APP

アプリケーションLED

SML-D12M1WT86

ROHM

WWAN

ワイヤレスWAN LED

SML-D12M1WT86

ROHM

SW1

ユーザースイッチ

SKHHDJA010

ALPS ELECTRIC

SW2

起動デバイス設定スイッチ

DS01-254-S-01BE

Same Sky

SW3

RS-485終端抵抗設定スイッチ

DS01-254-S-01BE

Same Sky


3.7.1. SDカードを使用する

microSD/microSDHC/microSDXC カードを使用する際に必要な情報を以下に示します。 以降の説明では、共通の操作が可能な場合に、 microSD/microSDHC/microSDXC カードを microSD カードと表記します。

3.7.1.1. ハードウェア仕様

ハイスピード(最大クロック周波数: 49.5MHz)に対応したSDインターフェースです。

信号線はi.MX6ULLのSDホストコントローラ(uSDHC2)に接続されています。

SDカードに供給される電源はi.MX6ULLのNAND_ALEピン(GPIO4_IO10)で制御が可能です。 Highレベル出力で電源が供給され、Lowレベル出力で電源が切断されます。

[警告]

CON1は活線挿抜に対応していません。microSDカードの挿抜は、電源を切断してから行ってください。

[警告]

SD コントローラ(uSDHC2)は WLAN+BT コンボモジュールと排他使用となります。
そのため、WLAN 搭載モデルはインストールディスク以外で SD を使用できません。量産用インストールディスクを WLAN 搭載モデルで作成する場合は、「開発したシステムをインストールディスクにする」 をご覧ください。

機能
  • カードタイプ: microSD/microSDHC/microSDXC/microSDIO
  • バス幅: 1bit or 4bit
  • スピードモード: Default Speed(26MHz), High Speed(52MHz), UHS-I (50MHz)
  • カードディテクトサポート
インターフェース仕様

表3.15 CON1 信号配列

ピン番号 ピン名 I/O 説明

1

DAT2

In/Out

SDデータバス(bit2)、i.MX6ULLのNAND_DATA02ピンに接続

2

CD/DAT3

In/Out

SDデータバス(bit3)、i.MX6ULLのNAND_DATA03ピンに接続

3

CMD

In/Out

SDコマンド/レスポンス、i.MX6ULLのNAND_WE_Bピンに接続

4

VDD

Power

電源(VCC_3.3V)

5

CLK

Out

SDクロック、i.MX6ULLのNAND_RE_Bピンに接続

6

VSS

Power

電源(GND)

7

DAT0

In/Out

SDデータバス(bit0)、i.MX6ULLのNAND_DATA00ピンに接続

8

DAT1

In/Out

SDデータバス(bit1)、i.MX6ULLのNAND_DATA01ピンに接続


3.7.1.2. microSDカードの挿抜方法

  1. 上からカバーを軽く押し、約1.2mmスライドさせて、ロックを解除します。

    images/sd-1.png

    図3.76 カバーのロックを解除する


  2. カバーを開けます。

    images/sd-2.png

    図3.77 カバーを開ける


    [警告]

    カバーは過度な力で回転させたり、回転方向以外の方向へ力を加えると、 破損の原因となりますので、ご注意ください。

  3. 任意の角度までトレイを開いた状態で、microSDカードを挿抜します。

    images/sd-4.png

    図3.78 microSDカードの挿抜


    [ティップ]

    microSDカード挿入方向については、カバーに刻印されているカードマークを目安にしてください。

    images/sd-3.png

    図3.79 カードマークの確認


  4. カバーを閉めます。

    images/sd-5.png

    図3.80 カバーを閉める


  5. 上からカバーを軽く押し、約1.2mmスライドさせて、ロックします。

    images/sd-6.png

    図3.81 カバーをロックする


[ティップ]

microSDカード装着後のカードの抜き取り手順は挿入時と同じです。

3.7.1.3. 使用方法

ここでは、 sd_example という名称の alpine ベースのコンテナを作成し、その中で microSD カードを使用します。 必要なコンテナイメージは予め podman pull している前提で説明します。

CON1 に microSD カードを挿入してください。

/etc/atmark/containers/sd_example.conf というファイルを以下の内容で作成します。

set_image docker.io/alpine
add_hotplugs mmc 1
add_args --cap-add=SYS_ADMIN 2
set_command sleep infinity

1

add_hotplugsmmc を指定することで、 コンテナ内でmicroSD カードをホットプラグで認識します

2

コンテナ内で microSD カードをマウントするための権限を与えます

コンテナを起動し、コンテナの中に入ります。

[armadillo]# podman_start sd_example
Starting 'sd_example'
1d93ecff872276834e3c117861f610a9c6716c06eb95623fd56aa6681ae021d4

[armadillo]# podman exec -it sd_example sh
[container]#

コンテナ内で microSD カードは、 /dev/mmcblk1 として認識されますので /mnt にマウントします。

[container]# mount /dev/mmcblk1p1 /mnt

ストレージの使用方法については、「コマンドラインからストレージを使用する」もあわせて参照してください。

3.7.2. Ethernet を使用する

3.7.2.1. ハードウェア仕様

CON4は10BASE-T/100BASE-TXに対応したLANインターフェースです。 カテゴリ5以上のEthernetケーブルを接続することができます。 AUTO-MDIX機能を搭載しており、ストレートケーブルまたはクロスケーブルを自動認識して送受信端子を切り替えます。

信号線はEthernet PHY(LAN8720AI-CP/Microchip Technology)を経由してi.MX6ULLのEthernetコントローラ(ENET1: 10/100-Mbps Ethernet MAC)に接続されています。

機能
  • 通信速度: 100Mbps (100BASE-TX), 10Mbps (10BASE-T)
  • 通信モード: Full-Duplex (全二重), Half-Duplex (半二重)
  • Auto Negotiationサポート
  • キャリア検知サポート
  • リンク検出サポート
インターフェース仕様(CON4)

表3.16 CON4 信号配列

ピン番号ピン名 I/O 説明

1

TX+

In/Out

送信データ(+)

2

TX-

In/Out

送信データ(-)

3

RX+

In/Out

受信データ(+)

4

-

-

5ピンと接続後に75Ω終端

5

-

-

4ピンと接続後に75Ω終端

6

RX-

In/Out

受信データ(-)

7

-

-

8ピンと接続後に75Ω終端

8

-

-

7ピンと接続後に75Ω終端


表3.17 CON4 LAN LEDの動作

名称(色) 状態 説明

LANスピードLED(緑)

消灯

10Mbpsで接続されている、もしくはEthernetケーブル未接続

点灯

100Mbpsで接続されている

LANリンクアクティビティLED(黄)

消灯

リンクが確立されていない

点灯

リンクが確立されている

点滅

リンクが確立されており、データを送受信している


images/lan-led.svg

図3.82 CON4 LAN LED


3.7.2.2. ソフトウェア仕様

ネットワークデバイス
  • eth0

3.7.2.3. 使用方法

有線 LAN の設定方法は「ネットワーク設定」を参照ください。

3.7.3. 無線 LAN を使用する

Armadillo-IoT ゲートウェイ A6E の WLAN を搭載しているモデルには、Ezurio製 Sterling LWB5+ が搭載されています。Sterling LWB5+ のWLANは「ハードウェア仕様」に示す uSDHC2 に接続されています。

3.7.3.1. ハードウェア仕様

機能
  • IEEE 802.11a/b/g/n/ac 準拠
  • 最大通信速度: 49.5Mbps(理論値)
  • 動作モード: インフラストラクチャモード(STA/AP), アドホックモード
  • チャンネル(2.4GHz): 1-14
  • チャンネル(5GHz): 36-48, 52-64, 100-140
[ティップ]

Sterling LWB5+の最大通信速度は 433.3Mbps(802.11ac, 1x1 SISO, HT80, MCS9, SGI) ですが、「ハードウェア仕様」に示す SD インターフェースに接続される為、49.5Mbpsに制限されます。

インタフェース仕様(ANT3)

ANT3(WLAN/BT アンテナインターフェース) は WLAN/BT データ通信時に利用する、アンテナコネクタです。MHF4 端子のアンテナを接続することができます。開発セットおよび量産用では PCB アンテナが接続されています。

RP-SMA端子のアンテナを接続する場合は、図3.83「ANT3 RP-SMA端子のアンテナ接続例」を参考にケーブルをご用意ください。

images/wlan_antenna_extend.png

図3.83 ANT3 RP-SMA端子のアンテナ接続例


3.7.3.2. ソフトウェア仕様

ネットワークデバイス
  • wlan0

3.7.3.3. 使用方法

無線 LAN の設定方法は「WWAN設定」を参照ください。

3.7.3.4. 注意事項

[ティップ]

Sterling LWB5+ のファームウェアは、ATDEにインストールされているfirmware-brcm80211パッケージに含まれています。ファームウェアはLinuxカーネルイメージ内に改変無く配置されます。 firmware-ti-connectivityの著作権およびライセンス情報については、ATDE上で/usr/share/doc/firmware-brcm80211/copyrightを参照してください。

3.7.4. BT を使用する

Armadillo-IoT ゲートウェイ A6E には、Ezurio製 Sterling LWB5+ が搭載されています。Sterling LWB5+ の BT は UART2 に接続されています。

3.7.4.1. ハードウェア仕様

インターフェース仕様(ANT3)
ANT3(WLAN/BT アンテナインターフェース) に関しては、「ハードウェア仕様」を参照ください。

3.7.4.2. ソフトウェア仕様

デバイスファイル
  • hci0

3.7.4.3. 使用方法

コンテナ内から BT 使用するには、コンテナ作成時にホストネットワークを使用するために、 NET_ADMIN の権限を渡す必要があります。 図3.84「Bluetooth を扱うコンテナの作成例」に、alpine イメージから Bluetooth を扱うコンテナを作成する例を示します。

[armadillo ~]# vi /etc/atmark/containers/bt_example.conf
set_image docker.io/alpine
set_command sleep infinity
set_network host
add_args --cap-add=NET_ADMIN
[armadillo ~]# podman_start bt_example
Starting 'bt_example'
45fe1eb6b25529f0c84cd4b97ca1aef8451785fc9a87a67d54873c1ed45b70a4

図3.84 Bluetooth を扱うコンテナの作成例


コンテナ内で必要なソフトウェアをインストールして、Bluetooth を起動します。

[armadillo ~]# podman exec -it bt_example sh
[container ~]# apk upgrade
[container ~]# apk add bluez
[container ~]# mkdir /run/dbus
[container ~]# dbus-daemon --system
[container ~]# /usr/lib/bluetooth/bluetoothd &

図3.85 Bluetooth を起動する実行例


これにより、bluetoothctl で Bluetooth 機器のスキャンやペアリングなどが行えるようになります。 以下に、bluetoothctl コマンドで周辺機器をスキャンしてペアリングを行う例を示します。

[container ~]# bluetoothctl
Agent registered
[..CHG..] Controller XX:XX:XX:XX:XX:XX Pairable: yes
[bluetooth]# power on 1
Changing power on succeeded
[..CHG..] Controller XX:XX:XX:XX:XX:XX Powered: yes
[bluetooth]# scan on 2
Discovery started
[..CHG..] Controller XX:XX:XX:XX:XX:XX Discovering: yes
[..NEW..] Device AA:AA:AA:AA:AA:AA AA-AA-AA-AA-AA-AA
[..NEW..] Device BB:BB:BB:BB:BB:BB BB-BB-BB-BB-BB-BB
[..NEW..] Device CC:CC:CC:CC:CC:CC CC-CC-CC-CC-CC-CC
[..NEW..] Device DD:DD:DD:DD:DD:DD DD-DD-DD-DD-DD-DD
[..NEW..] Device EE:EE:EE:EE:EE:EE EE-EE-EE-EE-EE-EE
[bluetooth]# pair AA:AA:AA:AA:AA:AA 3
[bluetooth]# exit 4
[container ~]#

図3.86 bluetoothctl コマンドによるスキャンとペアリングの例


1

コントローラを起動します。

2

周辺機器をスキャンします。

3

ペアリングしたい機器の MAC アドレスを指定してペアリングします。

4

exit で bluetoothctl のプロンプトを終了します。

3.7.5. LTE を使用する

3.7.5.1. ハードウェア仕様

Armadillo-IoT ゲートウェイ A6E Cat.1 モデルには、Telit 製 ELS31-J が搭載されています。ELS31-J は、 OTG2 に接続されています。

Armadillo-IoT ゲートウェイ A6E Cat.M1 モデルには、Telit 製 EMS31-J が搭載されています。Cat.M1 モデルは、 Telit LTE module multiplex ドライバを使用し UART4 を ttyMux0、ttyMux1、ttyMux2 に多重化して使用します。

機能
  • LTE 通信
  • リセットドライバによる ELS31-J/EMS31-J の電源制御
インターフェース仕様(CON3)

CON3(nanoSIMインターフェース)は LTEデータ通信時に利用する、nanoSIM カード用インターフェースです。

表3.18 CON3 信号配列

ピン番号ピン名 I/O 説明

C1

SIM_VCC

Power

SIM電源、LTEモジュールのCCVCCに接続

C2

SIM_RST

Out

SIMリセット、LTEモジュールのCCRSTに接続

C3

SIM_CLK

Out

SIMクロック、LTEモジュールのCCCLKに接続

C5

GND

Power

電源(GND)

C6

SIM_VPP

-

未接続

C7

SIM_I/O

In

SIMデータ、LTEモジュールのCCIOに接続


[ティップ]

nano SIM カードの挿入方法は図3.45「Armadillo-IoT ゲートウェイ A6Eの接続例」を参照ください。

インターフェース仕様(CON11)

CON11(ANT2中継コネクタ)はLTEモジュール(ELS31-J)とANT2を接続するための中継コネクタで、LTEモジュールのアンテナピンと接続されています。 出荷時にはCON12に接続された同軸ケーブルが装着されています。

[ティップ]

型番が AG627 または AG626 で始まる製品にのみ搭載されています。

インターフェース仕様(CON12)

CON12(ANT2中継コネクタ)はLTEモジュール(ELS31-J)とANT2を接続するための中継コネクタで、LTEモジュールのアンテナピンと接続されています。 出荷時にはCON11に接続された同軸ケーブルが装着されています。

[ティップ]

型番が AG627 または AG626 で始まる製品にのみ搭載されています。

インターフェース仕様(ANT1)

ANT1(LTEアンテナインターフェース)はLTEデータ通信時に利用する、アンテナコネクタです。 SMAオス端子のアンテナを接続することができます。 アンテナコネクタの形状は図3.87「ANT1 接続可能なアンテナコネクタ形状」のとおりです。

images/sma-male-appearance.svg

図3.87 ANT1 接続可能なアンテナコネクタ形状


アンテナコネクタからアンテナまでの経路は50Ω同軸ケーブルでの延長が可能です。 ただし、ケーブルロスが発生することにご注意ください。 同軸ケーブルで延長する場合は、図3.88「ANT1 50Ω同軸ケーブルでの延長例」を参考にケーブルをご用意ください。

images/lte_antenna_extend.png

図3.88 ANT1 50Ω同軸ケーブルでの延長例


[警告]

Cat.1 モデルでLTE通信を使用する際はアンテナ2本が必須となります。

[ティップ]

LTEモジュールメーカーにより、技適認証取得済みのアンテナについて抜粋したリストを Armadilloサイトで公開しています。 付属のアンテナ以外をご検討の際に、ご活用ください。

当社にて全てのアンテナの動作を確認したものではありませんので、 通信性能の評価については、ユーザー様自身にて実施いただくようお願いいたします。

インターフェース仕様(ANT2)

ANT2はカスタマイズが可能なアンテナコネクタです。 各製品モデルでのANT2の搭載状況と用途、形状は表3.19「各製品モデルでのANT2搭載状況と用途」のとおりです。

表3.19 各製品モデルでのANT2搭載状況と用途

型番搭載状況用途形状接続可能なアンテナコネクタ形状

AG627 または AG626 で始まる型番

搭載

LTEアンテナインターフェース

SMA オス端子

図3.87「ANT1 接続可能なアンテナコネクタ形状」参照

上記以外の型番

非搭載 [a]

-

-

-

[a] ANT2を搭載し、アンテナインターフェースとして使用できるカスタマイズ品を製造することが可能です。詳細につきましてはアットマークテクノ営業部または各販売代理店へお問い合わせください。


Cat.1モデルでは、アンテナコネクタからアンテナまでの経路は50Ω同軸ケーブルでの延長が可能です。ただし、ケーブルロスが発生することにご注意ください。 同軸ケーブルで延長する場合は、下図を参考にケーブルをご用意ください。

images/lte_antenna_extend.png

図3.89 ANT2 50Ω同軸ケーブルでの延長例(LTEアンテナインターフェース)


Cat.1モデル以外の製品でANT2は非搭載となっていますが、ANT2を搭載し各種アンテナインターフェースとして使用ができるカスタマイズ品を製造することが可能です。

[ティップ]

詳細につきましてはアットマークテクノ営業部または各販売代理店へお問い合わせください。

ANT2をWLAN/BTアンテナにカスタマイズする場合の例を図3.90「ANT2カスタマイズ例:同軸ケーブル接続図」図3.91「ANT2カスタマイズ例:WLAN/BTアンテナインターフェース」に示します。

images/nth1_cable.svg

図3.90 ANT2カスタマイズ例:同軸ケーブル接続図


images/ant2_wlan_antenna_connection.png

図3.91 ANT2カスタマイズ例:WLAN/BTアンテナインターフェース


CON8(拡張インターフェース)にLPWA通信モジュールを搭載し、ANT2をLPWAアンテナにカスタマイズする場合の例を図3.92「ANT2カスタマイズ例:LPWAアンテナインターフェース」に示します。

images/ant2_lpwa_antenna_connection.png

図3.92 ANT2カスタマイズ例:LPWAアンテナインターフェース


[ティップ]

LTEモジュールメーカーにより、技適認証取得済みのアンテナについて抜粋したリストを Armadilloサイトで公開しています。 付属のアンテナ以外をご検討の際に、ご活用ください。

当社にて全てのアンテナの動作を確認したものではありませんので、 通信性能の評価については、ユーザー様自身にて実施いただくようお願いいたします。

3.7.5.2. ソフトウェア仕様(Cat.1 モデル)

デバイスファイル
  • /dev/ttyACM0

    • ModemManager が /dev/ttyCommModem のシンボリックリンクを作成し AT コマンド用ポートとして使用します。
  • /dev/ttymxc3
ネットワークデバイス
  • usb0
[ティップ]

ttyACM0 は、他の USB デバイスを接続している場合、番号が変わる可能性があります。

3.7.5.3. ソフトウェア仕様(Cat.M1 モデル)

デバイスファイル
  • /dev/ttyMux0

    • ModemManager が /dev/ttyCommModem のシンボリックリンクを作成し AT コマンド用ポートとして使用します。
  • /dev/ttyMux1

    • ppp のポートとして使用します。
  • /dev/ttyMux2

    • ModemManager 以外のアプリケーションから AT コマンドを入力するのに使用できます。
  • /dev/ttymxc3

    • Telit LTE module multiplex ドライバが使用します。
ネットワークデバイス
  • ppp0

3.7.5.4. 使用方法

LTE モデム Telit 製 ELS31-J/EMS31-J に対して、以下の制御が可能です。

LTE モデムは、Armadillo 起動時に自動的に電源が投入され、 Armadillo が終了する際には自動的に電源が切られます。

また、「LTE再接続サービス」 でも、通信状態に応じて LTE モデムのリセットなどを実施しますので処理が重複しないように、下記制御を実施する際には、図6.152「LTE 再接続サービスを停止する」の手順を参考に再接続サービスを停止してから実施してください。

[armadillo:~#] wwan-force-restart

図3.93 LTE モデムをリセットまたは LTE モデムの電源を入れる


[armadillo:~#] wwan-poweroff

図3.94 LTE モデムの電源を切る


ネットワークの設定方法については「ネットワーク設定」を参照してください。

LTE 再接続サービスの設定、Cat.M1 モデル省電力設定、Cat.1 モデルファイアーウォール設定に関しては「LTE (Cat.1/Cat.M1 モデル)」を参照してください。

3.7.6. USB デバイスを使用する

3.7.6.1. ハードウェア仕様

USB2.0に対応したUSBインターフェースです。

信号線はi.MX6ULLのUSBコントローラ(USB OTG1)に接続されています。

USB デバイスに供給される電源(USB_OTG1_VBUS)はi.MX6ULLのUART1_RTS_Bピン(GPIO1_IO19)で制御しており、Highレベル出力で電源が供給され、Lowレベル出力で電源が切断されます。

機能
  • Universal Serial Bus Specification Revision 2.0 準拠
  • Enhanced Host Controller Interface (EHCI)準拠
  • 転送レート: USB2.0 High-Speed (480Mbps), Full-Speed (12Mbps), Low-Speed (1.5Mbps)
インターフェース仕様

表3.20 CON9 信号配列

ピン番号ピン名 I/O 説明

1

USB1_VBUS

Power

電源(USB_OTG1_VBUS)、i.MX6ULLのUSB_OTG1_VBUSピンに接続

2

USB1_DN

In/Out

USB1のマイナス側信号、i.MX6ULLのUSB_OTG1_DNピンに接続

3

USB1_DP

In/Out

USB1のプラス側信号、i.MX6ULLのUSB_OTG1_DPピンに接続

4

GND

Power

電源(GND)


3.7.6.2. ソフトウェア仕様

デバイスファイル
  • メモリデバイスの場合は、デバイスを認識した順番で/dev/sdN (Nは’a'からの連番)となります。
  • I/Oデバイスの場合は、ファンクションに応じたデバイスファイルとなります。

3.7.6.3. 使用方法

コンテナ内で動作するアプリケーションから USB 接続のデバイスを扱うための方法について示します。

  • USB シリアルデバイスを扱う

    USB シリアルデバイスをコンテナ内から扱う場合には、Podman のイメージからコンテナを作成する際に add_hotplugsttyUSB を設定する必要があります。この設定により、コンテナ起動後に USB シリアルデバイスを 接続した場合でも正しく認識されます。 以下は、alpine イメージからコンテナを作成する例です。

    [armadillo ~]# vi /etc/atmark/containers/usb_example.conf
    set_image docker.io/alpine
    set_command sleep infinity
    add_hotplugs ttyUSB
    [armadillo ~]# podman_start usb_example
    Starting 'usb_example'
    34cb0e60d6274ac1df87aed58a461bcf56d0c117c4d377af130605ea399e0950

    図3.95 USB シリアルデバイスを扱うためのコンテナ作成例


    コンテナ内に入り、setserial コマンドを使って現在の設定を確認することができます。

    [armadillo ~]# podman exec -it usb_example sh
    [container ~]# setserial -a /dev/serial/by-id/usb-067b_2303-if00-port0
    /dev/serial/by-id/usb-067b_2303-if00-port0, Line 4, UART: 16654, Port: 0x0000, IRQ: 0
            Baud_base: 460800, close_delay: 0, divisor: 0
            closing_wait: infinite
            Flags: spd_normal

    図3.96 setserial コマンドによるUSBシリアルデバイス設定の確認例


    コンテナ内からのデバイスの指定には /dev/ttyUSBN を使用することもできますが、 デバイスを接続するタイミングによっては N の値が変わる可能性があります。 このため上記の例のように /dev/serial/by-id/ 下にあるファイルを指定することで 確実に目的のデバイスを使用することができます。

  • USB カメラを扱う

    USB カメラをコンテナ内から扱う場合には、Podman のイメージからコンテナを作成する際に add_hotplugsvideo4linux を設定する必要があります。この設定により、コンテナ起動後に USB カメラを 接続した場合でも正しく認識されます。 以下は、alpine イメージからコンテナを作成する例です。

    [armadillo ~]# vi /etc/atmark/containers/usbcam_example.conf
    set_image docker.io/alpine
    set_command sleep infinity
    add_hotplugs video4linux
    [armadillo ~]# podman_start usbcam_example
    Starting 'usbcam_example'
    ffe06090b45826cc0b1c7710e9e850ba9521d36b70de4288d0dfe1fe91a35632
    [armadillo ~]# podman exec -it usbcam_example sh
    [container ~]# ls /dev/v4l/by-id/usb-046d_HD_Pro_Webcam_C920_78DA8CAF-video-index0
    /dev/v4l/by-id/usb-046d_HD_Pro_Webcam_C920_78DA8CAF-video-index0

    図3.97 USB カメラを扱うためのコンテナ作成例


    GStreamer などのマルチメディアフレームワークと組み合わせることで、USB カメラからの映像のキャプチャが可能となります。

    コンテナ内からのデバイスの指定には /dev/videoN を使用することもできますが、 デバイスを接続するタイミングによっては N の値が変わる可能性があります。 このため上記の例のように /dev/v4l/by-id/ 下にあるファイルを指定することで 確実に目的のデバイスを使用することができます。

  • USB メモリを扱う

    ここでは、USB メモリを扱う方法について 2 つの例を示します。

    • ホスト OS 側でマウントした USB メモリをコンテナから扱う

      あらかじめホスト OS 側でマウントしてある USB メモリをコンテナから扱う場合には、Podman のイメージから コンテナを作成する際にホスト OS 側で USB メモリをマウントしてるディレクトリを渡す必要があります。

      [armadillo ~]# mount -t vfat /dev/sda1 /mnt
      [armadillo ~]# echo test >> /mnt/sample.txt
      [armadillo ~]# ls /mnt
      sample.txt

      図3.98 USB メモリをホスト OS 側でマウントする例


      上記の例では、USB メモリを /mnt にマウントしました。以下は、 /mnt を渡して alpine イメージからコンテナを作成する例です。

      [armadillo ~]# vi /etc/atmark/containers/usbmem_example.conf
      set_image docker.io/alpine
      set_command sleep infinity
      add_volumes /mnt
      [armadillo ~]# podman_start usbmem_example
      Starting 'usbmem_example'
      ef77d4bfd5b04f3b8b5ddcb5bfac321304fa64219a4b88c3130e45e5a14e1b3e

      図3.99 ホスト OS 側でマウント済みの USB メモリを扱うためのコンテナ作成例


      ホスト OS 側の /mnt ディレクトリをコンテナ内の /mnt にマウントしています。 これにより、コンテナ内からも /mnt ディレクトリを通して USB メモリを扱うことができます。

      [armadillo ~]# podman exec -it usbmem_example sh
      [container ~]# ls /mnt
      sample.txt
      [container ~]# cat /mnt/sample.txt
      test

      図3.100 USB メモリに保存されているデータの確認例


    • USB メモリをコンテナ内からマウントする

      USB メモリをコンテナ内からマウントして扱う場合には、Podman のイメージからコンテナを作成する際に add_hotplugssd を設定する必要があります。この設定により、コンテナ起動後に USB メモリを 接続した場合でも正しく認識されます。加えて、コンテナ内からマウントするためには適切な権限も設定する必要があります。 以下は、 alpine イメージからコンテナを作成する例です。権限として SYS_ADMIN を渡しています。

      [armadillo ~]# vi /etc/atmark/containers/usbmem_example.conf
      set_image docker.io/alpine
      set_command sleep infinity
      add_args --cap-add=SYS_ADMIN
      add_hotplugs sd
      [armadillo ~]# podman_start usbmem_example
      Starting 'usbmem_example'
      387a2256530e9b35b5361ca681a99fba8f46d78b6a6cb8ecd60096246b9198a8

      図3.101 USB メモリをマウントするためのコンテナ作成例


      コンテナ内に入り、mount コマンドで USB メモリを /mnt にマウントし、保存されているデータを確認することができます。

      [armadillo ~]# podman exec -it usbmem_example sh
      [container ~]# mount /dev/disk/by-label/[MYUSBMEMORY] /mnt 1
      [container ~]# ls /mnt
      sample.txt
      [container ~]# cat /mnt/sample.txt
      test

      図3.102 コンテナ内から USB メモリをマウントする例


      1

      [MYUSBMEMORY] の部分は USB メモリに設定しているラベルに置き換えてください。

    コンテナ内からマウントするデバイスの指定には /dev/sdN を使用することもできますが、 他にもストレージデバイスを接続している場合などには N の値が変わることがあります。 このため、USBメモリにラベルを設定している場合は、上記の例のように /dev/disk/by-label/ 下にある ラベルと同名のファイルを指定することで確実に目的のデバイスを使用することができます。

3.7.7. 接点入力を使用する

3.7.7.1. ハードウェア仕様(CON6:DI)

接点入力部はフォトカプラによる絶縁入力(電流シンク出力タイプに接続可能)となっています。 入力部を駆動するために電源は、外部から供給する必要があります。

機能
  • 接点入力 x 2
インターフェース仕様(CON6:接点入力)

端子台を実装しています。 端子ねじはプラスでサイズはM2です。ねじサイズに合ったドライバービットを使用してください。 接続可能な電線については、表3.22「CON6 接続可能な電線」をご確認ください。

表3.21 CON6 信号配列(接点入力関連)

ピン番号ピン名 I/O 説明

3

COM

In

接点入力プラスコモン

4

DI1

In

接点入力1

5

DI2

In

接点入力2


images/con6-di.svg

図3.103 CON6 接点入力周辺回路


表3.22 CON6 接続可能な電線

規格

UL

IEC

電線範囲

26~18 AWG

0.12~0.9mm2

被覆剥き長さ

5~6mm

使用可能フェルール端子

型番 : MFL25-5BE

メーカー:ミスミ

推奨ねじ締めトルク

0.20Nm [a]

[a] お客様が使用される電線でご確認の上、ねじ締めトルクを設定いただきますようお願いいたします。


[警告]

振動や衝撃のある場所に設置された場合、端子ねじが緩む事がありますので、定期的な増し締めを行ってください。

[警告]

電線の先端に予備半田しないでください。正しい接続ができなくなります。

[警告]

端子台に電線を接続する際、端子台に過度な力を加えないでください。 端子台が破損する恐れがあります。

3.7.7.2. ソフトウェア仕様

入出力インターフェース(CON6)のピン4、ピン5を接点入力として使用できます。

ソフトウェアからは GPIO として制御可能であり、対応するGPIO 番号を次に示します。

表3.23 接点入力に対応する CON6 ピン番号

ピン番号 ピン名 GPIOチップ GPIO番号

4

DI1

gpiochip5

0

5

DI2

gpiochip5

1


[ティップ]

接点入力に何も接続していない(開放状態)場合、取得できる入力レベルは "1" (HIGH レベル)となります。

[警告]

接点入力機能は、デフォルトの状態ではゲートウェイコンテナが使用しています。そのため、入力レベルを確認するには「コンテナの終了」の手順でゲートウェイコンテナを終了させる必要があります。

3.7.7.3. 使用方法

  • コンテナで使用する

    コンテナ内で動作するアプリケーションから 接点入力(GPIO) を扱うためには、Podman のイメージからコンテナを作成する際にホスト OS 側の /dev/gpiochipN を渡すと、GPION+1 を操作することができます。

    ここでは接点入力で使用する gpiochip5 を渡した場合の例を記載します。

    [armadillo ~]# vi /etc/atmark/containers/di_example.conf
    set_image docker.io/alpine
    set_command sleep infinity
    add_devices /dev/gpiochip5
    [armadillo ~]# podman_start di_example
    Starting 'di_example'
    956a0fecc48d5ea1210069910f7bb48b9e90b2dadb12895064d9776dae0360b5

    図3.104 接点入力を扱うためのコンテナ作成例


    コンテナ内に入ってコマンドで GPIO を操作する例を以下に示します。

    [armadillo ~]# podman exec -it di_example sh
    [container ~]# apk upgrade
    [container ~]# apk add libgpiod
    [container ~]# gpioget gpiochip5 [GPIO] 1
    0 2

    図3.105 コンテナ内からコマンドで接点入力を操作する例


    1

    GPIO 番号 [GPIO] の値を取得します。

    2

    取得した値を表示します。

    C 言語プログラムから操作する場合は、GPIO 操作ライブラリである libgpiod を使用することができます。

  • Armadillo 上で使用する

    gpioget コマンドを用いて入力レベルの確認ができます。"0"は LOW レベル、"1"は HIGH レベルを表わします。

    [armadillo ~]# gpioget gpiochip5 [GPIO]
    0

    図3.106 入力レベルの確認


3.7.8. 接点出力を使用する

3.7.8.1. ハードウェア仕様(CON6:接点出力)

接点出力部はフォトリレーによる絶縁出力(無極性)となっています。 出力部を駆動するためには外部に電源が必要となります。 出力1点につき最大電流500mA(定格 48V)まで駆動可能です。

機能
  • 接点出力 x 2
インターフェース仕様(CON6:接点出力)

端子台を実装しています。 端子ねじはプラスでサイズはM2です。ねじサイズに合ったドライバービットを使用してください。 接続可能な電線については、表3.25「CON6 接続可能な電線」をご確認ください。

表3.24 CON6 信号配列(接点出力関連)

ピン番号ピン名 I/O 説明

6

DO1A

-

接点出力1A

7

DO1B

-

接点出力1B

8

DO2A

-

接点出力2A

9

DO2B

-

接点出力2B


images/con6-do.svg

図3.107 CON6 接点出力周辺回路


表3.25 CON6 接続可能な電線

規格

UL

IEC

電線範囲

26~18 AWG

0.12~0.9mm2

被覆剥き長さ

5~6mm

使用可能フェルール端子

型番 : MFL25-5BE

メーカー:ミスミ

推奨ねじ締めトルク

0.20Nm [a]

[a] お客様が使用される電線でご確認の上、ねじ締めトルクを設定いただきますようお願いいたします。


[警告]

振動や衝撃のある場所に設置された場合、端子ねじが緩む事がありますので、定期的な増し締めを行ってください。

[警告]

電線の先端に予備半田しないでください。正しい接続ができなくなります。

[警告]

端子台に電線を接続する際、端子台に過度な力を加えないでください。 端子台が破損する恐れがあります。

3.7.8.2. ソフトウェア仕様

入出力インターフェース(CON6)のピン6/ピン7、ピン8/ピン9を接点出力として使用できます。

ソフトウェアからは GPIO として制御可能であり、対応するGPIO 番号を次に示します。

表3.26 接点出力に対応する CON6 ピン番号

ピン番号 ピン名 GPIOチップ GPIO番号

6

DO1A

gpiochip5

2

7

DO1B

gpiochip5

2

8

DO2A

gpiochip5

3

9

DO2B

gpiochip5

3


[警告]

接点出力は、デフォルトの状態ではゲートウェイコンテナが使用しています。そのため、出力レベルを確認するには「コンテナの終了」の手順でゲートウェイコンテナを終了させる、または表3.57「[DO1,DO2] 設定可能パラメータ」で "disable" を設定する必要があります。

3.7.8.3. 使用方法

  • コンテナで使用する

    コンテナ内で動作するアプリケーションから接点出力を扱うためには、Podman のイメージからコンテナを作成する際にホスト OS 側の /dev/gpiochipN を渡すと、GPION+1 を操作することができます。

    ここでは接点出力で使用する gpiochip5 を渡した場合の例を記載します。

    [armadillo ~]# vi /etc/atmark/containers/do_example.conf
    set_image docker.io/alpine
    set_command sleep infinity
    add_devices /dev/gpiochip5
    [armadillo ~]# podman_start do_example
    Starting 'gpio_example'
    956a0fecc48d5ea1210069910f7bb48b9e90b2dadb12895064d9776dae0360b5

    図3.108 接点出力を扱うためのコンテナ作成例


    コンテナ内に入ってコマンドで接点出力を操作する例を以下に示します。

    [armadillo ~]# podman exec -it gpio_example sh
    [container ~]# apk upgrade
    [container ~]# apk add libgpiod
    [container ~]# gpioset gpiochip5 [GPIO]=0 1

    図3.109 コンテナ内からコマンドで接点出力を操作する例


    1

    GPIO 番号 [GPIO] の値を low に設定します。

    C 言語プログラムから操作する場合は、GPIO 操作ライブラリである libgpiod を使用することができます。

  • Armadillo 上で使用する

    gpioset コマンドを用いて、出力レベルを設定することができます。出力レベルには "0" または "1" を設定します。"0"は LOW レベル、"1"は HIGH レベルを表わします。

    [armadillo ~]# gpioset gpiochip5 [GPIO]=0

    図3.110 出力レベルを "0" に設定する場合


  • 接点入力、接点出力をループバックして確認する

    ピン1とピン3、ピン2とピン6、ピン4とピン7をそれぞれ接続することで、DI1、DO1をループバックして確認することが可能です。

    [armadillo ~]# gpioget gpiochip5 0
    0
    [armadillo ~]# gpioset gpiochip5 2=1    # DO1の出力レベルを "1" に設定する
    [armadillo ~]# gpioget gpiochip5 0      # DI1の入力レベルが "1" に変化する
    1

    図3.111 DI1、DO1をループバックした場合のコマンド実行例


3.7.9. UART を使用する

Armadillo-IoT ゲートウェイ A6E のシリアルは、i.MX6ULLのUART (Universal Asynchronous Receiver/Transmitter) を利用しています。

Armadillo-IoT ゲートウェイ A6E の標準状態では、UART3 (CON7) をシリアルコンソールとして利用しています。UART5(CON6 のピン 10 ~ 12) を RS-485 のインタフェースとして利用できます。

拡張インターフェース(CON8)でシリアル(UART)を最大2ポート拡張することが可能です。信号線は i.MX6ULL の UART(UART1、UART7)に接続されています。

3.7.9.1. ハードウェア仕様(CON7)

CON7 は USB コンソール用インターフェースです。

信号線は USB シリアル変換 IC(CP2102N/Sillicon Labs) を経由して i.MX6ULL の UART コントローラ (UART3) に接続されています。

機能
  • フォーマット

    • データビット長: 7 or 8ビット
    • ストップビット長: 1 or 2ビット
    • パリティ: 偶数 or 奇数 or なし
    • フロー制御: CTS/RTS or XON/XOFF or なし
  • 最大ボーレート:4Mbps
[ティップ]

UART3(CON7)は4Mbpsで利用することができません。USBシリアル変換IC(CP2102N/Silicon Labs)の最大ボーレートが3Mbpsである為です。

インターフェース仕様(CON7)

表3.27 CON7 信号配列

ピン番号ピン名 I/O 説明

1

VBUS_CNSL

Power

電源(VBUS_CNSL)

2

CNSL_USB_D-

In/Out

コンソール用USBのマイナス側信号、USBシリアル変換ICに接続

3

CNSL_USB_D+

In/Out

コンソール用USBのプラス側信号、USBシリアル変換ICに接続

4

CNSL_USB_ID

-

未接続

5

GND

Power

電源(GND)


3.7.9.2. ハードウェア仕様(CON6:RS-485)

RS-485 は、入出力インターフェース(CON6)の 10 ~ 12 ピンを使用します。

終端抵抗 120Ω の ON/OFFをスイッチで切り替えることができます、設定方法は「ハードウェア仕様 (SW3:RS-485 終端抵抗設定スイッチ)」を参照ください。

機能
  • 最大データ転送レート : 5Mbps
  • 半二重対応
  • RS-485 シリアルインターフェースのデバイスファイルは、/dev/ttymxc4 を使用します。
インターフェース仕様

端子台を実装しています。 端子ねじはプラスでサイズはM2です。ねじサイズに合ったドライバービットを使用してください。 接続可能な電線については、表3.29「CON6 接続可能な電線」をご確認ください。

images/con6-rs485.svg

図3.112 CON6 RS-485トランシーバ周辺回路


表3.28 CON6 信号配列(RS-485関連)

ピン番号 ピン名

10

DATA+

11

DATA-

12

GND


表3.29 CON6 接続可能な電線

規格

UL

IEC

電線範囲

26~18 AWG

0.12~0.9mm2

被覆剥き長さ

5~6mm

使用可能フェルール端子

型番 : MFL25-5BE

メーカー:ミスミ

推奨ねじ締めトルク

0.20Nm [a]

[a] お客様が使用される電線でご確認の上、ねじ締めトルクを設定いただきますようお願いいたします。


[警告]

振動や衝撃のある場所に設置された場合、端子ねじが緩む事がありますので、定期的な増し締めを行ってください。

[警告]

電線の先端に予備半田しないでください。正しい接続ができなくなります。

[警告]

端子台に電線を接続する際、端子台に過度な力を加えないでください。 端子台が破損する恐れがあります。

3.7.9.3. ハードウェア仕様 (SW3:RS-485 終端抵抗設定スイッチ)

SW3はRS-485の終端抵抗設定スイッチです。 SW3を操作することで、終端抵抗 120ΩのON/OFFを切り替えることができます。

images/a6e-sw3.svg

図3.113 スイッチの状態と終端抵抗のON/OFF


images/common-images/callouts/1.svg
終端抵抗 120Ω がONになります。
images/common-images/callouts/2.svg
終端抵抗 120Ω がOFFになります。
[ティップ]

終端はRS-485の信号線の最遠端で行います。 Armadillo-IoT A6Eが最遠端になる場合は終端抵抗をONにしてください。

3.7.9.4. ソフトウェア仕様

デバイスファイル
  • シリアルコンソール (UART3)

    • /dev/ttymxc2
  • RS-485 シリアルインターフェース(UART5)

    • /dev/ttymxc4

3.7.9.5. 使用方法

コンテナ内で動作するアプリケーションから RS-232C や RS-485 などのシリアル通信を行うためには、 Podman のイメージからコンテナを作成する際にホスト OS 側のデバイスファイル /dev/ttymxcN を渡す必要があります。 以下は、/dev/ttymxc0 を渡して alpine イメージからコンテナを作成する例です。

[armadillo ~]# vi /etc/atmark/containers/serial_example.conf
set_image docker.io/alpine
set_command sleep infinity
add_devices /dev/ttymxc0
[armadillo ~]# podman_start serial_example
Starting 'serial_example'
3999f09d51253371cacffd68967c90fdd5250770888a82f59d7810b54fcc873e

図3.114 シリアルインターフェースを扱うためのコンテナ作成例


コンテナ内に入り、setserial コマンドを使って現在の設定を確認することができます。

[armadillo ~]# podman exec -it serial_example sh
[container ~]# setserial -a /dev/ttymxc0
/dev/ttymxc0, Line 0, UART: undefined, Port: 0x0000, IRQ: 29
        Baud_base: 5000000, close_delay: 50, divisor: 0
        closing_wait: 3000
        Flags: spd_normal

図3.115 setserial コマンドによるシリアルインターフェイス設定の確認例


3.7.10. GPIO を制御する

3.7.10.1. ハードウェア仕様

Armadillo-IoT ゲートウェイ A6E のGPIOは、i.MX6ULL の GPIO(General Purpose Input/Output)および、Texas Instruments製TCA9534(GPIOエキスパンダー)を利用しています。

拡張インターフェース(CON8) で GPIO を最大 22 ポート拡張することが可能です。

3.7.10.2. ソフトウェア仕様

デバイスファイル
デバイスファイル GPIO番号

/dev/gpiochip0

0~31(GPIO1_IO00~GPIO1_IO31)O3

/dev/gpiochip1

32~53(GPIO2_IO00~GPIO2_IO21)O2

/dev/gpiochip2

64~92(GPIO3_IO00~GPIO3_IO28)O2

/dev/gpiochip3

96~124(GPIO4_IO00~GPIO4_IO28)O2

/dev/gpiochip4

128~139(GPIO5_IO00~GPIO5_IO11)O1

/dev/gpiochip5

504~511 [a] (TCA9534)

[a] GPIOエキスパンダーを追加した場合は、番号が異なる可能性があります。

sysfs GPIOクラスディレクトリ
  • /sys/class/gpio/
[ティップ]

sysfs GPIOクラスは旧バージョンのLinuxカーネルとの互換性維持の為に残っています。新しくアプリケーションを開発する際の利用はおすすめしません。 新しくアプリケーションを開発する場合は、libgpiodパッケージに含まれるアプリケーションまたはLinux カーネルのソースコードに含まれているサンプル(tools/gpio/)を参考にしてください。

3.7.10.3. 使用方法

コンテナ内で動作するアプリケーションから GPIO を扱うためには、Podman のイメージからコンテナを作成する際にホスト OS 側のデバイスファイル /dev/gpiochipN を渡す必要があります。以下は、/dev/gpiochip2 を渡して alpine イメージからコンテナを作成する例です。 /dev/gpiochipN を渡すと、GPION+1 を操作することができます。

[armadillo ~]# vi /etc/atmark/containers/gpio_example.conf
set_image docker.io/alpine
set_command sleep infinity
add_devices /dev/gpiochip2
[armadillo ~]# podman_start gpio_example
Starting 'gpio_example'
956a0fecc48d5ea1210069910f7bb48b9e90b2dadb12895064d9776dae0360b5

図3.116 GPIO を扱うためのコンテナ作成例


コンテナ内に入ってコマンドで GPIO を操作する例を以下に示します。この例では GPIO3_IO21 を操作しています。

[armadillo ~]# podman exec -it gpio_example sh
[container ~]# apk upgrade
[container ~]# apk add libgpiod
[container ~]# gpioget gpiochip2 21 1
0 2
[container ~]# gpioset gpiochip2 21=1 3

図3.117 コンテナ内からコマンドで GPIO を操作する例


1

GPIO 番号 21 の値を取得します。

2

取得した値を表示します。

3

GPIO 番号 21 に 1(High) を設定します。

他にも、gpiodetect コマンドで認識している gpiochip をリスト表示できます。 以下の例では、コンテナを作成する際に渡した /dev/gpiochip2 が認識されていることが確認できます。

[container ~]# gpiodetect
gpiochip2 [30220000.gpio] (32 lines)

図3.118 gpiodetect コマンドの実行


gpioinfo コマンドでは、指定した gpiochip の詳細な情報を表示することができます。

[container ~]# gpioinfo gpiochip2
gpiochip2 - 32 lines:
        line   0:      unnamed          "?"  output  active-high [used]
        line   1:      unnamed       unused   input  active-High
        line   2:      unnamed       unused   input  active-high
        line   3:      unnamed       unused   input  active-high
        line   4:      unnamed       unused   input  active-high
        line   5:      unnamed       unused   input  active-high
        line   6:      unnamed       unused   input  active-high
        line   7:      unnamed       unused   input  active-high
        line   8:      unnamed       unused   input  active-high
        line   9:      unnamed       unused   input  active-high
        line  10:      unnamed       unused   input  active-high
        line  11:      unnamed       unused   input  active-high
        line  12:      unnamed       unused   input  active-high
        line  13:      unnamed       unused   input  active-high
        line  14:      unnamed       unused   input  active-high
        line  15:      unnamed       unused   input  active-high
        line  16:      unnamed       unused   input  active-high
        line  17:      unnamed       unused   input  active-high
        line  18:      unnamed       unused   input  active-high
        line  19:      unnamed       unused   input  active-high
        line  20:      unnamed       unused   input  active-high
        line  21:      unnamed       unused   input  active-high
        line  22:      unnamed       unused   input  active-high
        line  23:      unnamed       unused   input  active-high
        line  24:      unnamed       unused   input  active-high
        line  25:      unnamed       unused   input  active-high
        line  26:      unnamed       unused   input  active-high
        line  27:      unnamed       unused   input  active-high
        line  28:      unnamed       unused   input  active-high
        line  29:      unnamed       unused   input  active-high
        line  30:      unnamed       unused   input  active-high
        line  31:      unnamed       unused   input  active-high

図3.119 gpioinfo コマンドの実行


C 言語プログラムから操作する場合は、GPIO 操作ライブラリである libgpiod を使用することができます。

3.7.11. I2C デバイスを使用する

3.7.11.1. ハードウェア仕様

Armadillo-IoT ゲートウェイ A6E の I2C インターフェースは、i.MX6ULL の I2C(I2C Controller) を利用します。また、i2c-gpioを利用することで、I2C バスを追加することができます。 Armadillo-IoT ゲートウェイ A6E で利用している I2C バスと、接続される I2C デバイスを次に示します。

表3.30 I2C デバイス

I2C バス I2C デバイス

アドレス

デバイス名

 

0(I2C1)

0x08

PF3000 (PMIC)

1(I2C2)

0x20

TCA9534 (GPIOエキスパンダー)

0x32

RV8803 (RTC)

0x48

SE050(セキュアエレメント)


Armadillo-IoT ゲートウェイ A6E の標準状態では、CONFIG_I2C_CHARDEV が有効となっているためユーザードライバで I2C デバイスを制御することができます。ユーザードライバを利用する場合は、Linux カーネルで I2Cデバイスに対応するデバイスドライバを無効にする必要があります。

機能
  • 最大転送レート: 384kbps

3.7.11.2. ソフトウェア仕様

デバイスファイル
  • /dev/i2c-0 (I2C1)
  • /dev/i2c-1 (I2C2)
  • /dev/i2c-2 (I2C3)
  • /dev/i2c-3 (I2C4)

3.7.11.3. 使用方法

コンテナ内で動作するアプリケーションから I2C を扱うためには、Podman のイメージからコンテナを作成する際にホスト OS 側のデバイスファイル /dev/i2c-N を渡す必要があります。以下は、/dev/i2c-1 を渡して alpine イメージからコンテナを作成する例です。

[armadillo ~]# vi /etc/atmark/containers/i2c_example.conf
set_image docker.io/alpine
set_command sleep infinity
add_devices /dev/i2c-1
[armadillo ~]# podman_start i2c_example
Starting 'i2c_example'
efa1eb129c1f036a709755f0d53b21a0f2a39307ecae32b24aac98c0b6567bf0

図3.120 I2C を扱うためのコンテナ作成例


コンテナ内に入り、i2c-tools に含まれる i2cdetect コマンドを使ってスレーブアドレスを確認することができます。

[armadillo ~]# podman exec -it i2c_example sh
[container ~]# apk upgrade
[container ~]# apk add i2c-tools
[container ~]# i2cdetect -y 1
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:                         -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- UU -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- UU -- -- --
50: UU -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- 68 -- -- -- -- -- -- --
70: -- -- 72 -- -- -- -- --

図3.121 i2cdetect コマンドによる確認例


3.7.12. RTC を使用する

3.7.12.1. ハードウェア仕様

Armadillo-IoT ゲートウェイ A6E のリアルタイムクロックは、Micro Crystal製 RV-8803-C7 が搭載されておりこれを利用しています。 RV-8803-C7 は、「ハードウェア仕様」に示す I2C2 に接続されています。 i.MX6ULL の RTC 機能も存在します。

機能
  • アラーム割り込みサポート
インターフェース仕様

CON10はリアルタイムクロックのバックアップ用インターフェースです。 電源が切断されても時刻データを保持させたい場合にご使用ください。

CON10にはCR1220の電池を接続することができます。 リアルタイムクロックの時刻保持時の平均消費電流は、 240nA(Typ.)となっておりますので、 電池寿命までの時刻保持が期待できます。

平均月差は周囲温度-20℃~70℃で8秒(参考値)です。

表3.31 CON10 信号配列

ピン番号 ピン名 I/O 説明

1

RTC_BAT

Power

リアルタイムクロックのバックアップ用電源入力(RTC_BAT)

2

GND

Power

電源(GND)


[警告]

電池をホルダーへ装着する際は、異物の挟み込みや不完全な装着がないように、目視での異物確認や 装着状態の確認を行ってください。

3.7.12.2. ソフトウェア仕様

デバイスファイル
  • /dev/rtc ( /dev/rtc0 へのシンボリックリンク)
  • /dev/rtc0 (RV-8803-C7)
  • /dev/rtc1 (i.MX6ULL SNVS_HP Real Time Counter)
[ティップ]

RTCが /dev/rtc0 となるよう、Device Treeでエイリアスを設定しています。そのため、i.MX6ULLのRTC機能は /dev/rtc1 となります。 エイリアスの設定は、 arch/arm/boot/dts/armadillo-iotg-a6e.dts で行っています。

アラーム割り込みは、デバイスファイル経由で利用することができます。

詳細な情報については、Linux カーネルのソースコードに含まれているドキュメント(Documentation/admin-guide/rtc.rst)やサンプルプログラム(tools/testing/selftests/rtc/rtctest.c)を参照してください。

3.7.12.3. 使用方法

  • コンテナで使用する

    コンテナ内から RTC を扱うためには、Podman のイメージからコンテナを作成する際にホスト OS 側のデバイスファイル /dev/rtc0 を渡すと同時に、RTC への時刻の設定を行うための権限も渡す必要があります。 以下は、/dev/rtc0 を渡して alpine イメージからコンテナを作成する例です。権限として SYS_TIME も渡しています。

    [armadillo ~]# vi /etc/atmark/containers/rtc_example.conf
    set_image docker.io/alpine
    set_command sleep infinity
    add_args --cap-add=SYS_TIME
    add_devices /dev/rtc0
    [armadillo ~]# podman_start rtc_example
    Starting 'rtc_example'
    025209e0d96f43c2911239a8397b7002c3eaab057e031d8abb765df5707d75bd

    図3.122 RTC を扱うためのコンテナ作成例


    コンテナ内に入り、hwclock コマンドで RTC の時刻表示と設定ができます。

    [armadillo ~]# podman exec -it rtc_example sh
    [container ~]# hwclock 1
    Thu Feb 18 05:14:37 2021  0.000000 seconds
    [container ~]# date --set "2021-04-01 09:00:00" 2
    Thu Apr  1 09:00:00 UTC 2021
    [container ~]# hwclock --systohc 3
    [container ~]# hwclock 4
    Thu Apr  1 09:00:28 2021  0.000000 seconds

    図3.123 hwclock コマンドによるRTCの時刻表示と設定例


    1

    RTC に設定されている現在時刻を表示します。

    2

    システム時刻を 2021 年 4 月 1 日 9 時 0 分 0 秒に設定します。

    3

    システム時刻を RTC に反映させます。

    4

    RTC に設定されている時刻が変更されていることを確認します。

  • Armadillo 上で RTC に時刻を設定する

    Linuxの時刻には、Linuxカーネルが管理するシステムクロックと、RTCが管理するハードウェアクロックの2種類があります。RTCに時刻を設定するためには、まずシステムクロックを設定します。その後に、ハードウェアクロックをシステムクロックと一致させる手順となります。

    システムクロックは、dateコマンドを用いて設定します。dateコマンドの引数には、設定する時刻を [MMDDhhmmCCYY.ss] というフォーマットで指定します。時刻フォーマットの各フィールドの意味を次に示します。

    表3.32 時刻フォーマットのフィールド

    フィールド意味

    MM

    DD

    日(月内通算)

    hh

    mm

    CC

    年の最初の2桁(省略可)

    YY

    年の最後の2桁(省略可)

    ss

    秒(省略可)


    2023年3月2日12時34分56秒に設定する例を次に示します。

    [armadillo ~]# date
    Sat Jan  1 09:00:00 JST 2000
    [armadillo ~]# date 030212342023.56
    Fri Mar  2 12:34:56 JST 2023
    [armadillo ~]# date
    Fri Mar  2 12:34:57 JST 2023

    図3.124 システムクロックを設定


    システムクロックを設定後、ハードウェアクロックを hwclock コマンドを用いて設定します。

    [armadillo ~]# hwclock  1
    2000-01-01 00:00:00.000000+09:00
    [armadillo ~]# hwclock --utc --systohc  2
    [armadillo ~]# hwclock --utc  3
    2023-03-02 12:57:20.534140+09:00

    図3.125 ハードウェアクロックを設定


    1

    現在のハードウェアクロックを表示します。

    2

    ハードウェアクロックを協定世界時(UTC)で設定します。

    3

    ハードウェアクロックが UTC で正しく設定されていることを確認します。

    [ティップ]

    インターネットに接続できている場合は、chronyd により自動的に日時設定が行われます。そのため、手動で日時設定を行う必要はありません。

3.7.13. 起動デバイスを変更する

SW2は起動デバイス設定スイッチです。 SW2を操作することで、起動デバイスを設定することができます。

3.7.13.1. ハードウェア仕様

images/a6e-sw2.svg

図3.126 スイッチの状態と起動デバイス


images/common-images/callouts/1.svg
起動デバイスはeMMCになります。
images/common-images/callouts/2.svg
起動デバイスはmicroSDになります。

3.7.14. ユーザースイッチを使用する

3.7.14.1. ハードウェア仕様

SW1はユーザーが自由に利用できる押しボタンスイッチです。

インターフェース仕様(SW1)

表3.33 SW1 信号配列

部品番号 名称 説明

SW1

ユーザースイッチ

i.MX6ULL の JTAG_MOD ピンに接続

(Low: 押されていない状態、High: 押された状態)


3.7.14.2. ソフトウェア仕様

Linux では、ユーザー空間でイベント(Press/Release)を検出することができます。Linux では、GPIO 接続用キーボードドライバ(gpio-keys)で制御することができます。

ユーザースイッチと信号には、次に示すキーコードが割り当てられています。

表3.34 インプットデバイスファイルとイベントコード

ユーザースイッチインプットデバイスファイルイベントコード

SW1

/dev/input/by-path/platform-gpio-keys-event

148 (KEY_PROG1)


[警告]

インプットデバイスは検出された順番にインデックスが割り振られます。USBデバイスなどを接続してインプットデバイスを追加している場合は、デバイスファイルのインデックスが異なる可能性があります。

3.7.14.3. 使用方法

スイッチのプッシュ/リリースイベントを取得するためには、 Podman のイメージからコンテナを作成する際にホスト OS 側の /dev/input ディレクトリを渡す必要があります。 以下は、/dev/input を渡して alpine イメージからコンテナを作成する例です。ここで渡された /dev/input ディレクトリは コンテナ内の /dev/input にマウントされます。

[armadillo ~]# vi /etc/atmark/containers/sw_example.conf
set_image docker.io/alpine
set_command sleep infinity
add_devices /dev/input
[armadillo ~]# podman_start sw_example
Starting 'sw_example'
c0cd8b801883266197a3c20552b0e8b6c7dd473bb0b24e05bf3ecdb581c822b9

図3.127 ユーザースイッチのイベントを取得するためのコンテナ作成例


コンテナ内に入り、evtest コマンドでイベントを確認できます。

[armadillo ~]# podman exec -it sw_example sh
[container ~]# apk upgrade
[container ~]# apk add evtest
[container ~]# evtest /dev/input/event1
Input driver version is 1.0.1
Input device ID: bus 0x19 vendor 0x1 product 0x1 version 0x100
Input device name: "gpio-keys"
Supported events:
  Event type 0 (EV_SYN)
  Event type 1 (EV_KEY)
    Event code 28 (KEY_ENTER)
Properties:
Testing ... (interrupt to exit)
Event: time 1612849227.554456, type 1 (EV_KEY), code 28 (KEY_ENTER), value 1  1
Event: time 1612849227.554456, -------------- SYN_REPORT ------------
Event: time 1612849229.894444, type 1 (EV_KEY), code 28 (KEY_ENTER), value 0  2
Event: time 1612849229.894444, -------------- SYN_REPORT ------------

図3.128 evtest コマンドによる確認例


1

SW1のボタン プッシュ イベントを検出したときの表示

2

SW1のボタン リリース イベントを検出したときの表示

[ティップ]

Armadillo Base OS では、スイッチの制御を簡単に実装できる buttond デーモンを用意しております。 詳細は「ボタンやキーを扱う」 を参照してください。

3.7.15. LED を使用する

LED は SYS、APP、WWAN が実装されており、Armadillo Base OS にて表3.36「LED状態と製品状態の対応について」に示す状態を表示しています。

LTE モジュール非搭載の LAN モデル及び WLAN モデルは、 WWAN LED をユーザー開放しております。

3.7.15.1. ハードウェア仕様

インターフェース仕様

表3.35 LED 信号配列

部品番号 名称(色) 説明

SYS

システムLED(緑)

電源(VCC_3.3V)の入力状態を表示、i.MX6ULLのUART2_CTS_Bピン(GPIO1_IO22)に接続

(Low: 消灯、High: 点灯)

APP

アプリケーションLED(緑)

アプリケーションの状態を表示、i.MX6ULLのUART2_RTS_Bピン(GPIO1_IO23)に接続

(Low: 消灯、High: 点灯)

WWAN

ワイヤレスWAN LED(緑)

LTE通信の状態を表示、i.MX6ULLのUART1_RX_DATAピン(GPIO1_IO17)に接続

(Low: 消灯、High: 点灯)


3.7.15.2. ソフトウェア仕様

Linuxでは、GPIO接続用LEDドライバ(leds-gpio)で制御することができます。

sysfs LEDクラスディレクトリ
  • /sys/class/leds/app
  • /sys/class/leds/sys
  • /sys/class/leds/wwan

表3.36 LED状態と製品状態の対応について

LED状態\LED名称 SYS APP WWAN

OFF

電源OFF

アプリ起動不可

SIM 未検出または認識中、または LTE モデム未検出

ON

電源ON

アプリ起動可能

LTE 接続済み

Blink Slow

シャットダウン中

アプリ起動完了 [a]

SIM 検出、LTE 未接続 [b]

Blink Fast

アップデート中

アプリエラー [a]

SIM 検出、LTE 未接続、電波品質が低い [b]

[a] APP LED の「起動完了」と「エラー」の点滅動作は、アプリ自身が行います。ゲートウェイコンテナアプリケーションは、この仕様に従って APP LED の制御を行っています。

[b] LTE コネクションが未作成、設定間違いの場合もこの状態となります


[ティップ]

WLAN/LAN モデルでは WWAN LED を自由に使用することができます。

3.7.15.3. 使用方法

  • コンテナで使用する

    LED を扱うためには、 Podman のイメージからコンテナを作成する際にホスト OS 側の /sys ディレクトリを渡す必要があります。 以下は、/sys を渡して alpine イメージからコンテナを作成する例です。ここで渡された /sys ディレクトリはコンテナ内の /sys にマウントされます。

    [armadillo ~]# vi /etc/atmark/containers/led_example.conf
    set_image docker.io/alpine
    set_command sleep infinity
    add_volumes /sys
    [armadillo ~]# podman_start led_example
    Starting 'led_example'
    c770f76d7714f4cceb1229be2240382bded236c2c51bb6b866bc0098c2cb987a

    図3.129 LED を扱うためのコンテナ作成例


    コンテナ内に入り、brightness ファイルに値を書き込むことで LED の点灯/消灯を行うことができます。 0 を書き込むと消灯、0 以外の値 (1~255) を書き込むと点灯します。

    [armadillo ~]# podman exec -it led_example sh
    [container ~]# echo 0 > /sys/class/leds/app/brightness
    [container ~]# echo 1 > /sys/class/leds/app/brightness

    図3.130 LED の点灯/消灯の実行例


以降の説明では、任意のLEDを示すLEDクラスディレクトリを /sys/class/leds/[LED]/ のように表記します。 [LED] の部分を適宜読みかえてください。

  • LEDを点灯/消灯する

    LEDクラスディレクトリ以下の brightness ファイルへ値を書き込むことによって、LEDの点灯/消灯を行うことができます。 brightness に書き込む有効な値は 0~255です。

    brightness に 0 以外の値を書き込むとLEDが点灯します。

    [armadillo ~]# echo 1 > /sys/class/leds/[LED]/brightness

    図3.131 LEDを点灯させる


    [注記]

    Armadillo-IoT ゲートウェイ A6E のLEDには輝度制御の機能がないため、0(消灯)、1~255(点灯)の2つの状態のみ指定することができます。

    brightness に0を書き込むとLEDが消灯します。

    [armadillo ~]# echo 0 > /sys/class/leds/[LED]/brightness

    図3.132 LEDを消灯させる


    brightness を読み出すとLEDの状態が取得できます。

    [armadillo ~]# cat /sys/class/leds/[LED]/brightness

    図3.133 LEDの状態を表示する


  • トリガを使用する

    Linux では、LED をある特定のタイミングで光らせることができます。これを「トリガ」と呼びます。LEDクラスディレクトリ以下の trigger ファイルへ値を書き込むことによってLEDの点灯/消灯にトリガを設定することができます。 trigger でサポートされている値は以下の通りです。

    表3.37 LEDトリガの種類

    設定 説明

    none

    トリガを設定しません

    mmc0

    eMMCのアクセスランプにします

    mmc1

    microSDスロットのアクセスランプにします

    timer

    任意のタイミングで点灯/消灯を行います。この設定にすることにより、LEDクラスディレクトリ以下にdelay_on, delay_offファイルが出現し、それぞれ点灯時間, 消灯時間をミリ秒単位で指定します

    heartbeat

    心拍のように点灯/消灯を行います

    default-on

    主にLinuxカーネルから使用します。LEDが点灯します


    trigger ファイルを読み出すとサポートしているトリガと、現在有効のトリガが表示されます。 [] が付いているものが現在のトリガです。

    [armadillo ~]# cat /sys/class/leds/[LED]/trigger
    [none] rc-feedback bluetooth-power rfkill-any rfkill-none kbd-scrolllock kbd-numlock kbd-capslock kbd-kanalock kbd-shiftlock kbd-altgrlock kbd-ctrllock kbd-altlock kbd-shiftllock kbd-shiftrlock kbd-ctrlllock kbd-ctrlrlock rfkill0 rfkill1 timer oneshot heartbeat backlight gpio default-on mmc0 mmc1

    図3.134 対応している LEDトリガを表示


    以下のコマンドを実行すると、LEDが2秒点灯、1秒消灯を繰り返します。

    [armadillo ~]# echo timer > /sys/class/leds/[LED]/trigger
    [armadillo ~]# echo 2000 > /sys/class/leds/[LED]/delay_on
    [armadillo ~]# echo 1000 > /sys/class/leds/[LED]/delay_off

    図3.135 LEDのトリガにtimerを指定する


3.7.16. 拡張インターフェースを使用する

CON8は機能拡張用のインターフェースです。複数の機能(マルチプレクス)を持つ、 i.MX6ULL の信号線が接続されており、GPIO、UART、I2C、SPI、CAN、PWM等の機能を拡張することができます。

[警告]

Armadillo-IoT ゲートウェイ A6Eが起動できなくなる恐れがありますので、CON8のプルアップ/ダウン抵抗が基板上で接続されているピンは、電源投入時または再起動時、プル抵抗で決められた入力レベル以外にしないでください。 ピンの使い方については、「CON8のプルアップ/ダウン抵抗が基板上で接続されているピンを使用する」を参照ください。

[ティップ]

拡張できる機能の詳細につきましては、 「Armadillo-IoT ゲートウェイ A6E マルチプレクス表」をご参照ください。

表3.38 CON8 搭載コネクタと対向コネクタ例

名称 型番 メーカー 備考

搭載コネクタ

A1-34PA-2.54DSA(71)

HIROSE ELECTRIC

許容電流 3A(端子1本あたり)

対向コネクタ

6130xx21821 [a]

Wurth Elektronik

-

[a] xxにはピン数が入ります。


表3.39 CON8 信号配列

ピン番号ピン名 I/O 説明

1

VIN

Power

電源出力(VIN)

2

GND

Power

電源(GND)

3

VCC_5V

Power

電源出力(VCC_5V)

4

GND

Power

電源(GND)

5

VCC_3.3V

Power

電源出力(VCC_3.3V)

6

GND

Power

電源(GND)

7

GPIO1_IO01

In/Out

拡張入出力、i.MX6ULLのGPIO1_IO01ピンに接続

8

GPIO1_IO02

In/Out

拡張入出力、i.MX6ULLのGPIO1_IO02ピンに接続

9

GPIO1_IO03

In/Out

拡張入出力、i.MX6ULLのGPIO1_IO03ピンに接続

10

GPIO1_IO04

In/Out

拡張入出力、i.MX6ULLのGPIO1_IO04ピンに接続

11

GND

Power

電源(GND)

12

I2C4_SCL

In/Out

拡張入出力、i.MX6ULLのI2C4_SCLピンに接続

13

I2C4_SDA

In/Out

拡張入出力、i.MX6ULLのI2C4_SDAピンに接続

14

GPIO3_IO05

In/Out

拡張入出力、i.MX6ULLのLCD_DATA00ピンに接続、基板上で10kΩプルダウンされています。[a]

15

GPIO3_IO06

In/Out

拡張入出力、i.MX6ULLのLCD_DATA01ピンに接続、基板上で10kΩプルアップ(VCC_3.3V)されています。[a]

16

GPIO3_IO07

In/Out

拡張入出力、i.MX6ULLのLCD_DATA02ピンに接続、基板上で10kΩプルダウンされています。[a]

17

GPIO3_IO08

In/Out

拡張入出力、i.MX6ULLのLCD_DATA03ピンに接続、基板上で10kΩプルダウンされています。[a]

18

GND

Power

電源(GND)

19

GPIO3_IO10

In/Out

拡張入出力、i.MX6ULLのLCD_DATA05ピンに接続、起動デバイス設定スイッチ(SW2)がeMMC側に設定されている時10kΩプルアップ(VCC_3.3V)、SD側に設定されている時10kΩプルダウンされます。[a]

20

GPIO3_IO11

In/Out

拡張入出力、i.MX6ULLのLCD_DATA06ピンに接続、基板上で10kΩプルアップ(VCC_3.3V)されています。[a]

21

GPIO3_IO12

In/Out

拡張入出力、i.MX6ULLのLCD_DATA07ピンに接続、基板上で10kΩプルダウンされています。[a]

22

GPIO3_IO13

In/Out

拡張入出力、i.MX6ULLのLCD_DATA08ピンに接続、基板上で10kΩプルダウンされています。[a]

23

GPIO3_IO14

In/Out

拡張入出力、i.MX6ULLのLCD_DATA09ピンに接続、基板上で10kΩプルダウンされています。[a]

24

GPIO3_IO15

In/Out

拡張入出力、i.MX6ULLのLCD_DATA10ピンに接続、基板上で10kΩプルダウンされています。[a]

25

GPIO3_IO16

In/Out

拡張入出力、i.MX6ULLのLCD_DATA11ピンに接続、起動デバイス設定スイッチ(SW2)がeMMC側に設定されている時10kΩプルダウン、SD側に設定されている時10kΩプルアップ(VCC_3.3V)されます。[a]

26

GPIO3_IO20

In/Out

拡張入出力、i.MX6ULLのLCD_DATA15ピンに接続、基板上で10kΩプルダウンされています。[a]

27

GPIO3_IO21

In/Out

拡張入出力、i.MX6ULLのLCD_DATA16ピンに接続、基板上で10kΩプルダウンされています。[a]

28

GPIO3_IO22

In/Out

拡張入出力、i.MX6ULLのLCD_DATA17ピンに接続、基板上で10kΩプルダウンされています。[a]

29

GPIO4_IO25

In/Out

拡張入出力、i.MX6ULLのCSI_DATA04ピンに接続

30

GPIO4_IO26

In/Out

拡張入出力、i.MX6ULLのCSI_DATA05ピンに接続

31

GPIO4_IO27

In/Out

拡張入出力、i.MX6ULLのCSI_DATA06ピンに接続

32

GPIO4_IO28

In/Out

拡張入出力、i.MX6ULLのCSI_DATA07ピンに接続

33

GND

Power

電源(GND)

34

GND

Power

電源(GND)


拡張基板の設計に関しては、「拡張基板の設計」も参照ください。

3.7.16.1. CON8のプルアップ/ダウン抵抗が基板上で接続されているピンを使用する

CON8のプルアップ/ダウン抵抗が基板上で接続されているピンは、電源投入時または再起動時、プル抵抗で決められた入力レベルに保持する必要があります。以下の方法を参考に拡張基板の回路設計をしてください。

  • 3-Stateバッファなどを使用してピンと拡張基板の回路を一時的に切り離す
  • ピンを出力ピンとして使用する

以下は3-Stateバッファを使用して電源投入時または再起動時にピンのHigh/Lowレベルを保持する回路例です。プルダウン抵抗が基板上で接続されているピンを3-Stateバッファのイネーブル信号に使用することで、電源投入からArmadilloが起動するまでの間、ピンと拡張基板の回路を切り離します。

images/sch-con8-3state.svg

図3.136 3-Stateバッファを使用した回路例


表3.40 CON8 3-Stateバッファを使用した回路のIOピン仕様

ピン番号ピン名 基板上のプル抵抗 説明

21

GPIO3_IO12

10kΩプルダウン

GPIO3_IO13がLowレベルの場合は基板上のプル抵抗の状態が入力されます。GPIO3_IO13がHighレベルの場合は押しボタンの状態が入力されます。(High:ボタンが押されていない状態、Low:ボタンが押された状態)

22

GPIO3_IO13

10kΩプルダウン

3-StateバッファのENピンを制御する出力です。(Low:3-Stateバッファの出力はHi-Zとなり拡張基板側の回路とIOピンは切り離された状態、High:3-Stateバッファの出力はIN側の入力レベルに従い出力され拡張基板側の回路とIOピンが接続された状態)

23

GPIO3_IO14

10kΩプルダウン

GPIO3_IO13がLowレベルの場合は3-StateバッファのOUTはHi-Zとなります。GPIO3_IO13がHighレベルの場合はGPIO3_IO14の出力レベルが3-Stateバッファを通してOutput Port側に出力されます。


拡張基板で使用する各ピンはデバイスドライバが利用する場合があるため、拡張基板の回路とピンの接続はデバイスドライバが動作を始めるよりも前に行う必要があります。図3.136「3-Stateバッファを使用した回路例」の場合は、次のようにGPIO3_IO13をHigh出力に設定するノードを 「独自の DTS overlay を追加する」 の手順で追加してください。

図3.137「GPIO3_IO13をHigh出力にするノードの例」では、以下2つのノードを追加しています。

  • regulatorsにregulator-con8ioenを追加
  • iomuxcにcon8ioengrpを追加
[ATDE ~/linux-[version]]$ vi arch/arm/boot/dts/armadillo-600-customize.dts

/dts-v1/;
/plugin/;

#include <dt-bindings/gpio/gpio.h>
#include "imx6ull-pinfunc.h"

&{/} {
        regulators {
                reg_con8_io_en: regulator-con8ioen {
                        pinctrl-names = "default";
                        pinctrl-0 = <&pinctrl_con8_io_en>;
                        compatible = "regulator-fixed";
                        regulator-name = "CON8_IO_EN";
                        regulator-min-microvolt = <3300000>;
                        regulator-max-microvolt = <3300000>;
                        gpio = <&gpio3 13 GPIO_ACTIVE_HIGH>;
                        enable-active-high;
                        regulator-always-on;
                };
        };
};

&iomuxc {
        pinctrl_con8_io_en: con8ioengrp {
                fsl,pins = <
                        MX6UL_PAD_LCD_DATA08__GPIO3_IO13     0x00008
                >;
        };
};

図3.137 GPIO3_IO13をHigh出力にするノードの例


図3.136「3-Stateバッファを使用した回路例」では、プルダウン抵抗が基板上で接続されているピンを3-Stateバッファの制御ピンとしています。もしプルアップ抵抗が基板上で接続されているピンを制御ピンにしたい場合は、3-StateバッファICを制御ピンの入力が負論理のものに置き換え、ノードregulator-con8ioenからenable-active-highの行を削除してください。

また、ピンを出力専用として使用することでも電源投入時または再起動時にプル抵抗で決められた入力レベルを保持することができます。 以下の回路例ではArmadillo-IoT ゲートウェイ A6E基板上のプルダウン抵抗により電源投入時はリレーがOFFの状態を保持し、アプリケーションからGPIO3_IO12をHighレベル出力にすることで、リレーがONになります。

images/sch-con8-output.svg

図3.138 ピンを出力専用で使用した回路例


3.7.17. 電源を入力する

3.7.17.1. ハードウェア仕様

CON5 と CON6 の一部は電源入力用のインターフェースです。

インターフェース仕様(CON5)

CON5 には DC ジャックが実装されており、図3.139「ACアダプタの極性マーク」と同じ極性マークのあるACアダプタが使用できます。 対応プラグは内径2.1mm、外形5.5mmのものとなります。

images/common-images/center-plus.svg

図3.139 ACアダプタの極性マーク


インターフェース仕様(CON6:電源入力)

端子台を実装しています。 端子ねじはプラスでサイズはM2です。ねじサイズに合ったドライバービットを使用してください。 接続可能な電線については、表3.42「CON6 接続可能な電線」をご確認ください。

表3.41 電源入力関連 CON6 信号配列

ピン番号ピン名 I/O 説明

1

VIN

Power

電源入力(+)

2

GND

Power

電源入力(GND)

12

GND

Power

電源入力(GND)


表3.42 CON6 接続可能な電線

規格

UL

IEC

電線範囲

26~18 AWG

0.12~0.9mm2

被覆剥き長さ

5~6mm

使用可能フェルール端子

型番 : MFL25-5BE

メーカー:ミスミ

推奨ねじ締めトルク

0.20Nm [a]

[a] お客様が使用される電線でご確認の上、ねじ締めトルクを設定いただきますようお願いいたします。


[警告]

振動や衝撃のある場所に設置された場合、端子ねじが緩む事がありますので、定期的な増し締めを行ってください。

[警告]

電線の先端に予備半田しないでください。正しい接続ができなくなります。

[警告]

端子台に電線を接続する際、端子台に過度な力を加えないでください。 端子台が破損する恐れがあります。

[警告]

CON5、CON6の電源ライン(VIN)は接続されており、同時に電源を供給することはできません。

[警告]

CON5から電源供給する場合、ACアダプタのDCプラグをDCジャックに接続してから、ACプラグをコンセントに挿してください。

[警告]

電源を再投入する際は、コンデンサに蓄えられた電荷を抜くため、電源を切断後、一定時間以上待つ必要があります。 開発セット付属のACアダプタの場合に必要な時間は以下のとおりです。

  • DCプラグ側で電源を切断した場合 : 約5秒
  • ACプラグ側で電源を切断した場合 : 約1分

コンデンサに蓄えられた電荷が抜ける前に電源を再投入した場合、 電源シーケンスが守られず、起動しない等の動作不具合の原因となります。

3.7.18. Wi-SUN デバイスを使用する

ここでは、Wi-SUN デバイスが UART で接続されている場合の例を示します。 この場合、コンテナ内で動作するアプリケーションから Wi-SUN デバイスで通信を行うためには、 Podman のイメージからコンテナを作成する際にホスト OS 側のデバイスファイル /dev/ttymxcN のうち、 Wi-SUN と対応するものを渡す必要があります。 以下は、/dev/ttymxc0 を渡して alpine イメージからコンテナを作成する例です。

[armadillo ~]# vi /etc/atmark/containers/wisun_example.conf
set_image docker.io/alpine
set_command sleep infinity
add_devices /dev/ttymxc0
[armadillo ~]# podman_start wisun_example
Starting 'wisun_example'
ef9a5a2f7eee4236cb28c1fbf5090a6f0db9d6dfe7f3a34573867e0833dd3122
[armadillo ~]# podman exec -it wisun_example sh
[container ~]# ls /dev/ttymxc0
/dev/ttymxc0

図3.140 Wi-SUN デバイスを扱うためのコンテナ作成例


コンテナ内から、/dev/ttymxc0 を使って Wi-SUN データの送受信ができるようになります。

3.7.19. EnOcean デバイスを扱う

ここでは、EnOcean デバイスが UART で接続されている場合の例を示します。 この場合、コンテナ内で動作するアプリケーションから EnOcean デバイスで通信を行うためには、 Podman のイメージからコンテナを作成する際にホスト OS 側のデバイスファイル /dev/ttymxcN のうち、 EnOcean と対応するものを渡す必要があります。 以下は、/dev/ttymxc0 を渡して alpine イメージからコンテナを作成する例です。

[armadillo ~]# vi /etc/atmark/containers/enocean_example.conf
set_image docker.io/alpine
set_command sleep infinity
add_devices /dev/ttymxc0
[armadillo ~]# podman_start enocean_example
Starting 'enocean_example'
a808b491a100f9078d8c72a7b36966d9182614f3657fe054fb8d7f87b0d4b31c
[armadillo ~]# podman exec -it enocean_example sh
[container ~]# ls /dev/ttymxc0
/dev/ttymxc0

図3.141 EnOcean デバイスを扱うためのコンテナ作成例


コンテナ内から、/dev/ttymxc0 を使って EnOcean データの送受信ができるようになります。

3.8. ソフトウェアの設計

Armadillo-IoT ゲートウェイ A6E を用いた製品のソフトウェア設計は、一般的な組み込み開発と基本的には変わりません。 しかし、 Armadillo Base OS という独自OSを搭載しているため、ソフトウェアの設計には特有のポイントがいくつかあります。 本章では、それらの設計時に考慮すべき Armadillo Base OS 特有のポイントについて紹介していきます。

3.8.1. 開発者が開発するもの、開発しなくていいもの

Armadillo Base OS では、組み込み機器において必要になる様々な機能を標準で搭載しています。

図3.142「開発者が開発するもの、開発しなくていいもの」図3.143「ゲートウェイコンテナ使用時、開発者が開発するもの、開発しなくていいもの」は、 Armadillo Base OS 搭載製品において、開発者が開発するものと開発しなくていいものをまとめた図です。

images/common-images/development-judge.png

図3.142 開発者が開発するもの、開発しなくていいもの


images/development-judge-a6e-with-gw-container.png

図3.143 ゲートウェイコンテナ使用時、開発者が開発するもの、開発しなくていいもの


開発しなくていいものについては設計を考える必要はありません。 開発するものに絞って設計を進めることができます。

[ティップ]

拡張ボードを追加するためにデバイスツリーのカスタマイズが必要となる場合は、デバイスツリー(dtbo)の追加が必要となります。

使用するデバイスによっては、Linux カーネルドライバの追加が必要となり、Linux カーネルのカスタマイズが必要となります。

3.8.2. ユーザーアプリケーションの設計

Armadillo Base OSでは基本的にユーザーアプリケーションを Podman コンテナ上で実行します。 そのため、実行環境として Armadillo Base OS を意識する必要はありません。

Podmanは、同じくコンテナを扱えるソフトウェアである Docker と基本的に互換性があります。

アットマークテクノでは、アットマークテクノが提供する Debian GNU/Linux ベースのコンテナイメージを提供しておりますが、それ以外のlink:Docker Hub などから使い慣れたディストリビューションのコンテナイメージを取得して開発することができます。

また Armadillo-IoT ゲートウェイ A6E では、ゲートウェイコンテナというコンテナイメージをプリインストールしています。必要な機能がゲートウェイコンテナに全て含まれているのであれば、VS Code にて設定を実施して Armadillo にインストールするだけでクラウドへの計測データーの送信や Armadillo の簡易な制御が可能となります。

3.8.2.1. ユーザーデータの保存場所

アプリケーションが出力するユーザーデータで保存が必要なものは、「電源を切っても保持されるディレクトリ(ユーザーデータディレクトリ)」にも記載があるとおり、 /var/app/volumes/ 以下に配置してください。

色々な場所にデータが保存されていますと Armadillo-IoT ゲートウェイ A6E の初期化を行う際に削除の処理が煩雑になりますので、 /var/app/volumes/ 以下に集約してください。

3.8.2.2. アプリケーション設定情報の保存場所

開発したアプリケーションやコンテナがバージョンアップした際にも必要となる設定情報は、 「電源を切っても保持されるディレクトリ(ユーザーデータディレクトリ)」 にも記載があるとおり、 /var/app/rollback/volumes/ 以下に保存してください。

3.8.2.3. LTE 通信を使用する場合に考慮すべきこと

LTE 通信は、周辺の状況や工事などによって長時間通信ができなくなる可能性があります。そのため、クラウドやサーバーへ送信すべきデーターを即時に送信できない可能性があります。

データーの再送処理や動作しているコンテナ内にキャッシュする処理を実装して、上記状況に備えてください。

3.8.2.4. ゲートウェイコンテナの概要

Armadillo-IoT ゲートウェイ A6E には、ゲートウェイコンテナがプリインストールされています。 このコンテナを利用することで、インターフェースの操作やクラウドへのデータアップロードなどを簡単に行うことができます。

ゲートウェイコンテナを利用して実施できる内容は下記の通りです。

表3.43 利用できるインターフェース・機能

インターフェース機能

RS-485 (ModbusRTU)

レジスタ読み出し

レジスタ書き込み

接点入力 2ch

ポーリング監視

エッジ検出

接点出力 2ch

指定レベル出力

アプリケーションLED

点灯/消灯操作

ユーザースイッチ

状態取得


表3.44 利用できるクラウドベンダー・サービス

クラウドベンダークラウドサービス

AWS

AWS IoT Core

Azure

Azure IoT


インターフェースやクラウドサービスの選択はコンフィグ設定で行う事ができます。 また、センサーデータのログ出力やネットワーク断時のキャッシュ機能にも対応しています。

詳細は、「ゲートウェイコンテナを動かす」 を参照してください。

3.8.3. 省電力・間欠動作の設計

Armadillo-IoT ゲートウェイ A6E は、バッテリー駆動などで必要となる、省電力・間欠動作での動作を行う為の制御を用意しております。 必要があれば、どのタイミングでスリープ・シャットダウンモードへ遷移するか、なにをトリガーとして起床するかを設計します。 次の章「間欠動作モード・起床条件と状態遷移図」にて、省電力・間欠動作の起床条件・状態遷移を説明します。詳細な使用方法は「省電力・間欠動作機能を使う」に記載しております。

3.8.3.1. 間欠動作モード・起床条件と状態遷移図

Armadillo-IoT ゲートウェイ A6E の動作モード・起床条件と状態遷移を図3.144「状態遷移図」に示します。また、動作モード毎のデバイス状態を表3.45「動作モード別デバイス状態」に示します。

images/aiotg_a6e_psmode.svg

図3.144 状態遷移図


表3.45 動作モード別デバイス状態

動作モード CPU LTE モジュール LED 有線 LAN USB, RS-485 など

アクティブ

動作

通信

動作

動作

通電

シャットダウン

停止

停止

消灯

停止

停止

スリープ

suspend-to-RAM

動作 [a]

消灯

停止

通電

スリープ(SMS 起床可能)

suspend-to-RAM

動作 [a]

消灯

停止

通電

[a] LTE通信は停止し、LTEモジュールは動作している状態です。Cat.M1モデルは「LTE モデム EMS31-J 省電力などの設定 (Cat.M1 モデル)」の設定に応じた省電力動作になります。


3.8.3.2. 間欠動作モード・起床条件

次に、各動作モードと利用することのできる起床条件について説明します。

3.8.3.3. アクティブモード

「CPU:動作」、「LTE-M:動作」 状態のモードです。

Armadillo-IoT ゲートウェイ A6Eの電源投入後Linuxカーネルが起動し、まずはアクティブモードに遷移します。

任意のアプリケーションの実行や、外部センサー・デバイスの制御、LTE-MやEthernetでの通信が可能ですが、最も電力を消費するモードです。 アクティブモードの時間をより短くすることで、消費電力を押さえることができます。

3.8.3.4. シャットダウンモード

「CPU:停止」、「LTE-M:停止」の状態であり最も消費電力を抑えることのできるモードです。

その反面、CPUを停止させ、Linuxカーネルをシャットダウンしている状態であるため、アクティブモードに遷移する場合はLinuxカーネルの起動分の時間がかかります。

シャットダウンモードからアクティブモードに遷移するには、RTCのアラーム割り込みを使用するか、一度電源を切断・再接続を行う必要があります。

3.8.3.5. スリープモード

「CPU:待機」、「LTE-M:停止」 状態のモードです。

CPU(i.MX6ULL)はパワーマネジメントのSuspend-to-RAM状態になり、LinuxカーネルはPauseの状態になります。 シャットダウンモードと比較すると消費電力は高いですが、Linuxカーネルの起動は不要であるため数秒程度でアクティブモードに遷移が可能です。 ユーザスイッチの投下、RTCアラーム割り込み、GPIO割り込み、USBデバイスの接続、UARTによるデータ受信、によってアクティブモードへの遷移ができます。

[警告]

Armadillo Base OS バージョン 3.17.3-at5 以降、Cat.M1 モデルで LTE 接続中にスリープモードをご利用になる場合、スリープモードからアクティブモードへ遷移するタイミングで ping による LTE 通信の導通確認を実施します。

ping 導通確認先の IP アドレスは以下の順序・ルールで決定します。「LTE再接続サービス」 で使用している設定ファイルを参照しています。

  1. /etc/atmark/connection-recover/gsm-ttyMux0_connection-recover.conf が存在してファイル内に PING_DEST_IP があれば、この値を使用します。
  2. /etc/atmark/connection-recover.conf が存在してファイル内に PING_DEST_IP があれば、この値を使用します。
  3. 両方とも存在しない場合は、8.8.8.8 を導通先として使用します。

3.8.3.6. スリープ(SMS 起床可能)モード (Cat.M1 モデルのみ)

「CPU:待機」、「LTE-M:待機」 状態のモードです。

スリープモードとの違いは、SMSの受信によって、アクティブモードへの遷移も可能である点です。 LTE-M:待機(PSM)の状態であるため、スリープモードよりも電力を消費します。

3.8.4. ログの設計

ユーザーアプリケーションのログは、不具合発生時の原因究明の一助になるため必ず残しておくことを推奨します。

3.8.4.1. ログの保存場所

ユーザーアプリケーションが出力するログは、「電源を切っても保持されるディレクトリ(ユーザーデータディレクトリ)」にも記載があるとおり、 /var/app/volumes/ 以下に配置するのが良いです。

コンテナの中から /var/app/volumes/ ディレクトリにアクセスすることになります。 手順についての詳細は実際に開発を行う箇所にて紹介します。

3.8.4.2. 保存すべきログ

  • Ethernet、LTE、BT、WLANなどの無線系のログ

    一般に不具合発生時によく疑われる箇所なので、最低でも接続・切断情報などのログを残しておくことをおすすめします。

  • ソフトウェアのバージョン

    /etc/sw-versions というファイルが Armadillo Base OS 上に存在します。 これは、 SWUpdate に管理されている各ソフトウェアのバージョンが記録されているファイルです。 このファイルの内容をログに含めておくことで、当時のバージョンを記録することができます。

  • A/B 面どちらであったか

    アップデート後になにか不具合があって、自動的にロールバックしてしまう場合があります。 後でログを確認する際に、当時 A/B 面どちらであったかで環境が大きく変わってしまい解析に時間がかかる場合があるので、どちらの面で動作していたかをログに残しておくことをおすすめします。

    図3.145「現在の面の確認方法」に示すコマンドを実行することで、現在 A/B どちらの面で起動しているかを確認できます。

    [armadillo ~]# abos-ctrl
    Currently booted on /dev/mmcblk0p1 1
    : (省略)

    図3.145 現在の面の確認方法


    1

    この実行結果から今の面は/dev/mmcblk0p1であることが分かります。

3.8.5. ウォッチドッグタイマー

Armadillo-IoT ゲートウェイ A6Eのウォッチドッグタイマーは、i.MX6ULLのWDOG(Watchdog Timer)を利用しています。

ウォッチドッグタイマーは、U-Boot によって有効化されます。標準状態でタイムアウト時間は10秒に設定されます。

何らかの要因でウォッチドッグタイマーのキックができなくなりタイムアウトすると、システムリセットが発生します。

ウォッチドッグタイマーの設定変更は、ioctlシステムコール経由で行うことができます。詳細な情報については、Linux カーネルのソースコードに含まれているドキュメント(Documentation/watchdog/watchdog-api.rst)を参照してください。

[ティップ]

ウォッチドッグタイマーを停止することはできません。

3.8.6. コンテナに Armadillo の情報を渡す方法

Armadillo Base OS からコンテナに環境変数として情報を渡すためにコンテナ起動設定ファイルを使用します。

コンテナ起動設定ファイル(conf ファイル)に関しては「コンテナ起動設定ファイルを作成する」を参照してください。

  • アットマークテクノが提供する情報を環境変数として渡す

    コンテナ起動設定ファイルに add_armadillo_env を使用してください。

    アットマークテクノが設定した LAN1(eth0)の MACアドレス、個体番号などの Armadillo の情報を環境変数としてコンテナに渡します。

    add_armadillo_env については「個体識別情報の環境変数の追加」を参照してください。

  • 任意の情報を環境変数として渡す

    コンテナ起動設定ファイルに add_args を使用してください。

    add_args についてはpodman run に引数を渡す設定」を参照してください。

    add_args を下記のように使用することでコンテナに環境変数として情報を渡すことができます。

    add_args --env=<環境変数名>=<値> 1

    図3.146 add_args を用いてコンテナに情報を渡すための書き方


    1

    シェルコマンドの出力を環境変数に代入する場合は <値> として $(シェルコマンド) を使用してください。

    add_args --env の例を示します。

    add_args --env=MY_ENV=my_value

    図3.147 add_args を用いてコンテナに情報を渡す例


    これにより、コンテナ内の環境変数 MY_ENV に文字列 my_value が設定されます。

3.8.7. Armadillo Base OS のデフォルトで開放しているポート

Armadillo Base OS では表3.46「Armadillo Base OS のデフォルトで開放しているポート」に示すポートをデフォルトで開放しています。

表3.46 Armadillo Base OS のデフォルトで開放しているポート

ポート番号プロトコル使用目的

58080

TCP

ABOS Web

5353

UDP

avahi(mDNS)


使用していないポートを開放することは攻撃の標的になります。 使用しないサービスを停止しポートを閉じてください。

ABOS Web のサービスを停止する方法は「ABOS Web を停止する」を、起動する方法は「ABOS Web を起動する」を参照してください。

図3.148「avahi-daemon を停止する」に avahi のサービスを停止する方法を示します。

[armadillo ~]# rc-update | grep avahi-daemon 1
         avahi-daemon |      default
[armadillo ~]# rc-service avahi-daemon status 2
 * status: started
[armadillo ~]# rc-service avahi-daemon stop 3
avahi-daemon             | * Stopping avahi-daemon ... [ ok ]
[armadillo ~]# rc-update del avahi-daemon 4
 * service avahi-daemon deleted from runlevel default
[armadillo ~]# persist_file -d /etc/runlevels/default/avahi-daemon 5

図3.148 avahi-daemon を停止する


1

OpenRC に avahi のサービスが登録されていることを確認します。

2

avahi のサービスが起動していることを確認します。

3

avahi のサービスを停止します。

4

サービスを管理している OpenRC から avahi のサービスの登録を解除します。

5

サービス設定ファイルの削除を永続化します。

図3.149「avahi-daemon を起動する」に avahi サービスを起動する方法を示します。

[armadillo ~]# rc-update | grep avahi-daemon 1
[armadillo ~]# rc-update add avahi-daemon 2
 * service avahi-daemon added to runlevel default
[armadillo ~]# rc-service avahi-daemon start 3
avahi-daemon             | * Starting avahi-daemon ... [ ok ]
[armadillo ~]# persist_file /etc/runlevels/default/avahi-daemon 4

図3.149 avahi-daemon を起動する


1

OpenRC に avahi のサービスが登録されていないことを確認します。

2

サービスを管理している OpenRC に avahi のサービスを登録します。

3

avahi のサービスを起動します。

4

サービス設定ファイルを永続化します。

3.9. ネットワーク設定

必要であれば、 Armadillo のネットワークの設定を行います。

3.9.1. ABOS Web とは

Armadillo Base OS(以降、 ABOS) には、 Armadillo と作業用 PC が同一 LAN 内に存在していれば Web ブラウザからネットワークの設定や、 SWU イメージのインストールなどを行うことが可能となる、 ABOS Web という機能があります。 この機能は、バージョン v3.17.4-at.7 以降の ABOS に標準で組み込まれています。

現在、ネットワークに関して ABOS Web で設定できるのは以下のものです。

  • WWAN設定
  • WLAN設定
  • 各接続設定(各ネットワークインターフェースの設定)
  • DHCPサーバー設定
  • NAT設定
  • VPN設定
[ティップ]

ABOS Webで設定できる項目はネットワーク関連以外にもありますが、それらについては「Web UI から Armadillo をセットアップする (ABOS Web)」で紹介します。

[注記]バージョン v3.17.4-at.7 以前から ABOS をアップデートした場合の注意

バージョン v3.17.4-at.7 以前からこのバージョン以降へ ABOS をアップデートすると、 avahi サービスが新しく追加されます。 ABOS Web にアクセスできるようにするためには、この avahi サービスが自動起動するように設定を変更する必要があります。 そのため、以下の手順にしたがって設定を変更してください。 (新しく追加されたサービスが自動起動することによる悪影響を防ぐため、アップデート直後では avahi サービスは自動起動しない設定になっています。)

[armadillo ~]# rc-update add avahi-daemon
[armadillo ~]# rc-service avahi-daemon start
[armadillo ~]# persist_file /etc/runlevels/default/avahi-daemon
[注記]バージョン 4.13 以前の mkswu を使用した場合の注意

バージョン v3.17.4-at.7 以降の ABOS に、バージョン 4.13 以前の mkswumkswu --init で作成した initial_setup.swu を インストールした場合、 ABOS Web にパスワードが設定されていないため自動起動しません。 そのため、以下の手順にしたがって ABOS Web のパスワードを設定してください。

[armadillo ~]# passwd abos-web-admin
[armadillo ~]# persist_file /etc/shadow
[armadillo ~]# rc-service abos-web restart

LTE モジュールを搭載した Armadillo をお使いで、LTE モジュールによる WWAN 接続でインターネットにアクセスする場合に、Armadillo に LAN で接続した機器から Armadillo をルーターとして利用したい場合には、NAT設定機能が役に立つでしょう。 LTE モジュールによる WWAN 通信でクラウドサービスに接続し、WLAN や LAN で接続した機器から集めたデータをクラウドサービスに転送したり、それらの機器を、クラウドサービスから Armadillo 経由で遠隔制御するようなシステムを構成する場合にご利用ください。

以下では、 ABOS Web を利用した各種ネットワーク設定の方法について紹介します。

3.9.2. ABOS Web へのアクセス

Armadillo と PC を有線 LAN で接続し、Armadillo の電源を入れて PC で Web ブラウザを起動した後、Web ブラウザのアドレスバーに次の URL を入力してください: https://armadillo.local:58080

ABOS Web は、初期状態では同一サブネットのネットワークのみアクセス可能です。
サブネット外からのアクセスを許可したい場合は、 /etc/atmark/abos_web/init.conf を作成し、ABOS Web のサービスを再起動してください。

以下の例ではコンテナとループバックからのアクセスのみを許可します:

[armadillo ~]# vi /etc/atmark/abos_web/init.conf
command_args="--allowed-subnets '10.88.0.0/16 127.0.0.0/8 ::1/128'"
[armadillo ~]# persist_file -v /etc/atmark/abos_web/init.conf
'/mnt/etc/atmark/abos_web/init.conf' -> '/target/etc/atmark/abos_web/init.conf'
[armadillo ~]# rc-service abos-web restart
[注記]

ABOS Web が動作する Armadillo が、同じ LAN 上に複数あると、ABOS Web に接続する URL のホスト名部分(armadillo.local)は、2台めでは armadillo-2.local、3台めでは armadillo-3.local のように、違うものが自動的に割り当てられます。 どのホスト名が、どの Armadillo のものなのかを判別するのが難しいので、複数台の Armadillo で同時に ABOS Web を動かすときは、LAN に固定 IP アドレスを設定して、IP アドレスで指定できるようにするのがよいでしょう。

また、VS Code 上で ABOSDE(Armadillo Base OS Development Environment) から、 ABOS Web が動作している Armadillo の一覧を確認し、 指定した Armadillo の ABOS Web を Web ブラウザ で開くことが出来ます。 ただし、ATDE のネットワークを NAT に設定している場合は Armadillo がリストに表示されません。

図3.150「ABOSDE で ローカルネットワーク上の Armadillo をスキャンする」 の赤枠で囲われているボタンをクリックすることで、 ローカルネットワーク上で ABOS Web が実行されている Armadillo をスキャンすることができます。

images/abos-images/abos-web/abosde_monitor_welcome_page.png

図3.150 ABOSDE で ローカルネットワーク上の Armadillo をスキャンする


図3.151「ABOSDE を使用して ABOS Web を開く」 の赤枠で囲われているマークをクリックすることで、 ABOS Web を Web ブラウザで開くことができます。

images/abos-images/abos-web/abosde_monitor_abos_web.png

図3.151 ABOSDE を使用して ABOS Web を開く


図3.152「ABOSDE に表示されている Armadillo を更新する」 の赤枠で囲われているマークをクリックすることで、ABOSDE に表示されている Armadillo を更新することができます。

images/abos-images/abos-web/abosde_monitor_rescan.png

図3.152 ABOSDE に表示されている Armadillo を更新する


3.9.3. ABOS Web のパスワード登録

initial_setup.swu の作成」で ABOS Web のログイン用パスワードを設定していない場合、 ABOS Web 初回ログイン時に、 "初回ログイン"のパスワード登録画面が表示されますので、パスワードを設定してください。

images/abos-images/abos-web/new-password.png

図3.153 パスワード登録画面


"初回ログイン"のパスワード登録画面で、"パスワード" フィールドと "パスワード(確認)" フィールドに、登録したいパスワードを入力してから、"登録" ボタンをクリックしてください。 パスワード登録完了画面が表示されたら、パスワード登録の完了です。

images/abos-images/abos-web/new-password_success.png

図3.154 パスワード登録完了画面


パスワード登録完了画面にある "ログインページ" というリンクをクリックすると、ログイン画面が表示されますので、先ほど登録したパスワードを入力して "ログイン" ボタンをクリックしてください。

ABOS Web に対応した Armadillo が正常に起動していれば、Web ブラウザに ABOS Web のログイン画面が表示されます。

images/abos-images/abos-web/login.png

図3.155 ログイン画面


ログイン画面で ABOS Web のパスワードを入力して認証されれば、ABOS Web の設定画面に表示が変わり、設定操作を行うことができます。

images/abos-images/abos-web/top.png

図3.156 トップページ


3.9.4. ABOS Web のパスワード変更

登録した ABOS Web のログイン用パスワードは「設定管理」画面から変更することができます。 トップページから「設定管理」をクリックすると、移動した先にパスワード変更画面が表示されますので、 現在のパスワードと変更後のパスワードを入力して登録ボタンをクリックしてください。

images/abos-images/abos-web/change-password.png

図3.157 ログイン画面


3.9.5. ABOS Web の設定操作

ABOS Web で Armadillo の動作設定を行うには、ログイン後に表示されるトップページで、設定したい機能へのリンクをクリックしてください。 リンクをクリックすると、リンク先の設定画面が表示されますので、設定画面で、現在の設定内容の確認や設定変更を行ってください。 現在の設定内容を確認するには、"各接続設定"をクリックしてください。 各機能の設定ページへのリンクは、それぞれの設定ページでも、左端にサイドメニュー形式で表示されます。 以後、サイドメニュー形式で表示されたリンクをクリックすることを、「サイドメニューから xxx を選択する」と表記します。 ログイン後に表示されるトップページと、それぞれの設定ページには、左端のサイドメニューに加え、上端右側に、現在の接続状態が表示されます。 現在の接続状態は、WWAN、WLAN、LAN、のそれぞれについて表示されます。 WWAN と WLAN は、それらの通信モジュールが Armadillo に搭載されていなければ、表示されません。

3.9.6. ログアウト

ABOS Web で必要なセットアップを行なったら、サイドメニューから "ログアウト" を選択してログアウトしてください。 ログアウトすると、ログイン画面が再び表示されますので、ABOS Web をすぐに使わないのであれば、Web ブラウザを閉じてください。

3.9.7. WWAN設定

LTE をはじめとする WWAN 通信モジュールを搭載した Armadillo の、WWAN 設定を行います。 この設定画面では、WWAN 接続設定の登録と、WWAN 接続の状態(現在のアドレス情報)の表示、登録済み WWAN 接続設定の編集と削除を行うことができます。 設定項目のうち、"MCC/MNC" は、通常は空欄にしてください。 MCC/MNC 以外の項目を正しく設定しても WWAN 通信が動作しない場合、特に SIM カードがマルチキャリア SIM の場合は、ご契約の通信事業者に MCC/MNM を問い合わせ、通信事業者から提示された MCC/MNC の値を設定してください。 それぞれの入力フィールドに設定値を入力して "接続して保存" ボタンをクリックすると、WWAN 接続の設定を登録して、WWAN 接続動作を実行します。 WWAN 通信設定が行われ、ネットワーク接続が確立した状態では、割当たっている IP アドレスなどを "現在のWWAN接続情報" に表示します。 図3.158「WWAN設定画面」に、WWAN 設定を行った状態を示します。

images/abos-images/abos-web/wwan.png

図3.158 WWAN設定画面


[ティップ]

ABOS Web のバージョン 1.3.3 以降では「IPv6 設定」を選択することができます。 使用する SIM によっては IPv6 が有効だと接続できず、無効にすると接続できることがあります。 その場合は、この設定を「使用しない」に設定して接続してください。

[警告]

閉域 LTE 網を使用する料金プランをご契約で本サービスをご利用になられる際の注意点。

「LTE再接続サービス」をご利用になられる場合(Cat.1 モデルはデフォルトで有効となっております、Cat.M1 モデルはデフォルト無効です)、コネクション状態確認時 PING 送付先の初期値は 8.8.8.8 ですが、この IP アドレスに対して ping 導通ができない場合、ping 導通が可能となる IP アドレスを指定する必要があります。 設定方法は、「LTE再接続サービス」を参照ください。

[ティップ]

「LTE再接続サービス」が動作している状態で WWAN を切断した場合、LTE 再接続サービスにより再度接続を試み、接続可能であれば接続状態へ戻ります。

「LTE再接続サービス」が動作している状態で WWAN が切断した状態を継続したい場合は、WWAN の設定を削除してください。

3.9.8. WLAN 設定

無線 LAN モジュールを搭載した Armadillo の、WLAN(無線 LAN)設定を行います。 この設定画面では、WLAN クライアント(子機)としての設定または、WLAN アクセスポイントとしての設定を行うことができます。 クライアントとアクセスポイントのどちらか一方について、接続設定の登録と接続の状態の表示、登録済み設定の削除を行なえます。 クライアントとアクセスポイントのどちらに設定するかは、"動作モード選択"欄で指定します。

クライアント設定とアクセスポイント設定の、それぞれについて、以下に説明します。

3.9.8.1. WLAN 設定(クライアントとしての設定)

"動作モード選択"欄で"クライアントとして使用する"を選択すると、クライアント設定画面が表示されます。 もしアクセスポイントに設定済みの場合は、アクセスポイントの設定を削除してください。 そうしないと、動作モードをクライアントに切り替えることができません。 設定項目のうち、ネットワーク名(SSID) は、リストから選択してください。 WLAN アクセスポイントを Armadillo が何も検出できない場合は、このリストが空になります。 セキュリティ方式も、リストから選択してください。 DHCP と 固定 は、DHCP を選択すると DHCP サーバーから IP アドレスを取得します。 固定 を選択すると、固定 IP アドレス設定用の入力フィールドを表示します。 それぞれの入力フィールドに設定値を入力して "接続して保存" ボタンをクリックすると、WLAN クライアント設定を登録して、WLAN 接続動作を実行します。 WLAN 接続設定が行われ、WLAN 接続が確立した状態では、割当たっている IP アドレスなどを "現在のWLAN接続情報" に表示します。

ABOS-WEB上では複数のネットワーク設定を保存することが可能です。 設定項目のうちにネットワーク情報を入力した後、 "保存" ボタンをクリックすると、入力した内容の登録のみを行い、接続は行いません。 登録した設定の一覧は WLAN ページの中央にあるリストに表示されます。 このリストでは WLAN 設定の接続/編集/削除を行うことができます。 保存した設定に接続先を変更したい場合はリストから選択して、"接続" ボタンをクリックしてください。 保存した設定を編集したい場合はリストから選択して、"設定を編集" ボタンをクリックしてください。 保存した設定を削除したい場合はリストから選択して、"設定を削除" ボタンをクリックしてください。

図3.159「WLAN クライアント設定画面」に、WLAN クライアント設定を行った状態を示します。

images/abos-images/abos-web/wlan_sta.png

図3.159 WLAN クライアント設定画面


登録済み WLAN クライアント設定を削除して、WLAN アクセスポイントとの接続を切断するには、"設定を削除" ボタンをクリックしてください。

3.9.8.2. WLAN 設定(アクセスポイントとしての設定)

"動作モード選択"欄で"アクセスポイントとして使用する"を選択すると、アクセスポイント設定画面が表示されます。 もしクライアントに設定済みの場合は、クライアントの設定を削除してください。 そうしないと、動作モードをアクセスポイントに切り替えることができません。 設定項目のうち、ブリッジアドレス は、WLAN アクセスポイントに割り当てる IP アドレスを入力してください。 サブネットマスク は、アクセスポイントのサブネットのものを入力してください。 使用周波数は、5GHz と 2.4GHz のうち使用するものを選択してください。 両方の周波数を同時に使用することはできません。 使用チャンネルは、リストから選択してください。 SSID と パスワード に入力した値は、アクセスポイントに設定した Armadillo に WLAN 子機を接続する際に使用します。

それぞれの入力フィールドに設定値を入力して "設定" ボタンをクリックすると、WLAN アクセスポイント設定を登録して、WLAN アクセスポイント動作を開始します。 WLAN アクセスポイント設定が行われ、アクセスポイント動作中の状態では、"現在のアクセスポイント情報" に設定内容を表示します。

図3.160「WLAN アクセスポイント設定画面」に、WLAN アクセスポイント設定を行った状態を示します。

images/abos-images/abos-web/wlan_ap.png

図3.160 WLAN アクセスポイント設定画面


[ティップ]

アクセスポイントモードのセキュリティ方式は、WPA2 を使用します。

3.9.9. 各接続設定(各ネットワークインターフェースの設定)

設定されたネットワーク接続の一覧を表示します。表示した接続のそれぞれについて、接続の有効化(「接続」)や無効化(「切断」)、および接続設定内容の編集や削除を行うことができます。 接続の操作を行う時は、操作したい接続をラジオボタンで選択してください。

images/abos-images/abos-web/connection.png

図3.161 現在の接続情報画面


ここで、「ネットワーク接続」は、Linux のネットワーク接続管理機能(NetworkManager)が管理するコネクションです。 ネットワーク接続に対する設定項目の詳細は、NetworkManager のリファレンス(https://developer-old.gnome.org/NetworkManager/stable/nmcli.html)をご覧ください。 接続設定内容を編集したい接続を選択して "設定を編集" ボタンをクリックすると、設定内容の編集画面を表示します。 LAN の接続以外、つまり、WWANと WLAN の接続に対する設定は、"WWAN設定" や "WLAN設定" の設定画面をお使いいただくのが簡単です。

それぞれの接続設定画面では、IPv4 と IPv6 のそれぞれについて、IP アドレスを自動割り当てするかまたは固定 IP アドレスにするかを選択して設定できます。 IP アドレスの割り当ては、デフォルトでは自動割り当てです。 Armadillo を接続した LAN や WLAN で、Armadillo を DHCP サーバーとして運用する場合は、それらのネットワーク接続を固定 IP アドレスに設定してください。

3.9.9.1. LAN 接続設定

LAN 接続の接続名は、デフォルトでは "Wired connection 1" です。 LAN ポートを二つ搭載した Armadillo では、二つめの LAN ポートに対応する "Wired connection 2" も有効です。 Armadillo を LAN と WWAN との間で IPv4 ルーターとして運用する場合は、LAN 接続の設定で IPv4 アドレスを固定 IP アドレスに設定して下さい。 図3.162「LAN 接続設定で固定 IP アドレスに設定した画面」に、LAN 接続の設定編集画面で固定 IP アドレスに設定した状態を示します。

images/abos-images/abos-web/connection-setup_lan.png

図3.162 LAN 接続設定で固定 IP アドレスに設定した画面


3.9.9.2. WWAN 接続設定

WWAN 接続の接続名は、デフォルトでは "gsm-ttyCommModem" です。

3.9.9.3. WLAN 接続設定

WLAN 接続の接続名は、デフォルトでは、クライアントモードが "abos_web_wlan"、アクセスポイントモードが "abos_web_br_ap" です。

3.9.10. DHCPサーバー設定

ネットワークインターフェースごとに、接続したネットワーク上で Armadillo を DHCP サーバーとして動作させる設定を行うことができます。 接続済みの DHCP サーバー情報を、画面上部の"現在のDHCP情報"に表示します。 DHCPサーバーの設定を登録する場合は、"DHCP情報入力"欄に設定内容を入力して"設定"ボタンをクリックしてください。 図3.163「eth0 に対する DHCP サーバー設定」に、一つめの LAN ポート(eth0)に対する設定を行った状態を示します。

images/abos-images/abos-web/dhcp.png

図3.163 eth0 に対する DHCP サーバー設定


たとえば、LAN ポートが二つある Armadillo で、それぞれの LAN ポートを異なる LAN に接続して、それぞれの LAN 上で Armadillo を DHCP サーバーとして運用する場合は、eth0 と eth1 に対して DHCP サーバー設定を行ってください。 DHCP サーバー設定を削除するには、"現在のDHCP情報"の一覧で削除したい設定を選択して、"削除"ボタンをクリックしてください。

3.9.11. NAT設定

この設定画面では、ルーター機能での宛先インターフェース設定と、Armadillo を接続した LAN 上の機器用のポートフォワーディング設定を行うことができます。 Armadillo を LAN や WLAN と WWAN との間でルーターとして運用する場合は、NAT設定の宛先インターフェースを WWAN のインターフェースに設定してください。 そして、LAN や WLAN 上の機器を、WWAN 接続したインターネットにサーバーとして公開したい場合は、ポートフォワーディング設定を使ってください。

3.9.11.1. NAT 設定

ルーター機能での宛先インターフェース設定を行なえます。 図3.164「LTE を宛先インターフェースに指定した設定」に、宛先インターフェースに ppp0 を指定した場合の画面を示します。

images/abos-images/abos-web/nat_if_ppp0.png

図3.164 LTE を宛先インターフェースに指定した設定


3.9.11.2. ポートフォワーディング設定

受信インターフェースごとに、ポートフォワーディング設定を登録できます。 図3.165「LTE からの受信パケットに対するポートフォワーディング設定」 に、受信インターフェース ppp0 について、ポート8080番宛の tcp パケットをポートフォワーディングする設定を行った状態を示します。

images/abos-images/abos-web/nat_port_forwarding.png

図3.165 LTE からの受信パケットに対するポートフォワーディング設定


3.9.12. VPN設定

Armadillo の VPN 接続設定を行います。 この設定画面では、認証方式や VPN クライアントの設定ファイル、認証用の証明書と鍵の設定を行うことができます。 VPN 接続を設定していれば、現在の接続状態も表示します。 現在の接続状態表示欄にある "接続" ボタンと "切断" ボタンで、VPN 接続の接続と切断を行なえます。 VPN クライアントは、現在 OpenVPN をサポートしています。

図3.166「VPN 設定」に、VPN 接続設定を行った状態を示します。

images/abos-images/abos-web/vpn-setting.png

図3.166 VPN 設定


認証方式は、"ユーザ名とパスワード" と "証明書" のどちらか一方を選択できます。 認証方式が "証明書" の場合、.ovpn ファイルに証明書や鍵が埋め込まれていれば、それらのファイルを指定する必要はありません。

ABOS Web は、VPN 接続を設定する際に abos_web_openvpn という名前のコンテナを自動的に作成し、このコンテナで VPN クライアントを実行します。 VPN 接続動作を実行する時には、進行状況を示すログを表示します。

登録済み VPN 設定を削除して、VPN 接続を切断するには、"設定を削除" ボタンをクリックしてください。

3.9.13. 状態一覧

各設定画面で行った設定の現在状態を、設定ごとに区切って一覧表示します。

3.10. ABOS Web をカスタマイズする

ABOS Web では以下の要素についてお客様自身で用意したものを使用して カスタマイズすることができます。

  • ロゴ画像
  • ヘッダロゴアイコン画像
  • ヘッダタイトル
  • favicon 画像
  • 背景色
  • メニューの表示名

ABOS Web をお客様の最終製品に組み込む場合、自社のロゴ画像に変更するといったような 使い方ができます。

カスタマイズは、「設定管理」で行うことができます。

[注記]

カスタマイズは ABOS Web のバージョン 1.3.0 以降で対応しています。

images/abos-images/abos-web/customize.png

図3.167 ABOS Web のカスタマイズ設定


  • ロゴ画像

    ログインページや新規パスワード設定画面で表示される画像です。 「ファイルを選択」をクリックしてアップロードしたい画像ファイルを選択してください。 フォーマットは PNG のみで、ファイルサイズは 3MB のものまでアップロードできます。

  • ヘッダロゴアイコン画像

    画面左上に常に表示されている画像です。 「ファイルを選択」をクリックしてアップロードしたい画像ファイルを選択してください。 フォーマットは PNG のみで、ファイルサイズは 3MB のものまでアップロードできます。

  • ヘッダタイトル

    画面左上に常に表示されている文字列です。24文字まで入力できます。

  • favicon 画像

    Web ブラウザのタブなどに小さく表示される画像です。 favicon 画像は以下の種類を favicon ディレクトリに保存して、 favicon ディレクトリごと zip 圧縮したものをアップロードしてください。

    表3.47 用意する favicon 画像

    ファイル名縦横サイズ説明

    android-chrome-192x192.png

    192x192

    スマートフォンのホームに Web ページを追加した時に使用されます。

    android-chrome-512x512.png

    512x512

    Web ページを開いた時のスプラッシュ画面に使用されます。

    apple-touch-icon.png

    180x180

    スマートフォンのホームに Web ページを追加した時に使用されます。

    favicon-16x16.png

    16x16

    Web ブラウザで使用されます。

    favicon-32x32.png

    32x32

    Web ブラウザで使用されます。

    mstile-150x150.png

    150x150

    Windows でスタート画面にピン止めしたときに使用されます。


  • 背景色

    5 種類の中から選択できます。

  • メニューの表示名

    画面左にあるメニューの表示名を変更する、または非表示にすることができます。 「メニュー項目を変更する」をクリックし、変更用ページへ行ってください。

    images/abos-images/abos-web/customize-menu.png

    図3.168 メニュー変更画面 (一部)


    各メニュー項目名と説明を変更することができます。 項目名を空欄にするとそのメニューは非表示になります。 入力し終わったらページ下部の「メニューを設定」をクリックしてください。

画像やメニューの変更後、すぐに Web ブラウザ画面に反映されない場合は、 お使いの Web ブラウザの設定でキャッシュの削除を行ってください。

変更完了後は、「カスタマイズ機能を無効にする」をクリックするとカスタマイズ項目が非表示になり それ以上カスタマイズできなくなります。お客様の最終製品に ABOS Web を組み込む場合に実行してください。

[ティップ]

Armadillo 内の /etc/atmark/abos_web/customize_disable ファイルを削除すると、 再びカスタマイズ項目が表示されるようになります。

3.11. Network Time Protocol (NTP, ネットワーク・タイム・プロトコル) の設定

Armadillo Base OS では chronyd を使用しています。

デフォルトの設定(使用するサーバーなど)は /lib/chrony.conf.d/ にあり、 設定変更用に /etc/chrony/conf.d/ のファイルも読み込みます。 /etc/chrony/conf.d/ ディレクトリに /lib/chrony.conf.d/ と同名の 設定ファイルを配置することで、デフォルトのファイルを読み込まないようになります。

時刻取得に関する設定は 2 つのファイルに分かれています:

  • initstepslew.confchronyd 起動時「 initstepslew 」コマンドでサーバーと通信し時刻を取得します。
  • servers.confchronyd 起動後周期的に「 pool 」または「 server 」コマンドでサーバーと通信し時刻を補正します。

例えば、 NTP サーバーを変更する際は 図3.169「chronyd のコンフィグの変更例」 に示す通り /etc/chrony/conf.d/initstepslew.conf/etc/chrony/conf.d/servers.conf に記載します:

[armadillo ~]# vi /etc/chrony/conf.d/initstepslew.conf 1
initstepslew 10 192.0.2.1
[armadillo ~]# vi /etc/chrony/conf.d/servers.conf 2
server 192.0.2.1 iburst
[armadillo ~]# persist_file -rv /etc/chrony/conf.d 3
'/mnt/etc/chrony/conf.d/initstepslew.conf' -> '/target/etc/chrony/conf.d/initstepslew.conf'
'/mnt/etc/chrony/conf.d/servers.conf' -> '/target/etc/chrony/conf.d/servers.conf'
[armadillo ~]# rc-service chronyd restart 4
chronyd          | * Stopping chronyd ... [ ok ]
chronyd          | * Starting chronyd ... [ ok ]
armadillo:~# chronyc -n sources 5
MS Name/IP address         Stratum Poll Reach LastRx Last sample
===============================================================================
^* 192.0.2.1                     2   6    17    24    +11us[  +34us] +/-   53ms

図3.169 chronyd のコンフィグの変更例


1

起動時のサーバー設定です。不要な場合は空のファイルを生成してください。

2

運用時のサーバー設定です。複数の行または「pool」の設定も可能です。

3

ファイルを保存します。

4

chronyd サービスを再起動します。

5

chronyc で新しいサーバーが使用されていることを確認します。

NTP の設定は ABOS Web や Rest API を使って行うこともできます。詳細は、 「時刻設定」 および 「Rest API : 時刻の設定」 を参照してください。

3.12. Armadillo Twin を体験する

Armadillo Twin を利用したデバイス運用管理を検討する場合は、一度Armadillo Twin をお試しいただくことをおすすめします。 Armadillo Twin は、無償トライアルでご登録いただくことで、3ヶ月間無償で全ての機能をご利用いただくことができます。 また、トライアル中の設定内容は、有料の月額プランに申込後も引き継いで利用することができます。

詳細は Armadillo Twin ユーザーマニュアル 「アカウント・ユーザーを作成する」 をご確認ください。

3.13. ABOSDEによるアプリケーションの開発

ここでは、ABOSDE(Armadillo Base OS Development Environment) によるアプリケーション開発の概要とABOSDEで作成される各プロジェクトの違いについて説明します。

ABOSDE は Visual Studio Code にインストールできる開発用エクステンションです。 ABOSDE を使用することで、コンテナ及びコンテナ自動起動用設定ファイルの作成、コンテナ内におけるパッケージのインストール、コンテナ内で動作するアプリケーション本体の開発をすべてVS Code内で行うことができます。

ABOSDEでは、以下のようなアプリケーションを開発できます。

  • ゲートウェイコンテナアプリケーション
  • CUI アプリケーション
  • C 言語アプリケーション

3.13.1. ABOSDEの対応言語

表3.48「ABOSDEの対応言語」に示すように、アプリケーション毎に対応している言語が異なります。

表3.48 ABOSDEの対応言語

アプリケーションの種類使用言語(フレームワーク)

ゲートウェイアプリケーション

Python

CUI アプリケーション

シェルスクリプト

Python

C言語アプリケーション

C 言語


3.13.2. 参照する開発手順の章の選択

どのようなアプリケーションを開発するかによってABOSDEによる開発手順が異なります。図3.170「参照する開発手順の章を選択する流れ」を参考に、ご自身が開発するアプリケーションに適した章を参照してください。

images/common-images/abosde_app_dev_flowchart.png

図3.170 参照する開発手順の章を選択する流れ


ゲートウェイコンテナアプリケーション
CUI アプリケーション
C 言語アプリケーション
  • 対象ユーザー

    • C 言語でないと実現できないアプリケーションを開発したい
    • 既存の C 言語によって開発されたアプリケーションを Armadillo で動作させたい
    • 開発環境に制約がある
  • マニュアルの参照先

3.14. ゲートウェイコンテナアプリケーションの開発

ATDE 上の VS Code でゲートウェイコンテナ内で動作するゲートウェイコンテナアプリケーションを開発する手順を示します。

[警告]

ゲートウェイコンテナアプリケーションを開発・使用するためには Armadillo-IoT ゲートウェイ A6E にゲートウェイコンテナがインストールされている必要があります。もし、ゲートウェイコンテナを削除している場合は再度 Armadillo-IoT ゲートウェイ A6E にゲートウェイコンテナをインストールする必要があります。

ゲートウェイコンテナのインストール方法は、インストールディスクを使用して Armadillo-IoT ゲートウェイ A6E のソフトウェアを初期化する方法と、SWU イメージを使用してインストールする方法があります。

インストールディスクの使用方法は「インストールディスクについて」を参照してください。

SWU イメージを使用してインストールする場合は、「SWUインストール」を参照し、以下のイメージをご利用ください。 また、アットマークテクノが配布しているコンテナを既にインストールしている場合は、先にそのコンテナをアンインストールする必要があります。 アンインストール手順は「コンテナとコンテナに関連するデータを削除する」を参照してください。

Armadilloサイト - Armadillo-IoT ゲートウェイ A6E ソフトウェアダウンロード

https://armadillo.atmark-techno.com/armadillo-iot-a6e/resources/software

3.14.1. ゲートウェイコンテナアプリケーション開発の流れ

ゲートウェイコンテナアプリケーションを開発する流れは以下のようになります。

images/gw-app-prj-cycle.svg

図3.171 ゲートウェイコンテナアプリケーション開発の流れ


3.14.2. ATDE 上でのセットアップ

ここでは、開発開始時の ATDE 上でのセットアップ手順について説明します。 本章は ATDE と VS Code のセットアップが完了していることを前提としております。セットアップがまだの方は、「開発の準備」を参照してセットアップを完了してください。

3.14.2.1. プロジェクトの作成

VS Code の左ペインの [A6E] から [GW New Project] を実行し、表示されるディレクトリ選択画面からプロジェクトを保存するディレクトリを選択してください。 実行するためには右に表示されている三角形ボタンを押してください。 保存先を選択すると、プロジェクト名を入力するダイアログが表示されるので、任意のプロジェクト名を入力してエンターキーを押してください。 この操作により、選択した保存先に、入力したプロジェクト名と同名のディレクトリが作成されます。

また、ここでは次のように設定しています。

  • 保存先 : ホームディレクトリ
  • プロジェクト名 : my_project
images/common-images/gw_vscode_new_project.png

図3.172 プロジェクトを作成する


images/abos-images/cui-app/flutter_vscode_project_name.png

図3.173 プロジェクト名を入力する


3.14.3. アプリケーション開発

3.14.3.1. VS Code の起動

ここでは、実際に Armadillo 上でサンプルアプリケーションを起動する場合の手順を説明します。 プロジェクトディレクトリへ移動し VS Code を起動します。

[ATDE ~]$ code ./my_project

図3.174 VS Code で my_project を起動する


3.14.3.2. ディレクトリ構成

プロジェクトには下記のディレクトリがあります。

  • app : アプリケーションに直接関わるファイルが含まれるディレクトリです。

    • config : クラウド情報の設定ファイルとインターフェースの設定ファイルが配置されます。
    • example : ゲートウェイコンテナアプリケーションの拡張例のサンプルファイルがあります。詳細は「ゲートウェイコンテナアプリケーションを改造する」を参照してください。
    • src : ゲートウェイコンテナアプリケーションのソースファイルが配置されます。
  • config : 設定に関わるファイルが含まれるディレクトリです。

3.14.3.3. 初期設定

初期設定では Armadillo と SSH で接続するための秘密鍵と公開鍵の生成を行います。

作成したプロジェクトディレクトリへ移動して VS Code を起動してください。

[ATDE ~]$ cd my_project
[ATDE ~/my_project]$ code ./

図3.175 初期設定を行う


VS Code の左ペインの [my_project] から [Setup environment] を実行します。

images/common-images/gw_vscode_setup_environment.png

図3.176 VS Code で初期設定を行う


選択すると、 VS Code の下部に以下のようなターミナルが表示されます。

images/abos-images/cui-app/flutter_vscode_terminal.png

図3.177 VS Code のターミナル


このターミナル上で以下のように入力してください。

 *  Executing task: ./scripts/setup_env.sh

Generating public/private ed25519 key pair.
Enter passphrase (empty for no passphrase): 1
Enter same passphrase again: 2
Your identification has been saved in /home/atmark/.ssh/id_ed25519_vscode
:(省略)

 *  Terminal will be reused by tasks, press any key to close it.  3

図3.178 SSH 用の鍵を生成する


1

パスフレーズを設定します。設定しない場合は何も入力せず Enter を押します。

2

1 でパスフレーズを設定した場合は、確認のため再度入力してください。

3

ここで何か任意のキーを押すとターミナルが閉じます。

パスフレーズを設定した場合は、アプリケーションを Armadillo へ転送する時にパス フレーズの入力を求められることがあります。

[ティップ]

SSH の鍵は $HOME/.ssh/id_ed25519_vscode (と id_ed25519_vscode.pub ) に保存されていますので、 プロジェクトをバックアップする時は $HOME/.ssh も保存してください。

3.14.4. ゲートウェイコンテナアプリケーションの設定

ゲートウェイコンテナアプリケーションは、ゲートウェイコンテナ上で動作します。 ゲートウェイコンテナについての詳細は 「ゲートウェイコンテナの概要」 をご参照ください。

3.14.4.1. ゲートウェイコンテナの設定ファイルの編集

ゲートウェイコンテナの設定ファイルは app/config ディレクトリに配置されています。

  • cloud_agent.conf: クラウド情報の設定
  • sensing_mgr.conf: インターフェース設定

3.14.4.2. 接続先クラウド情報の設定

クラウドと連携する場合、接続先クラウドの情報を入力する必要があります。 設定ファイルは Armadillo Base OS では /var/app/rollback/volumes/gw_container/config/cloud_agent.conf に存在し、VS Code では app/config/cloud_agent.conf に存在します。

[CLOUD]
SERVICE = ;AWS or AZURE

[LOG]
FILE_LOG = true
STREAM_LOG = true

[AWS]
AWS_IOT_HOST =
AWS_IOT_REGION =
AWS_IOT_ACCOUNTID =
AWS_IOT_ENDPOINT =
AWS_IOT_CERT_FILE = /cert/device/device_cert.pem
AWS_IOT_POLICY_FILE = /config/aws_iot_policy.json
AWS_IOT_SHADOW_ENDPOINT =
AWS_IOT_CA_FILE = /cert/ca/AmazonRootCA1.pem
AWS_IOT_PKCS11_PATH = /usr/lib/plug-and-trust/libsss_pkcs11.so
AWS_IOT_KEY_LABEL = sss:100100F0
AWS_ACCESS_KEY =
AWS_SECRET_KEY =
AWS_IOT_PORT = 443
AWS_IOT_PIN =

[AZURE]
AZURE_IOT_DEVICE_DPS_ENDPOINT = global.azure-devices-provisioning.net
AZURE_IOT_DEVICE_DPS_ID_SCOPE =
AZURE_IOT_KEY_FILE = /cert/device/key.pem
AZURE_IOT_CERT_FILE = /cert/device/device_cert.pem

図3.179 /var/app/rollback/volumes/gw_container/config/cloud_agent.conf のフォーマット


  • 接続先の クラウドサービス 種別

    ゲートウェイコンテナが接続するクラウドサービスの種別を指定します。 設定ファイル中の以下の箇所が該当します。

    [CLOUD]
    SERVICE = ;AWS or AZURE

    表3.49 [CLOUD] 設定可能パラメータ

    項目概要 設定値 内容

    SERVICE

    接続先クラウドサービスを指定

    AWS

    AWS IoT Core に接続

    Azure

    Azure IoT に接続


  • ログ出力

    クラウド との接続状態や送受信したデータのログを ログファイルに保存したり、コンソールに出力することが可能です。 設定ファイル中の以下の箇所が該当します。

    [LOG]
    FILE_LOG = true
    STREAM_LOG = true

    表3.50 [CLOUD] 設定可能パラメータ

    項目概要 設定値 内容

    FILE_LOG

    ログファイルに出力するか

    (デフォルト)true

    出力する

    false

    出力しない

    STREAM_LOG

    コンソールに出力するか

    (デフォルト)true

    出力する

    false

    出力しない


  • AWS

    ここでは、 AWS に接続する場合の設定内容を記載します。 設定ファイル中の以下の箇所が該当します。

    [AWS]
    AWS_IOT_HOST =
    AWS_IOT_REGION =
    AWS_IOT_ACCOUNTID =
    AWS_IOT_ENDPOINT =
    AWS_IOT_CERT_FILE = /cert/device/device_cert.pem
    AWS_IOT_POLICY_FILE = /config/aws_iot_policy.json
    AWS_IOT_SHADOW_ENDPOINT =
    AWS_IOT_CA_FILE = /cert/ca/AmazonRootCA1.pem
    AWS_IOT_PKCS11_PATH = /usr/lib/plug-and-trust/libsss_pkcs11.so
    AWS_IOT_KEY_LABEL = sss:100100F0
    AWS_ACCESS_KEY =
    AWS_SECRET_KEY =
    AWS_IOT_PORT = 443
    AWS_IOT_PIN =

    表3.51 [AWS] 設定可能パラメータ

    項目概要設定値・設定例 取得方法

    AWS_IOT_HOST

    IoT Core REST API エンドポイント(リージョンに準ずる)

    (例) iot.ap-northeast-1.amazonaws.com

    AWS IoT Core - コントロールプレーンエンドポイント [https://docs.aws.amazon.com/ja_jp/general/latest/gr/iot-core.html] から取得

    AWS_IOT_REGION

    リージョン

    (例) ap-northeast-1

    AWS リージョンエンドポイント[https://docs.aws.amazon.com/ja_jp/general/latest/gr/rande.html] から取得

    AWS_IOT_ACCOUNTID

    アカウントID

    (例) 111111111111

    AWS マネジメントコンソール上から取得(参考:「設定に必要となるパラメータを取得する」)

    AWS_IOT_ENDPOINT

    AWS IoT Core エンドポイント(リージョンに準ずる)

    (例) https://iot.ap-northeast-1.amazonaws.com

    AWS IoT Core - コントロールプレーンエンドポイント [https://docs.aws.amazon.com/ja_jp/general/latest/gr/iot-core.html] から取得

    AWS_IOT_CERT_FILE

    デバイス証明書ファイルパス

    (デフォルト)/cert/device/device_cert.pem [a]

    変更不要

    AWS_IOT_POLICY_FILE

    AWS IoT Core ポリシー テンプレートファイルパス

    (デフォルト)/config/aws_iot_policy.json

    変更不要

    AWS_IOT_SHADOW_ENDPOINT

    AWS IoT Core エンドポイント

    (例)xxxxxxxxx-ats.iot.ap-northeast-1.amazonaws.com

    AWS IoT Core [設定] - [デバイスデータエンドポイント] から取得 (参考:「設定に必要となるパラメータを取得する」)

    AWS_IOT_CA_FILE

    AWS IoT Core ルートCAファイルパス

    (デフォルト)/cert/ca/AmazonRootCA1.pem [a]

    変更不要

    AWS_IOT_PKCS11_PATH

    PKCS#11 ライブラリパス

    (デフォルト)/usr/lib/plug-and-trust/libsss_pkcs11.so

    変更不要

    AWS_IOT_KEY_LABEL

    利用する秘密鍵のラベル

    (デフォルト)sss:100100F0

    変更不要

    AWS_ACCESS_KEY

    アクセスキー

    (例)AAAAAAAAAXXXXXXX

    「アクセスキーを作成する」 でダウンロードしたIAM ユーザー アクセスキー情報

    AWS_SECRET_KEY

    シークレットキー

    (例)sssssssddddddtttttttttt

    「アクセスキーを作成する」 でダウンロードしたIAM ユーザー アクセスキー情報

    AWS_IOT_PORT

    MQTT 接続ポート

    (デフォルト)443

    変更不要

    AWS_IOT_PIN

    PIN

    -

    指定不要

    [a] ゲートウェイコンテナバージョン 2.1.1 でパスを変更しました


[注記]

上記パラメータのうち、以下のパラメータはAWS IoT Core へのデバイス登録完了後クリアされます。 デバイスを AWS IoT Core から削除した場合など再度デバイス登録を行いたい場合は、再度設定してください。

  • AWS_IOT_ACCOUNTID
  • AWS_ACCESS_KEY
  • AWS_SECRET_KEY
  • Azure

    ここでは、 Azure に接続する場合の設定内容を記載します。 設定ファイル中の以下の箇所が該当します。

    [AZURE]
    AZURE_IOT_DEVICE_DPS_ENDPOINT = global.azure-devices-provisioning.net
    AZURE_IOT_DEVICE_DPS_ID_SCOPE =
    AZURE_IOT_KEY_FILE = /cert/device/key.pem
    AZURE_IOT_CERT_FILE = /cert/device/device_cert.pem

    表3.52 [AZURE] 設定可能パラメータ

    項目概要設定値・設定例 取得方法

    AZURE_IOT_DEVICE_DPS_ENDPOINT

    DPS エンドポイント

    (デフォルト)global.azure-devices-provisioning.net

    変更不要

    AZURE_IOT_DEVICE_DPS_ID_SCOPE

    Azure IoT Central ID スコープ

    (例)0ne12345678

    図6.89「Azure IoT Hub と DPS の設定を実行する」 で表示された内容を使用

    AZURE_IOT_KEY_FILE

    デバイスリファレンスキーファイルパス

    (デフォルト)/cert/device/key.pem [a]

    変更不要

    AZURE_IOT_CERT_FILE

    デバイス証明書ファイルパス

    (デフォルト)/cert/device/device_cert.pem [a]

    変更不要

    [a] ゲートウェイコンテナバージョン 2.1.1 でパスを変更しました。


3.14.4.3. インターフェース設定

インターフェースの動作設定を行います。 設定ファイルは Armadillo Base OS では、`/var/app/rollback/volumes/gw_container/config/sensing_mgr.conf`に存在し、VS Code では `app/config/sensing_mgr.conf`に存在します。

[DEFAULT]
; cloud_config=true or false
cloud_config=false
; send_cloud=true or false
send_cloud=false
; cache=true or false
cache=false
; send_interval[sec]
send_interval=10
; data_send_oneshot=true or false
data_send_oneshot=false
; wait_container_stop[sec]
wait_container_stop=0

[LOG]
file=true
stream=true

[CPU_temp]
; type=polling or none
type=polling
; polling_interval[sec]
polling_interval=1

[DI1]
; type=polling or edge
type=
; interval[sec]
interval=
; edge_type=falling or rising or both
edge_type=

[DI2]
; type=polling or edge
type=
; interval[sec]
interval=
; edge_type=falling or rising or both
edge_type=

[DO1]
; output_state=high or low
output_state=
; output_time[sec]
output_time=
; output_delay_time[sec]
output_delay_time=

[DO2]
; output_state=high or low
output_state=
; output_time[sec]
output_time=
; output_delay_time[sec]
output_delay_time=

[RS485_Data1]
;[RS485_Data1] ~ [RS485_Data4]
method=none
baudrate=
data_size=
; parity=none or odd or even
parity=
; stop=1 or 2
stop=
device_id=
func_code=
register_addr=
register_count=
; endian=little or big
endian=
; interval[sec]
interval=
; data_offset is option
data_offset=
; data_multiply is option
data_multiply=
; data_divider is option
data_divider=

図3.180 /var/app/rollback/volumes/gw_container/config/sensing_mgr.conf のフォーマット


  • 全体動作設定

    全体的な動作設定を行います。 設定ファイル中の以下の箇所が該当します。

    [DEFAULT]
    ; cloud_config=true or false
    cloud_config=false
    ; send_cloud=true or false
    send_cloud=false
    ; cache=true or false
    cache=false
    ; send_interval[sec]
    send_interval=10
    ; data_send_oneshot=true or false
    data_send_oneshot=false
    ; wait_container_stop[sec]
    wait_container_stop=0

    表3.53 [DEFAULT] 設定可能パラメータ

    項目概要 設定値 内容

    cloud_config

    クラウドからの設定変更を許容するか

    true

    許容する

    (デフォルト)false

    無視する

    send_cloud

    クラウドにデータを送信するか

    true

    送信する

    (デフォルト)false

    送信しない

    cache

    キャッシュ実施可否

    true

    キャッシュを実施する。ネットワーク状態の異常などによりクラウドへデーターを送信できない場合、キャッシュに計測データ―を一時保存し、ネットワーク復旧後にクラウドへ送信します。

    (デフォルト)false

    キャッシュを実施しない

    send_interval

    データ送信間隔[sec]

    1~10

    この値に従って、クラウドへデータを送信する

    data_send_oneshot

    データ取得後コンテナを終了させるか

    true

    1回データを取得し、コンテナを終了します。コンテナ終了通知をトリガに間欠動作を行う( 「状態遷移トリガにコンテナ終了通知を利用する」 )場合は、この設定にする必要があります。

    (デフォルト)false

    コンテナの実行を継続する (設定したインターバルでデータを取得する)

    wait_container_stop

    コンテナ終了までの待ち時間[sec]

    0~60

    data_send_oneshot が true の場合、クラウドへのデータ送信後、設定した時間 wait してからコンテナを終了する [a]

    [a] 現時点では 0 を設定してください


[注記]

クラウドへのデータ送信は send_interval で指定した間隔毎に行います。 値の取得間隔は、後述の通り各項目毎に指定することができます。 値を取得するタイミングとクラウドへのデータ送信のタイミングを近くするためには、 値の取得間隔より send_interval を短くするか、同じにすることを推奨します。

  • ログ出力

    取得したデータのログを ログファイルに保存したり、コンソールに出力することが可能です。 設定ファイル中の以下の箇所が該当します。

    [LOG]
    file=true
    stream=true

    表3.54 [LOG] 設定可能パラメータ

    項目概要 設定値 内容

    FILE_LOG

    ログファイルに出力するか

    (デフォルト)true

    出力する

    false

    出力しない

    STREAM_LOG

    コンソールに出力するか

    (デフォルト)true

    出力する

    false

    出力しない


  • CPU_temp

    CPU 温度読み出しに関する設定を行います。 設定ファイル中の以下の箇所が該当します。

    [CPU_temp]
    ; type=polling or none
    type=polling
    ; polling_interval[sec]
    polling_interval=1

    表3.55 [CPU_temp] 設定可能パラメータ

    項目概要 設定値 内容

    type

    動作種別

    (空欄) or none

    CPU 温度取得を行わない

    polling

    ポーリング

    polling_interval

    データ取得間隔[sec]

    1~3600

    この値に従って、CPU 温度を読み出します


  • 接点入力

    接点入力に関する設定を行います。 設定ファイル中の以下の箇所が該当します。

    [DI1]
    ; type=polling or edge
    type=
    ; interval[sec]
    interval=
    ; edge_type=falling or rising or both
    edge_type=
    
    [DI2]
    ; type=polling or edge
    type=
    ; interval[sec]
    interval=
    ; edge_type=falling or rising or both
    edge_type=

    表3.56 [DI1,DI2] 設定可能パラメータ

    項目概要 設定値 内容

    type

    動作種別

    (空欄) or none

    接点入力状態取得を行わない

    polling

    ポーリング

    edge

    エッジ検出。データ取得間隔に設定した周期で値を取得し、前回取得時から指定方向に値が変化した場合、クラウドへデータ―を送信します。

    interval

    データ取得間隔[sec]

    1~3600

    この値に従って、値を読み出します

    edge_type

    エッジ検出設定

    falling

    立ち下がりエッジ

    rising

    立ち上がりエッジ

    both

    両方


  • 接点出力

    接点出力に関する設定を行います。 設定ファイル中の以下の箇所が該当します。 表3.53「[DEFAULT] 設定可能パラメータ」 において、クラウドと通信しない場合はゲートウェイコンテナ起動後に設定した内容を出力します。クラウドと通信する場合は、「クラウドからの操作」 がトリガとなり、出力を開始します。

    [DO1]
    ; output_state=high or low
    output_state=
    ; output_time[sec]
    output_time=
    ; output_delay_time[sec]
    output_delay_time=
    
    [DO2]
    ; output_state=high or low
    output_state=
    ; output_time[sec]
    output_time=
    ; output_delay_time[sec]
    output_delay_time=

    表3.57 [DO1,DO2] 設定可能パラメータ

    項目概要 設定値 内容

    output_state

    出力状態

    high

    High 出力。クラウドからの設定内容更新が有効の場合に、クラウドからの設定変更が可能です。

    low

    Low 出力。クラウドからの設定内容更新が有効の場合に、クラウドからの設定変更が可能です。

    disable

    「電源を安全に切るタイミングを通知する」 で接点出力を使用する場合など、ゲートウェイコンテナで接点出力を使用しないときに設定します。また、この値に設定すると、クラウドからの設定変更・動作指示は無視されます。

    指定なし

    ゲートウェイコンテナで接点出力の初期状態を設定しないときに使用します。接点出力を設定しないため、ゲートウェイコンテナ起動時の出力状態になります。クラウドからの設定内容更新が有効の場合に、クラウドからの設定変更が可能です。

    output_time

    出力時間[sec]

    1~3600

    出力コマンド実行後に output_state で指定したレベルを出力する時間。 0 を指定すると出力値を固定します。

    output_delay_time

    出力遅延時間[sec]

    0~3600

    出力コマンド実行後、指定した時間遅延して出力します。


    設定と DO の出力タイミングの関連を 図3.181「DO の出力タイミング」 に示します。

    images/do_timing.png

    図3.181 DO の出力タイミング


    (1) ゲートウェイコンテナはクラウドからの要求を取り込みます

    (2) クラウドからの要求を取り込んでから output_delay_time 経過後、出力を切り替えます

    (3) output_time 経過後出力を戻します

  • RS-485

    RS-485 に関する設定を行います。 設定ファイル中の以下の箇所が該当します。 なお、RS485_Data1 から RS485_Data4 まで、4個のデータについて設定することができます。 デフォルトでは RS485_Data1 のみファイルに記載されているため、RS485_Data2, RS485_Data3, RS485_Data4 については適宜コピーして記載してください。

    [RS485_Data1]
    ;[RS485_Data1] ~ [RS485_Data4]
    method=none
    baudrate=
    data_size=
    ; parity=none or odd or even
    parity=
    ; stop=1 or 2
    stop=
    device_id=
    func_code=
    register_addr=
    register_count=
    ; endian=little or big
    endian=
    ; interval[sec]
    interval=
    ; data_offset is option
    data_offset=
    ; data_multiply is option
    data_multiply=
    ; data_divider is option
    data_divider=

    表3.58 [RS485_Data1, RS485_Data2, RS485_Data3, RS485_Data4] 設定可能パラメータ

    項目概要 設定値 内容

    method

    通信種別

    none

    RS-485を利用しない

    rtu

    Modbus-RTU

    data_size

    データサイズ

    8

    baudrate

    ボーレート

    1200~38400[bps]

    通信速度を指定します

    parity

    パリティビット

    none

    None

    odd

    Odd

    even

    Even

    stop

    ストップビット

    1

    1

    2

    2

    device_id

    Modbusスレーブ機器のデバイスID

    0x01 〜 0xF7

    func_code

    ファンクションコード

    0x03 or 0x04

    register_addr

    レジスタアドレス

    機器依存

    値を読み出すレジスタのアドレスを指定

    register_count

    読み出しレジスタ数

    1 or 2

    一度に読み出すレジスタ数を指定

    endian

    エンディアン設定

    little

    リトルエンディアン

    big

    ビッグエンディアン

    interval

    データ取得間隔[sec]

    1~3600

    この値に従って、値を読み出します

    data_offset

    読み出し値に加算する値

    任意の値(整数値)

    指定は任意です。読み出したレジスタ値に加算する値を指定します

    data_multiply

    読み出し値と乗算する値

    任意の値(整数値)

    指定は任意です。読み出したレジスタ値と乗算する値を指定します

    data_divider

    読み出し値と除算する値

    任意の値(整数値)

    指定は任意です。読み出したレジスタ値と除算する値を指定します


3.14.4.4. 開発用の SWU イメージの作成

Armadillo 上でゲートウェイコンテナアプリケーションを実行するために、ゲートウェイコンテナアプリケーションのソースファイルと設定ファイル、SSH の公開鍵を含む SWU イメージを作成します。 SWU イメージを使用して Armadillo へインストールするため、事前に 「SWUイメージの作成」 を参照して SWU の初期設定を行ってください。

SWU イメージの作成も VS Code で行います。 VS Code の左ペインの [my_project] から [Generate development swu] を実行します。

images/common-images/gw_vscode_build_dev_swu_image.png

図3.182 VS Code で開発用の SWU の作成を行う


SWU イメージの作成にはしばらく時間がかかります。 VS Code のターミナルに以下のように表示されるとコンテナイメージの作成は完了です。

./swu/app.desc のバージョンを 0 から 1 に変更しました。
./development.swu を作成しました。
次は Armadillo に ./development.swu をインストールしてください。
 *  Terminal will be reused by tasks, press any key to close it.

図3.183 開発用の SWU の作成完了


作成した SWU イメージは my_project ディレクトリ下に development.swu という ファイル名で保存されています。

3.14.5. ゲートウェイコンテナのディストリビューション

ゲートウェイコンテナのディストリビューションは以下のとおりです。

ディストリビューション
  • alpine

3.14.6. Armadillo に転送するディレクトリ及びファイル

以下に示すディレクトリやファイルを Armadillo に転送します。 ここでは、プロジェクト名は my_project としています。

Armadillo に転送するディレクトリ及びファイル
  • my_project/app/config/sensing_mgr.conf
  • my_project/app/config/cloud_agent.conf
  • my_project/app/src

3.14.6.1. ゲートウェイコンテナアプリケーションが使用するデバイス証明書の取得

図3.184「Armadillo 上でゲートウェイコンテナアプリケーションを実行する」に示すように、VS Code の左ペインの [my_project] から [Get device certificate file from Armadillo] を実行すると、 ゲートウェイコンテナアプリケーションが使用するデバイス証明書を取得することができます。 取得したデバイス証明書は app/device/cert ディレクトリに保存されます。

images/common-images/gw_vscode_get_device_certification.png

図3.184 Armadillo 上でゲートウェイコンテナアプリケーションを実行する


[ティップ]

このタスクは、「Azure IoT Hub と Azure IoT Hub Device Provisioning Service の設定を行う」 のデバイス証明書を取得する箇所で使用します。

3.14.7. Armadillo 上でのセットアップ

3.14.7.1. ゲートウェイコンテナアプリケーションのインストール

「開発用の SWU イメージの作成」 で作成した development.swu「SWU イメージのインストール」 を参照して Armadillo へインストールしてください。

インストール後に自動で Armadillo が再起動します。

3.14.7.2. ssh 接続に使用する IP アドレスの設定

VS Code 上で ABOSDE(Armadillo Base OS Development Environment) から、 ABOS Web が動作している Armadillo の一覧を確認し、 指定した Armadillo の IP アドレスを ssh 接続に使用することができます。 ただし、ATDE のネットワークを NAT に設定している場合は Armadillo がリストに表示されません。

図3.185「ABOSDE で ローカルネットワーク上の Armadillo をスキャンする」 の赤枠で囲われているボタンをクリックすることで、 ローカルネットワーク上で ABOS Web が実行されている Armadillo をスキャンすることができます。

images/abos-images/abos-web/abosde_monitor_welcome_page.png

図3.185 ABOSDE で ローカルネットワーク上の Armadillo をスキャンする


図3.186「ABOSDE を使用して ssh 接続に使用する IP アドレスを設定する」 の赤枠で囲われているマークをクリックすることで、 指定した Armadillo の IP アドレスを ssh 接続に使用する IP アドレスに設定することができます。

images/abos-images/cui-app/abosde_monitor_set_ip.png

図3.186 ABOSDE を使用して ssh 接続に使用する IP アドレスを設定する


図3.187「ABOSDE に表示されている Armadillo を更新する」 の赤枠で囲われているマークをクリックすることで、 ABOSDE に表示されている Armadillo を更新することができます。

images/abos-images/abos-web/abosde_monitor_rescan.png

図3.187 ABOSDE に表示されている Armadillo を更新する


ATDE のネットワークを NAT に設定している場合や、ABOS Web を起動していない場合等、 ABOSDE のリストに Armadillo が表示されない場合は、 プロジェクトディレクトリに入っている config/ssh_config ファイルを編集して IP アドレスを書き換えてください。

[ATDE ~/my_project]$ code config/ssh_config
Host Armadillo
    Hostname x.x.x.x 1
    User root
    IdentityFile ${HOME}/.ssh/id_ed25519_vscode
    UserKnownHostsFile config/ssh_known_hosts
    StrictHostKeyChecking accept-new

図3.188 ssh_config を編集する


1

Armadillo の IP アドレスに置き換えてください。

[ティップ]

Armadillo を初期化した場合や、プロジェクトを実行する Armadillo を変更した場合は、 プロジェクトの config/ssh_known_hosts に保存されている公開鍵で Armadillo を認識できなくなります。 その場合はファイルを削除するか、「Setup environment」タスクを再実行してください。

3.14.7.3. ゲートウェイコンテナアプリケーションの実行

VS Code の左ペインの [my_project] から [App run on Armadillo] を実行すると、 ゲートウェイコンテナアプリケーションが Armadillo へ転送されて起動します。

images/common-images/gw_vscode_run_armadillo.png

図3.189 Armadillo 上でゲートウェイコンテナアプリケーションを実行する


VS Code のターミナルに以下のメッセージが表示されることがあります。 これが表示された場合は yes と入力して下さい。

Are you sure you want to continue connecting (yes/no/[fingerprint])?

図3.190 実行時に表示されるメッセージ


ゲートウェイコンテナアプリケーションを終了するには VS Code の左ペインの [my_project] から [App stop on Armadillo] を実行してください。

images/common-images/gw_vscode_stop_armadillo.png

図3.191 ゲートウェイコンテナアプリケーションを終了する


3.14.8. SBOM 生成に関する設定

SWU イメージ作成時に、同時に SBOM を生成することができます。 詳細は 「SBOM 生成に関わる設定を行う」 を参照してください。 ゲートウェイコンテナについての SBOM は Armadillo サイト - Armadillo-IoTゲートウェイ A6E ゲートウェイコンテナ https://armadillo.atmark-techno.com/resources/software/armadillo-iot-a6e/container をご確認ください。

3.14.9. リリース版のビルド

ここでは完成したゲートウェイコンテナアプリケーションをリリース版としてビルドする場合の手順について説明します。

VS Code の左ペインの [my_project] から [Generate release swu] を実行すると、 リリース版のゲートウェイコンテナアプリケーションを含んだ SWU イメージが作成されます。 事前に 「SWUイメージの作成」 を参照して SWU の初期設定を行ってください。

images/common-images/gw_vscode_build_rel_swu_image.png

図3.192 リリース版をビルドする


3.14.10. 製品への書き込み

作成した SWU イメージは my_project ディレクトリ下に release.swu というファイル名で保存されています。

この SWU イメージを 「SWU イメージのインストール」 を参照して Armadillo へインストールすると、 Armadillo 起動時にゲートウェイコンテナアプリケーションも自動起動します。

3.14.11. Armadillo 上のゲートウェイコンテナイメージの削除

Armadillo 上のゲートウェイコンテナイメージを削除する方法は、 「VS Code から実行する」 を参照してください。

ゲートウェイコンテナイメージを再インストールする場合は Armadillo サイト - Armadillo-IoTゲートウェイ A6E ゲートウェイコンテナ https://armadillo.atmark-techno.com/resources/software/armadillo-iot-a6e/container からゲートウェイコンテナイメージの SWU イメージファイルをダウンロードした後、「SWU イメージのインストール」 を参照してください。

3.14.12. クラウドを含めた動作確認

クラウドを含めた動作確認方法は「ゲートウェイコンテナを動かす」を参照ください。

3.15. CUI アプリケーションの開発

ここではシェルスクリプトおよび Python を使った CUI アプリケーションの開発方法を紹介します。 開発手順としてはシェルスクリプトと Python で同じであるため、シェルスクリプトの場合の例で説明します。

3.15.1. CUI アプリケーション開発の流れ

Armadillo 向けに CUI アプリケーションを開発する場合の流れは以下のようになります。

images/abos-images/cui-app/flutter_dev_cycle.svg

図3.193 CUI アプリケーション開発の流れ


3.15.2. ATDE 上でのセットアップ

ここでは、開発開始時の ATDE 上でのセットアップ手順について説明します。 ATDE をお使いでない場合は、先に 「開発の準備」 を参照して ATDE 及び、 VS Code のセットアップを完了してください。

3.15.2.1. プロジェクトの作成

VS Code の左ペインの [A6E] から [Shell New Project] を実行し、表示されるディレクトリ選択画面からプロジェクトを保存する ディレクトリを選択してください。 実行するためには右に表示されている三角形ボタンを押してください。 Python の場合は [Python New Project] を実行してください。 保存先を選択すると、プロジェクト名を入力するダイアログが表示されるので、任意のプロジェクト名を入力してエンターキーを押してください。 この操作により、選択した保存先に、入力したプロジェクト名と同名のディレクトリが作成されます。

また、ここでは次のように設定しています。

  • 保存先 : ホームディレクトリ
  • プロジェクト名 : my_project
images/common-images/cui_vscode_new_project.png

図3.194 プロジェクトを作成する


images/abos-images/cui-app/flutter_vscode_project_name.png

図3.195 プロジェクト名を入力する


3.15.3. アプリケーション開発

3.15.3.1. VS Code の起動

ここでは、実際に Armadillo 上でサンプルアプリケーションを起動する場合の手順を説明します。 プロジェクトディレクトリへ移動し VS Code を起動します。

[ATDE ~]$ code ./my_project

図3.196 VS Code で my_project を起動する


3.15.3.2. ディレクトリ構成

プロジェクトには下記のディレクトリがあります。

  • app : アプリケーションのソースです。Armadillo ではビルドしたアプリケーションが /var/app/rollback/volumes/my_project にコピーされます。

    • requirements.txt : Python プロジェクトにのみ存在しており、このファイルに記載したパッケージは pip を使用してインストールされます。
  • config : 設定に関わるファイルが含まれるディレクトリです。

  • container : スクリプトを実行するコンテナの設定ファイルが含まれるディレクトリです。

    • packages.txt : このファイルに記載されているパッケージがインストールされます。
    • Dockerfile : 直接編集することも可能です。

デフォルトのコンテナコンフィグ( app.conf )ではシェルスクリプトの場合は appsrc/main.sh または Python の場合 src/main.py を実行しますので、リネームが必要な場合にコンテナのコンフィグも修正してください。

このサンプルアプリケーションは、CPU と SOC の温度を /vol_data/log/temp.txt に出力し、 アプリケーションLED を点滅させます。

3.15.3.3. 初期設定

初期設定では主に Armadillo と SSH で接続するための秘密鍵と公開鍵の生成を行います。

作成したプロジェクトディレクトリへ移動して VS Code を起動してください。

[ATDE ~]$ cd my_project
[ATDE ~/my_project]$ code ./

図3.197 初期設定を行う


VS Code の左ペインの [my_project] から [Setup environment] を実行します。

images/abos-images/cui-app/cui_vscode_setup_environment.png

図3.198 VS Code で初期設定を行う


選択すると、 VS Code の下部に以下のようなターミナルが表示されます。

images/abos-images/cui-app/flutter_vscode_terminal.png

図3.199 VS Code のターミナル


このターミナル上で以下のように入力してください。

 *  Executing task: ./scripts/setup_env.sh

Generating public/private ed25519 key pair.
Enter passphrase (empty for no passphrase): 1
Enter same passphrase again: 2
Your identification has been saved in /home/atmark/.ssh/id_ed25519_vscode
:(省略)

 *  Terminal will be reused by tasks, press any key to close it.  3

図3.200 SSH 用の鍵を生成する


1

パスフレーズを設定します。設定しない場合は何も入力せず Enter を押します。

2

1 でパスフレーズを設定した場合は、確認のため再度入力してください。

3

ここで何か任意のキーを押すとターミナルが閉じます。

パスフレーズを設定した場合は、アプリケーションを Armadillo へ転送する時にパス フレーズの入力を求められることがあります。

[ティップ]

ssh の鍵は $HOME/.ssh/id_ed25519_vscode (と id_ed25519_vscode.pub ) に保存されていますので、 プロジェクトをバックアップする時は $HOME/.ssh も保存してください。

3.15.3.4. アプリケーション実行用コンテナイメージの作成

Armadillo 上でアプリケーションを実行するためのコンテナイメージを作成します。 ここで作成したコンテナイメージは SWU イメージを使用して Armadillo へインストールするため、 事前に 「SWUイメージの作成」 を参照して SWU の初期設定を行ってください。

コンテナイメージの作成および SWU イメージの作成も VS Code で行います。 VS Code の左ペインの [my_project] から [Generate development swu] を実行します。

images/abos-images/cui-app/cui_vscode_build_dev_image.png

図3.201 VS Code でコンテナイメージの作成を行う


コンテナイメージの作成にはしばらく時間がかかります。 VS Code のターミナルに以下のように表示されるとコンテナイメージの作成は完了です。

コンテナイメージを ./swu/my_project.tar に保存しました。
./swu/app.desc のバージョンを 1 から 2 に変更しました。
./development.swu を作成しました。
次は Armadillo に ./development.swu をインストールしてください。
 *  Terminal will be reused by tasks, press any key to close it.

図3.202 コンテナイメージの作成完了


作成した SWU イメージは my_project ディレクトリ下に development.swu という ファイル名で保存されています。

3.15.3.5. Python アプリケーションに BLE パッケージをインストールする

Python アプリケーションの場合は、アプリケーションから BLE を使用するために必要なパッケージを VS Code からインストールすることができます。

左ペインの [my_project] から [external packages] を開き [bleak] の右にある + をクリックするとインストールされます。

images/abos-images/cui-app/cui_vscode_install_ble.png

図3.203 BLE パッケージをインストールする


すでにインストール済みの状態で - をクリックするとアインストールされます。 一番右にある丸アイコンをクリックすると Web ブラウザで bleak パッケージの API リファレンスページを開きます。

[注記]

BLE パッケージのインストールは ABOSDE のバージョン 1.8.4 以降で、かつ 2024 年 7 月 24 日以降に 「プロジェクトの作成」 の手順で新たに作成したプロジェクトで使用できるようになります。

3.15.4. コンテナのディストリビューション

使用するコンテナのディストリビューションは以下のとおりです。

ディストリビューション
  • debian:bullseye-slim

3.15.5. Armadillo に転送するディレクトリ及びファイル

コンテナイメージ以外に、以下に示すディレクトリやファイルを Armadillo に転送します。 ここでは、プロジェクト名は my_project としています。

Armadillo に転送するディレクトリ及びファイル
  • my_project/app/src

3.15.6. コンテナ内のファイル一覧表示

図3.204「コンテナ内のファイル一覧を表示するタブ」 の赤枠で囲われているタブをクリックすることで、development.swu または「リリース版のビルド」で作成される release.swu に含まれるコンテナ内のファイルおよびディレクトリを表示します。

images/abos-images/cui-app/cui_vscode_file_list_container.png

図3.204 コンテナ内のファイル一覧を表示するタブ


クリック後の表示例を 図3.205「コンテナ内のファイル一覧の例」 に示します。

images/abos-images/cui-app/cui_vscode_file_list_show.png

図3.205 コンテナ内のファイル一覧の例


コンテナ内のファイル一覧は [Generate development swu] または [Generate release swu] を実行することで ATDE 上に作成されるコンテナイメージから取得しています。

そのため、[Generate development swu] または [Generate release swu] を実行していない場合はコンテナ内のファイル一覧は表示されません。 その場合は [Generate development swu] または [Generate release swu] を先に実行してください。

[注記]

この機能を使用するにあたり、ATDE上でプロジェクトのコンテナイメージからコンテナを作成します。

コンテナ名は「プロジェクト名-abosde」を使用します。 例えば、プロジェクト名が my_project の場合、コンテナ名は「my_project-abosde」になります。

ユーザー自身で同名のコンテナを既に作成していた場合、そのコンテナはこの機能を使用時に削除されます。

[注記]

コンテナ内のファイル一覧には、ファイルおよびディレクトリのみを表示しています。 シンボリックリンク、特殊デバイスファイルなどは表示していません。

3.15.6.1. resources ディレクトリについて

図3.206「resources ディレクトリ」に示すように ATDE 上のプロジェクトディレクトリには container/resources ディレクトリがあります。

images/abos-images/cui-app/cui_vscode_file_list_resources.png

図3.206 resources ディレクトリ


container/resources ディレクトリ下に、コンテナ内と同じパスでファイルまたはディレクトリを配置することで、それらは [Generate development swu] または [Generate release swu] を実行時にコンテナ内にコピーされます。

例えば、コンテナ内にある /etc/adduser.conf を上書きする場合は、編集した adduser.conf ファイルをプロジェクトディレクトリにある container/resources/etc/adduser.conf に配置してください。

プロジェクトディレクトリにある container/resources 下のファイルおよびディレクトリを操作する方法は以下の 2 通りがあります。

  • エクスプローラーを使用する
  • ABOSDEのコンテナ内のファイル一覧表示機能を使用する

ABOSDEのコンテナ内のファイル一覧表示機能を使用することで、視覚的にファイル構成や、差分があるファイルを把握しながら操作可能です。 以降に詳細を説明します。

3.15.6.2. コンテナ内のファイル一覧の再表示

図3.204「コンテナ内のファイル一覧を表示するタブ」 の赤枠で囲われているボタンをクリックすることで、コンテナ内のファイル一覧を再表示します。

images/abos-images/cui-app/cui_vscode_file_list_refresh.png

図3.207 コンテナ内のファイル一覧を再表示するボタン


3.15.6.3. container/resources 下にファイルおよびフォルダーを作成

図3.208「container/resources 下にファイルを追加するボタン」 の赤枠で囲われている表記のボタンをクリックすることで、プロジェクトディレクトリにある container/resources 下にファイルを追加することが可能です。

images/abos-images/cui-app/cui_vscode_file_list_add_file.png

図3.208 container/resources 下にファイルを追加するボタン


図3.209「ファイル名を入力」 に示すように、コマンドパレットが表示されますのでファイル名を入力してください。

images/abos-images/cui-app/cui_vscode_file_list_input_name.png

図3.209 ファイル名を入力


例として、「add_file」というファイル名を入力したとします。

図3.210「追加されたファイルの表示」 に示すように、追加したファイルには「A」というマークが表示されます。

images/abos-images/cui-app/cui_vscode_file_list_add_file_example.png

図3.210 追加されたファイルの表示


また、図3.211「container/resources 下にフォルダーを追加するボタン」 の赤枠で囲われている表記のボタンをクリックすることで、ファイルの追加と同様の操作でディレクトリを追加することが可能です。

追加したディレクトリも同様に "A" というマークが表示されます。

images/abos-images/cui-app/cui_vscode_file_list_add_folder.png

図3.211 container/resources 下にフォルダーを追加するボタン


3.15.6.4. container/resources 下にあるファイルを開く

図3.212「container/resources 下にあるファイルを開くボタン」 の赤枠で囲われている表記のボタンをクリックすることで、プロジェクトディレクトリにある container/resources 下のファイルをエディタに表示することができます。

この例では、プロジェクトディレクトリにある container/resources 下の add_file をエディタに表示します。

images/abos-images/cui-app/cui_vscode_file_list_open.png

図3.212 container/resources 下にあるファイルを開くボタン


3.15.6.5. container/resources 下にあるファイルおよびフォルダーの削除

図3.212「container/resources 下にあるファイルを開くボタン」 の赤枠で囲われている表記のボタンをクリックすることで、container/resources 下にあるファイルを削除することができます。

この例では、プロジェクトディレクトリにある container/resources 下の add_file を削除します。

images/abos-images/cui-app/cui_vscode_file_list_delete.png

図3.213 container/resources 下にあるファイルを削除するボタン


ディレクトリも同様に図3.212「container/resources 下にあるファイルを開くボタン」 の赤枠で囲われている表記のボタンをクリックすることで削除することができます。

3.15.6.6. コンテナ内のファイルを container/resources 下に保存

図3.214「コンテナ内のファイルを container/resources 下に保存するボタン」 の赤枠で囲われている表記のボタンをクリックすることで、コンテナ内にあるファイルをプロジェクトディレクトリにある container/resources 下に保存します。

images/abos-images/cui-app/cui_vscode_file_list_save.png

図3.214 コンテナ内のファイルを container/resources 下に保存するボタン


ファイルが container/resources 下に保存されると、図3.215「編集前のファイルを示すマーク」 に示すように、ファイル名の右側に "U" のマークが表示されます。

"U" のマークはプロジェクトディレクトリにある container/resources 下のファイルとコンテナ内にあるファイルの内容が同一であることを示します。

images/abos-images/cui-app/cui_vscode_file_list_unmodified_file.png

図3.215 編集前のファイルを示すマーク


container/resources 下にあるファイルを編集して再表示すると、図3.216「編集後のファイルを示すマーク」 に示すように、ファイル名の右側に "M" のマークが表示されます。

"M" のマークはプロジェクトディレクトリにある container/resources 下のファイルとコンテナ内にあるファイルの内容に差があることを示します。

images/abos-images/cui-app/cui_vscode_file_list_modified_file.png

図3.216 編集後のファイルを示すマーク


3.15.6.7. エラー表示

container/resources 下とコンテナ内にあるファイルまたはディレクトリを比較して、同名でかつファイルの種類が異なる場合、図3.217「コンテナ内にコピーされないことを示すマーク」 に示すように、ファイル名の右側に "E" のマークが表示されます。

"E" のマークが表示された場合、そのファイルまたはディレクトリは [Generate development swu] または [Generate release swu] を実行してもコンテナにコピーされません。

images/abos-images/cui-app/cui_vscode_file_list_error.png

図3.217 コンテナ内にコピーされないことを示すマーク


3.15.7. Armadillo 上でのセットアップ

3.15.7.1. アプリケーション実行用コンテナイメージのインストール

「アプリケーション実行用コンテナイメージの作成」 で作成した development.swu「SWU イメージのインストール」 を参照して Armadillo へインストールしてください。

インストール後に自動で Armadillo が再起動します。

3.15.7.2. ssh 接続に使用する IP アドレスの設定

VS Code 上で ABOSDE(Armadillo Base OS Development Environment) から、 ABOS Web が動作している Armadillo の一覧を確認し、 指定した Armadillo の IP アドレスを ssh 接続に使用することができます。 ただし、ATDE のネットワークを NAT に設定している場合は Armadillo がリストに表示されません。

図3.218「ABOSDE で ローカルネットワーク上の Armadillo をスキャンする」 の赤枠で囲われているボタンをクリックすることで、 ローカルネットワーク上で ABOS Web が実行されている Armadillo をスキャンすることができます。

images/abos-images/abos-web/abosde_monitor_welcome_page.png

図3.218 ABOSDE で ローカルネットワーク上の Armadillo をスキャンする


図3.219「ABOSDE を使用して ssh 接続に使用する IP アドレスを設定する」 の赤枠で囲われているマークをクリックすることで、 指定した Armadillo の IP アドレスを ssh 接続に使用する IP アドレスに設定することができます。

images/abos-images/cui-app/abosde_monitor_set_ip.png

図3.219 ABOSDE を使用して ssh 接続に使用する IP アドレスを設定する


図3.220「ABOSDE に表示されている Armadillo を更新する」 の赤枠で囲われているマークをクリックすることで、 ABOSDE に表示されている Armadillo を更新することができます。

images/abos-images/abos-web/abosde_monitor_rescan.png

図3.220 ABOSDE に表示されている Armadillo を更新する


ATDE のネットワークを NAT に設定している場合や、ABOS Web を起動していない場合等、 ABOSDE のリストに Armadillo が表示されない場合は、 プロジェクトディレクトリに入っている config/ssh_config ファイルを編集して IP アドレスを書き換えてください。

[ATDE ~/my_project]$ code config/ssh_config
Host Armadillo
    Hostname x.x.x.x 1
    User root
    IdentityFile ${HOME}/.ssh/id_ed25519_vscode
    UserKnownHostsFile config/ssh_known_hosts
    StrictHostKeyChecking accept-new

図3.221 ssh_config を編集する


1

Armadillo の IP アドレスに置き換えてください。

[ティップ]

Armadillo を初期化した場合や、プロジェクトを実行する Armadillo を変えた場合は, プロジェクトの config/ssh_known_hosts に保存されている公開鍵で Armadillo を認識できなくなります。 その場合はファイルを削除するか、「Setup environment」タスクを再実行してください。

3.15.7.3. アプリケーションの実行

VS Code の左ペインの [my_project] から [App run on Armadillo] を実行すると、 アプリケーションが Armadillo へ転送されて起動します。

images/abos-images/cui-app/cui_vscode_run_armadillo.png

図3.222 Armadillo 上でアプリケーションを実行する


VS Code のターミナルに以下のメッセージが表示されることがあります。 これが表示された場合は yes と入力して下さい。

Are you sure you want to continue connecting (yes/no/[fingerprint])?

図3.223 実行時に表示されるメッセージ


アプリケーションを終了するには VS Code の左ペインの [my_project] から [App stop on Armadillo] を実行してください。

images/abos-images/cui-app/cui_vscode_stop_armadillo.png

図3.224 アプリケーションを終了する


3.15.8. SBOM 生成に関する設定

SWU イメージ作成時に、同時に SBOM を生成することができます。 詳細は 「SBOM 生成に関わる設定を行う」 を参照してください。

3.15.9. リリース版のビルド

ここでは完成したアプリケーションをリリース版としてビルドする場合の手順について説明します。

VS Code の左ペインの [my_project] から [Generate release swu] を実行すると、 リリース版のアプリケーションを含んだ SWU イメージが作成されます。 事前に 「SWUイメージの作成」 を参照して SWU の初期設定を行ってください。

images/abos-images/cui-app/cui_vscode_make_swu_image.png

図3.225 リリース版をビルドする


[注記]

リリース版の SWU イメージには、開発用の機能は含まれていません。 このため、リリース版の SWU イメージをインストールした Armadillo では、 [App run on Armadillo] を使用したリモート実行は使用できません。

3.15.10. 製品への書き込み

作成した SWU イメージは my_project ディレクトリ下に release.swu というファイル名で保存されています。

この SWU イメージを 「SWU イメージのインストール」 を参照して Armadillo へインストールすると、 Armadillo 起動時にアプリケーションも自動起動します。

3.15.11. Armadillo 上のコンテナイメージの削除

「コンテナとコンテナに関連するデータを削除する」 を参照してください。

3.16. C 言語によるアプリケーションの開発

ここでは C 言語によるアプリケーション開発の方法を紹介します。

C 言語によるアプリケーション開発は下記に当てはまるユーザーを対象としています。

  • 既存の C 言語によって開発されたアプリケーションを Armadillo で動作させたい
  • C 言語でないと実現できないアプリケーションを開発したい

上記に当てはまらず、開発するアプリケーションがシェルスクリプトまたは Python で実現可能であるならば、「CUI アプリケーションの開発」を参照してください。

3.16.1. C 言語によるアプリケーション開発の流れ

Armadillo 向けに C 言語によるアプリケーションを開発する場合の流れは以下のようになります。

images/abos-images/cui-app/flutter_dev_cycle.svg

図3.226 C 言語によるアプリケーション開発の流れ


3.16.2. ATDE 上でのセットアップ

ここでは、開発開始時の ATDE 上でのセットアップ手順について説明します。 ATDE をお使いでない場合は、先に 「開発の準備」 を参照して ATDE 及び、 VS Code のセットアップを完了してください。

3.16.2.1. プロジェクトの作成

VS Code の左ペインの [A6E] から [C New Project] を実行し、表示されるディレクトリ選択画面からプロジェクトを保存する ディレクトリを選択してください。 実行するためには右に表示されている三角形ボタンを押してください。 保存先を選択すると、プロジェクト名を入力するダイアログが表示されるので、任意のプロジェクト名を入力してエンターキーを押してください。 この操作により、選択した保存先に、入力したプロジェクト名と同名のディレクトリが作成されます。

また、ここでは次のように設定しています。

  • 保存先 : ホームディレクトリ
  • プロジェクト名 : my_project
images/common-images/c_app_vscode_new_project.png

図3.227 プロジェクトを作成する


images/abos-images/cui-app/flutter_vscode_project_name.png

図3.228 プロジェクト名を入力する


3.16.3. アプリケーション開発

3.16.3.1. VS Code の起動

ここでは、実際に Armadillo 上でサンプルアプリケーションを起動する場合の手順を説明します。 プロジェクトディレクトリへ移動し VS Code を起動します。

[ATDE ~]$ code ./my_project

図3.229 VS Code で my_project を起動する


3.16.3.2. ディレクトリ構成

プロジェクトには下記のディレクトリがあります。

  • app : 各ディレクトリの説明は以下の通りです。

    • src : アプリケーションのソースファイル(拡張子が .c )と Makefile を配置してください。
    • build : ここに配置した実行ファイルが Armadillo 上で実行されます。
    • lib : 共有ライブラリの検索パスとしてこのディレクトリを指定しているので、ここに共有ライブラリ(拡張子が .so )を配置することができます。
  • config : 設定に関わるファイルが含まれるディレクトリです。

  • container : スクリプトを実行するコンテナの設定ファイルが含まれるディレクトリです。

    • packages.txt: このファイルに記載されているパッケージがインストールされます。
    • Dockerfile: 直接編集することも可能です。

デフォルトのコンテナコンフィグ( app.conf )では C 言語の場合は build/main を実行しますので、リネームが必要な場合にコンテナのコンフィグも修正してください。

このサンプルアプリケーションは、CPU と SOC の温度を /vol_data/log/temp.txt に出力し、 アプリケーションLED を点滅させます。

3.16.3.3. 初期設定

初期設定では主に Armadillo と SSH で接続するための秘密鍵と公開鍵の生成を行います。

作成したプロジェクトディレクトリへ移動して VS Code を起動してください。

[ATDE ~]$ cd my_project
[ATDE ~/my_project]$ code ./

図3.230 初期設定を行う


VS Code の左ペインの [my_project] から [Setup environment] を実行します。

images/abos-images/cui-app/cui_vscode_setup_environment.png

図3.231 VS Code で初期設定を行う


選択すると、 VS Code の下部に以下のようなターミナルが表示されます。

images/abos-images/cui-app/flutter_vscode_terminal.png

図3.232 VS Code のターミナル


このターミナル上で以下のように入力してください。

 *  Executing task: ./scripts/setup_env.sh

Generating public/private ed25519 key pair.
Enter passphrase (empty for no passphrase): 1
Enter same passphrase again: 2
Your identification has been saved in /home/atmark/.ssh/id_ed25519_vscode
:(省略)

 *  Terminal will be reused by tasks, press any key to close it.  3

図3.233 SSH 用の鍵を生成する


1

パスフレーズを設定します。設定しない場合は何も入力せず Enter を押します。

2

1 でパスフレーズを設定した場合は、確認のため再度入力してください。

3

ここで何か任意のキーを押すとターミナルが閉じます。

パスフレーズを設定した場合は、アプリケーションを Armadillo へ転送する時にパス フレーズの入力を求められることがあります。

[ティップ]

ssh の鍵は $HOME/.ssh/id_ed25519_vscode (と id_ed25519_vscode.pub ) に保存されていますので、 プロジェクトをバックアップする時は $HOME/.ssh も保存してください。

3.16.3.4. packages.txt の書き方

ABOSDEではコンテナイメージにパッケージをインストールするために container ディレクトリにある packages.txt を使用します。 packages.txt に記載されているパッケージは "apt install" コマンドによってコンテナイメージにインストールされます。

C 言語による開発の場合、packages.txt に [build] というラベルを記載することで、ビルド時のみに使用するパッケージを指定することが出来ます。

図3.234「C 言語による開発における packages.txt の書き方」に C 言語による開発の場合における packages.txt の書き方の例を示します。 ここでは、パッケージ名を package_A 、package_B 、package_C としています。

package_A
package_B

[build]   1
package_C

図3.234 C 言語による開発における packages.txt の書き方


1

このラベル以降のパッケージはビルド時のみに使用されます。

上記の例の場合、Armadillo 上で実行される環境では package_A 、package_B のみがインストールされ、package_C はインストールされません。

"[build] package_C" のように [build] の後に改行せずに、一行でパッケージ名を書くことは出来ませんのでご注意ください。

3.16.3.5. ABOSDEでの開発における制約

Makefile は app/src 直下に配置してください。 app/src 直下の Makefile を用いて make コマンドが実行されます。 ABOSDE では make コマンドのみに対応しています。

app/buildapp/lib 内のファイルが Armadillo に転送されますので、実行ファイルは app/build 、共有ライブラリ( 拡張子が .so ファイル )は app/lib に配置してください。

3.16.3.6. アプリケーション実行用コンテナイメージの作成

Armadillo 上でアプリケーションを実行するためのコンテナイメージを作成します。 ここで作成したコンテナイメージは SWU イメージを使用して Armadillo へインストールするため、 事前に 「SWUイメージの作成」 を参照して SWU の初期設定を行ってください。

コンテナイメージの作成、 実行ファイルや共有ライブラリの作成およびSWU イメージの作成も VS Code で行います。 VS Code の左ペインの [my_project] から [Generate development swu] を実行します。

images/abos-images/cui-app/cui_vscode_build_dev_image.png

図3.235 VS Code でコンテナイメージの作成を行う


コンテナイメージの作成にはしばらく時間がかかります。 VS Code のターミナルに以下のように表示されるとコンテナイメージの作成は完了です。

コンテナイメージを ./swu/my_project.tar に保存しました。
./swu/app.desc のバージョンを 1 から 2 に変更しました。
./development.swu を作成しました。
次は Armadillo に ./development.swu をインストールしてください。
 *  Terminal will be reused by tasks, press any key to close it.

図3.236 コンテナイメージの作成完了


作成した SWU イメージは my_project ディレクトリ下に development.swu という ファイル名で保存されています。

3.16.4. コンテナのディストリビューション

使用するコンテナのディストリビューションは以下のとおりです。

ディストリビューション
  • debian:bullseye-slim

3.16.5. コンテナ内のファイル一覧表示

図3.237「コンテナ内のファイル一覧を表示するタブ」 の赤枠で囲われているタブをクリックすることで、development.swu または「リリース版のビルド」で作成される release.swu に含まれるコンテナ内のファイルおよびディレクトリを表示します。

images/abos-images/cui-app/cui_vscode_file_list_container.png

図3.237 コンテナ内のファイル一覧を表示するタブ


クリック後の表示例を 図3.238「コンテナ内のファイル一覧の例」 に示します。

images/abos-images/cui-app/cui_vscode_file_list_show.png

図3.238 コンテナ内のファイル一覧の例


コンテナ内のファイル一覧は [Generate development swu] または [Generate release swu] を実行することで ATDE 上に作成されるコンテナイメージから取得しています。

そのため、[Generate development swu] または [Generate release swu] を実行していない場合はコンテナ内のファイル一覧は表示されません。 その場合は [Generate development swu] または [Generate release swu] を先に実行してください。

[注記]

この機能を使用するにあたり、ATDE上でプロジェクトのコンテナイメージからコンテナを作成します。

コンテナ名は「プロジェクト名-abosde」を使用します。 例えば、プロジェクト名が my_project の場合、コンテナ名は「my_project-abosde」になります。

ユーザー自身で同名のコンテナを既に作成していた場合、そのコンテナはこの機能を使用時に削除されます。

[注記]

コンテナ内のファイル一覧には、ファイルおよびディレクトリのみを表示しています。 シンボリックリンク、特殊デバイスファイルなどは表示していません。

3.16.5.1. resources ディレクトリについて

図3.239「resources ディレクトリ」に示すように ATDE 上のプロジェクトディレクトリには container/resources ディレクトリがあります。

images/abos-images/cui-app/cui_vscode_file_list_resources.png

図3.239 resources ディレクトリ


container/resources ディレクトリ下に、コンテナ内と同じパスでファイルまたはディレクトリを配置することで、それらは [Generate development swu] または [Generate release swu] を実行時にコンテナ内にコピーされます。

例えば、コンテナ内にある /etc/adduser.conf を上書きする場合は、編集した adduser.conf ファイルをプロジェクトディレクトリにある container/resources/etc/adduser.conf に配置してください。

プロジェクトディレクトリにある container/resources 下のファイルおよびディレクトリを操作する方法は以下の 2 通りがあります。

  • エクスプローラーを使用する
  • ABOSDEのコンテナ内のファイル一覧表示機能を使用する

ABOSDEのコンテナ内のファイル一覧表示機能を使用することで、視覚的にファイル構成や、差分があるファイルを把握しながら操作可能です。 以降に詳細を説明します。

3.16.5.2. コンテナ内のファイル一覧の再表示

図3.237「コンテナ内のファイル一覧を表示するタブ」 の赤枠で囲われているボタンをクリックすることで、コンテナ内のファイル一覧を再表示します。

images/abos-images/cui-app/cui_vscode_file_list_refresh.png

図3.240 コンテナ内のファイル一覧を再表示するボタン


3.16.5.3. container/resources 下にファイルおよびフォルダーを作成

図3.241「container/resources 下にファイルを追加するボタン」 の赤枠で囲われている表記のボタンをクリックすることで、プロジェクトディレクトリにある container/resources 下にファイルを追加することが可能です。

images/abos-images/cui-app/cui_vscode_file_list_add_file.png

図3.241 container/resources 下にファイルを追加するボタン


図3.242「ファイル名を入力」 に示すように、コマンドパレットが表示されますのでファイル名を入力してください。

images/abos-images/cui-app/cui_vscode_file_list_input_name.png

図3.242 ファイル名を入力


例として、「add_file」というファイル名を入力したとします。 図3.243「追加されたファイルの表示」 に示すように、追加したファイルには「A」というマークが表示されます。

images/abos-images/cui-app/cui_vscode_file_list_add_file_example.png

図3.243 追加されたファイルの表示


また、図3.244「container/resources 下にフォルダーを追加するボタン」 の赤枠で囲われている表記のボタンをクリックすることで、ファイルの追加と同様の操作でディレクトリを追加することが可能です。

追加したディレクトリも同様に "A" というマークが表示されます。

images/abos-images/cui-app/cui_vscode_file_list_add_folder.png

図3.244 container/resources 下にフォルダーを追加するボタン


3.16.5.4. container/resources 下にあるファイルを開く

図3.245「container/resources 下にあるファイルを開くボタン」 の赤枠で囲われている表記のボタンをクリックすることで、プロジェクトディレクトリにある container/resources 下のファイルをエディタに表示することができます。

この例では、プロジェクトディレクトリにある container/resources 下の add_file をエディタに表示します。

images/abos-images/cui-app/cui_vscode_file_list_open.png

図3.245 container/resources 下にあるファイルを開くボタン


3.16.5.5. container/resources 下にあるファイルおよびフォルダーの削除

図3.245「container/resources 下にあるファイルを開くボタン」 の赤枠で囲われている表記のボタンをクリックすることで、container/resources 下にあるファイルを削除することができます。

この例では、プロジェクトディレクトリにある container/resources 下の add_file を削除します。

images/abos-images/cui-app/cui_vscode_file_list_delete.png

図3.246 container/resources 下にあるファイルを削除するボタン


ディレクトリも同様に図3.245「container/resources 下にあるファイルを開くボタン」 の赤枠で囲われている表記のボタンをクリックすることで削除することができます。

3.16.5.6. コンテナ内のファイルを container/resources 下に保存

図3.247「コンテナ内のファイルを container/resources 下に保存するボタン」 の赤枠で囲われている表記のボタンをクリックすることで、コンテナ内にあるファイルをプロジェクトディレクトリにある container/resources 下に保存します。

images/abos-images/cui-app/cui_vscode_file_list_save.png

図3.247 コンテナ内のファイルを container/resources 下に保存するボタン


ファイルが container/resources 下に保存されると、図3.248「編集前のファイルを示すマーク」 に示すように、ファイル名の右側に "U" のマークが表示されます。

"U" のマークはプロジェクトディレクトリにある container/resources 下のファイルとコンテナ内にあるファイルの内容が同一であることを示します。

images/abos-images/cui-app/cui_vscode_file_list_unmodified_file.png

図3.248 編集前のファイルを示すマーク


container/resources 下にあるファイルを編集して再表示すると、図3.249「編集後のファイルを示すマーク」 に示すように、ファイル名の右側に "M" のマークが表示されます。

"M" のマークはプロジェクトディレクトリにある container/resources 下のファイルとコンテナ内にあるファイルの内容に差があることを示します。

images/abos-images/cui-app/cui_vscode_file_list_modified_file.png

図3.249 編集後のファイルを示すマーク


3.16.5.7. エラー表示

container/resources 下とコンテナ内にあるファイルまたはディレクトリを比較して、同名でかつファイルの種類が異なる場合、図3.250「コンテナ内にコピーされないことを示すマーク」 に示すように、ファイル名の右側に "E" のマークが表示されます。

"E" のマークが表示された場合、そのファイルまたはディレクトリは [Generate development swu] または [Generate release swu] を実行してもコンテナにコピーされません。

images/abos-images/cui-app/cui_vscode_file_list_error.png

図3.250 コンテナ内にコピーされないことを示すマーク


3.16.6. Armadillo に転送するディレクトリ及びファイル

コンテナイメージ以外に、以下に示すディレクトリやファイルを Armadillo に転送します。 ここでは、プロジェクト名は my_project としています。

Armadillo に転送するディレクトリ及びファイル
  • my_project/app/build
  • my_project/app/lib

3.16.7. Armadillo 上でのセットアップ

3.16.7.1. アプリケーション実行用コンテナイメージのインストール

「アプリケーション実行用コンテナイメージの作成」 で作成した development.swu「SWU イメージのインストール」 を参照して Armadillo へインストールしてください。

インストール後に自動で Armadillo が再起動します。

3.16.7.2. ssh 接続に使用する IP アドレスの設定

VS Code 上で ABOSDE(Armadillo Base OS Development Environment) から、 ABOS Web が動作している Armadillo の一覧を確認し、 指定した Armadillo の IP アドレスを ssh 接続に使用することができます。 ただし、ATDE のネットワークを NAT に設定している場合は Armadillo がリストに表示されません。

図3.251「ABOSDE で ローカルネットワーク上の Armadillo をスキャンする」 の赤枠で囲われているボタンをクリックすることで、 ローカルネットワーク上で ABOS Web が実行されている Armadillo をスキャンすることができます。

images/abos-images/abos-web/abosde_monitor_welcome_page.png

図3.251 ABOSDE で ローカルネットワーク上の Armadillo をスキャンする


図3.252「ABOSDE を使用して ssh 接続に使用する IP アドレスを設定する」 の赤枠で囲われているマークをクリックすることで、 指定した Armadillo の IP アドレスを ssh 接続に使用する IP アドレスに設定することができます。

images/abos-images/cui-app/abosde_monitor_set_ip.png

図3.252 ABOSDE を使用して ssh 接続に使用する IP アドレスを設定する


図3.253「ABOSDE に表示されている Armadillo を更新する」 の赤枠で囲われているマークをクリックすることで、 ABOSDE に表示されている Armadillo を更新することができます。

images/abos-images/abos-web/abosde_monitor_rescan.png

図3.253 ABOSDE に表示されている Armadillo を更新する


ATDE のネットワークを NAT に設定している場合や、ABOS Web を起動していない場合等、 ABOSDE のリストに Armadillo が表示されない場合は、 プロジェクトディレクトリに入っている config/ssh_config ファイルを編集して IP アドレスを書き換えてください。

[ATDE ~/my_project]$ code config/ssh_config
Host Armadillo
    Hostname x.x.x.x 1
    User root
    IdentityFile ${HOME}/.ssh/id_ed25519_vscode
    UserKnownHostsFile config/ssh_known_hosts
    StrictHostKeyChecking accept-new

図3.254 ssh_config を編集する


1

Armadillo の IP アドレスに置き換えてください。

[ティップ]

Armadillo を初期化した場合や、プロジェクトを実行する Armadillo を変えた場合は, プロジェクトの config/ssh_known_hosts に保存されている公開鍵で Armadillo を認識できなくなります。 その場合はファイルを削除するか、「Setup environment」タスクを再実行してください。

3.16.7.3. アプリケーションの実行

VS Code の左ペインの [my_project] から [App run on Armadillo] を実行すると、 実行ファイルや共有ライブラリを作成した後、アプリケーションが Armadillo へ転送されて起動します。

images/abos-images/cui-app/cui_vscode_run_armadillo.png

図3.255 Armadillo 上でアプリケーションを実行する


VS Code のターミナルに以下のメッセージが表示されることがあります。 これが表示された場合は yes と入力して下さい。

Are you sure you want to continue connecting (yes/no/[fingerprint])?

図3.256 実行時に表示されるメッセージ


アプリケーションを終了するには VS Code の左ペインの [my_project] から [App stop on Armadillo] を実行してください。

images/abos-images/cui-app/cui_vscode_stop_armadillo.png

図3.257 アプリケーションを終了する


3.16.8. SBOM 生成に関する設定

SWU イメージ作成時に、同時に SBOM を生成することができます。 詳細は 「SBOM 生成に関わる設定を行う」 を参照してください。

3.16.9. リリース版のビルド

ここでは完成したアプリケーションをリリース版としてビルドする場合の手順について説明します。

VS Code の左ペインの [my_project] から [Generate release swu] を実行すると、 リリース版のアプリケーションを含んだ SWU イメージが作成されます。 事前に 「SWUイメージの作成」 を参照して SWU の初期設定を行ってください。

images/abos-images/cui-app/cui_vscode_make_swu_image.png

図3.258 リリース版をビルドする


[注記]

リリース版の SWU イメージには、開発用の機能は含まれていません。 このため、リリース版の SWU イメージをインストールした Armadillo では、 [App run on Armadillo] を使用したリモート実行は使用できません。

3.16.10. 製品への書き込み

作成した SWU イメージは my_project ディレクトリ下に release.swu というファイル名で保存されています。

この SWU イメージを 「SWU イメージのインストール」 を参照して Armadillo へインストールすると、 Armadillo 起動時にアプリケーションも自動起動します。

3.16.11. Armadillo 上のコンテナイメージの削除

「コンテナとコンテナに関連するデータを削除する」 を参照してください。

3.17. SBOM 生成に関わる設定を行う

ABOSDE では SWU イメージの生成と同時に SBOM が生成されます。 生成される SBOM 名は SWU イメージ.spdx.json になります。 json 形式で ISO/IEC5962で国際標準となっているSPDX2.2のフォーマットに準拠しています。 SBOM についての詳細は 「SBOM の提供」 をご参照ください。

[警告]

SBOM の生成には mkswu (6.4 以上)と、python3-make-sbom パッケージが必要です。 python3-make-sbom パッケージがインストールされていない場合、SBOM は生成されません。 図3.259「mkswu バージョン確認コマンド」 を実行するとインストール済のバージョンが確認できます。

[ATDE ~]$ mkswu --version
mkswu バージョン 6.4

図3.259 mkswu バージョン確認コマンド


表示されない場合は mkswu がインストールされていませんので、図3.260「mkswu のインストール・アップデートコマンド」 を実行してインストールしてください。 mkswu をアップデートする場合もこちらを実行して下さい。

[ATDE ~]$ sudo apt update && sudo apt install mkswu

図3.260 mkswu のインストール・アップデートコマンド


python3-make-sbom パッケージがインストールされている場合、make_sbom.sh が実行可能です。 図3.261「make_sbom.sh 実行確認コマンド」 を実行して、ヘルプが表示されるかご確認ください。

[ATDE ~]$ make_sbom.sh -h

図3.261 make_sbom.sh 実行確認コマンド


表示されない場合は python3-make-sbom がインストールされていませんので、図3.262「python3-make-sbom のインストールコマンド」 を実行してインストールしてください。

[ATDE ~]$ sudo apt update && sudo apt install python3-make-sbom

図3.262 python3-make-sbom のインストールコマンド


3.17.1. SBOM 生成に必要なファイルを確認する

SBOM の生成には以下の二つのファイルが必要です。

  • コンフィグファイル
  • desc ファイル

SBOM の生成にはライセンス情報を示したコンフィグファイルを使用します。コンフィグファイルは config/sbom_config.yaml.tmpl になります。 SWU イメージ作成時にこのコンフィグファイルからバージョン番号をアップデートした swu/sbom_config.yaml が生成されます。 リリース時にはコンフィグファイルの内容を確認し、正しい内容に変更してください。 各項目の詳細な説明については SPDX specification v2.2.2 (https://spdx.github.io/spdx-spec/v2.2.2/) をご覧ください。

SBOM に含めるコンテナイメージ等の情報については desc ファイルに記載されています。 各項目の説明については 「desc ファイルを編集する」 をご覧ください。

3.18. システムのテストを行う

Armadillo 上で動作するシステムの開発が完了したら、製造・量産に入る前に開発したシステムのテストを行ってください。

テストケースは開発したシステムに依ると思いますが、 Armadillo で開発したシステムであれば基本的にテストすべき項目について紹介します。

3.18.1. ランニングテスト

長期間のランニングテストは実施すべきです。

ランニングテストで発見できる現象としては、以下のようなものが挙げられます。

  • 長期間稼働することでソフトウェアの動作が停止してしまう

    開発段階でシステムを短い時間でしか稼働させていなかった場合、長期間ランニングした際になんらかの不具合で停止してしまう可能性が考えられます。

    開発が完了したら必ず、長時間のランニングテストでシステムが異常停止しないことを確認するようにしてください。

    コンテナの稼働情報は podman stats コマンドで確認することができます。

  • メモリリークが発生する

    アプリケーションのなんらかの不具合によってメモリリークが起こる場合があります。

    また、運用時の Armadillo は基本的に overlayfs で動作しています。 そのため、外部ストレージやボリュームマウントに保存している場合などの例外を除いて、動作中に保存したデータは tmpfs (メモリ)上に保存されます。 よくあるケースとして、動作中のログなどのファイルの保存先を誤り、 tmpfs 上に延々と保存し続けてしまうことで、メモリが足りなくなってしまうことがあります。

    長時間のランニングテストで、システムがメモリを食いつぶさないかを確認してください。

    メモリの空き容量は図3.263「メモリの空き容量の確認方法」に示すように free コマンドで確認できます。

    [armadillo ~]# free -h
                  total        used        free      shared  buff/cache   available
    Mem:           1.9G      327.9M        1.5G        8.8M       97.4M        1.5G
    Swap:       1024.0M           0     1024.0M

    図3.263 メモリの空き容量の確認方法


3.18.2. 異常系における挙動のテスト

開発したシステムが、想定した条件下で正しく動作することは開発時点で確認できていると思います。 しかし、そのような正常系のテストだけでなく、正しく動作しない環境下でどのような挙動をするのかも含めてテストすべきです。

よくあるケースとしては、動作中に電源やネットワークが切断されてしまった場合です。

電源の切断時には、 Armadillo に接続しているハードウェアに問題はないか、電源が復旧した際に問題なくシステムが復帰するかなどをよくテストすると良いです。

ネットワークの切断時には、再接続を試みるなどの処理が正しく実装されているか、 Armadillo と サーバ側でデータなどの整合性が取れるかなどをよくテストすると良いです。

この他にもシステムによっては多くの異常系テストケースが考えられるはずですので、様々な可能性を考慮しテストを実施してから製造・量産ステップに進んでください。

3.19. ユーザー設定とユーザーデータを一括削除する

ユーザー設定とユーザーデータを一括削除することができます。 ユーザー設定の削除では ABOS Web から設定できる以下の項目を削除します。

  • ネットワーク設定

    • LAN、WLAN、WWAN の設定を全て削除します。WLAN はクライアント設定とアクセスポイント設定の両方を削除します。
  • DHCP 設定
  • NAT 設定
  • VPN 設定
  • NTP 設定

ABOS Web から設定できるものであっても以下は削除されません。

  • Rest API トークン
  • UI カスタマイズの内容

ユーザーデータの削除では以下のデータを削除します。

  • /var/app/volumes ディレクトリ下のファイルを全て
  • /var/log ディレクトリ下のファイルを全て

ユーザー設定とユーザーデータを削除するには Armadillo 上で abos-ctrl reset-default コマンドを使用します。

[armadillo ~]# abos-ctrl reset-default 1
Run with dry-run mode.
rm -f /etc/NetworkManager/system-connections/*
persist_file -r /etc/NetworkManager/system-connections
persist_file -r /etc/dnsmasq.d
rc-service dnsmasq restart
/etc/init.d/iptables save
sed -i -e '/NETAVARK/d' /etc/iptables/rules-save
persist_file /etc/iptables/rules-save
podman stop -a
find /var/app/volumes /var/log -mindepth 1 -delete
If you want to actually run the above commands,
add the -f/--force option.

図3.264 削除されるユーザー設定とユーザーデータを確認


1

何もオプションを付けない場合、 DRY-RUN モードとなり実際に削除は行われません。 実際に削除を行う時に実行されるコマンドが表示されるのみです。

表示されたコマンドを確認し実際に削除されてもよい場合は、以下のように -f オプションを付けて 実行してください。

[armadillo ~]# abos-ctrl reset-default -f
rm -f /etc/NetworkManager/system-connections/*
persist_file -r /etc/NetworkManager/system-connections
persist_file -r /etc/dnsmasq.d
rc-service dnsmasq restart
/etc/init.d/iptables save
sed -i -e '/NETAVARK/d' /etc/iptables/rules-save
persist_file /etc/iptables/rules-save
podman stop -a
find /var/app/volumes /var/log -mindepth 1 -delete
Starting clone to /dev/mmcblk2p1
Cloning rootfs
Updating appfs snapshots
Reusing up-to-date bootloader
Rollback clone successful
WARNING: Rebooting!

図3.265 実際にユーザー設定とユーザーデータを削除する


コマンド実行後は自動的に Armadillo が再起動します。

ABOS Web または Rest API から実行することもできます。 ABOS Web から実行する場合は 「ユーザー設定とユーザーデータの削除」 を参照してください。 Rest API から実行する場合は 「Rest API : ユーザー設定とユーザーデータの管理」 を参照してください。

[注記]

再起動後、再び設定が必要な場合は ABOS Web や REST API を使用して行ってください。 特に Armadillo Twin を利用している場合は、必ずネットワークの再設定を行ってください。



[5] バージョン3.xまではPUEL(VirtualBox Personal Use and Evaluation License)が適用されている場合があります。

[6] 特権ユーザーで GUI ログインを行うことはできません