開発編

目次

7.1. 開発の準備
7.1.1. 仮想環境のセットアップ
7.1.2. VS Codeのセットアップ
7.1.3. Armadillo に初期設定をインストールする
7.1.4. Python アプリケーションで動作確認する
7.2. アプリケーション開発の流れ
7.3. 開発前に知っておくべき Armadillo Base OS の機能・特徴
7.3.1. 一般的な Linux OS 搭載組み込み機器との違い
7.3.2. Armadillo Base OS 搭載機器のソフトウェア開発手法
7.3.3. アップデート機能について
7.3.4. ファイルの取り扱いについて
7.3.5. インストールディスクについて
7.4. ソフトウェアの設計
7.4.1. 開発者が開発するもの、開発しなくていいもの
7.4.2. ユーザーアプリケーションの設計
7.4.3. ログの設計
7.4.4. ウォッチドッグタイマー
7.4.5. コンテナに Armadillo の情報を渡す方法
7.5. ABOS Web をカスタマイズする
7.6. RTOS ファームウェアの開発
7.6.1. m33-firmware-at とは
7.6.2. 開発環境の説明
7.6.3. 不具合解析
7.7. ABOSDEによるアプリケーションの開発
7.7.1. ABOSDEの対応言語
7.7.2. 参照する開発手順の章の選択
7.8. CUI アプリケーションの開発
7.8.1. CUI アプリケーション開発の流れ
7.8.2. ATDE 上でのセットアップ
7.8.3. アプリケーション開発
7.8.4. コンテナのディストリビューション
7.8.5. Armadillo に転送するディレクトリ及びファイル
7.8.6. コンテナ内のファイル一覧表示
7.8.7. Armadillo 上でのセットアップ
7.8.8. SBOM 生成に関する設定
7.8.9. リリース版のビルド
7.8.10. 製品への書き込み
7.8.11. Armadillo 上のコンテナイメージの削除
7.9. C 言語によるアプリケーションの開発
7.9.1. C 言語によるアプリケーション開発の流れ
7.9.2. ATDE 上でのセットアップ
7.9.3. アプリケーション開発
7.9.4. コンテナのディストリビューション
7.9.5. コンテナ内のファイル一覧表示
7.9.6. Armadillo に転送するディレクトリ及びファイル
7.9.7. Armadillo 上でのセットアップ
7.9.8. SBOM 生成に関する設定
7.9.9. リリース版のビルド
7.9.10. 製品への書き込み
7.9.11. Armadillo 上のコンテナイメージの削除
7.10. SBOM 生成に関わる設定を行う
7.10.1. SBOM 生成に必要なファイルを確認する
7.11. 生成した SBOM をスキャンする
7.11.1. OSV-Scanner のインストール
7.11.2. OSV-Scanner でソフトウェアの脆弱性を検査する
7.12. システムのテストを行う
7.12.1. ランニングテスト
7.12.2. 異常系における挙動のテスト
7.13. ユーザー設定とユーザーデータを一括削除する

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

7.1. 開発の準備

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

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

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

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

[ティップ]

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

  • 基本パッケージが GPLv3(GNU General Public License Version 3) で提供されている
  • VMware形式の仮想ディスク(.vmdk)ファイルに対応している

7.1.1.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 の場合はこの操作は必要ありません。

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

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

[注記]

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

VirtualBox
ATDE9 v20240925 以降

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

[警告]

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

7.1.1.3. ATDE のインポート

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

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

7.1.1.4. ATDE の起動

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

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

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

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

atmark

atmark

一般ユーザー

root

root

特権ユーザー


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

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

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

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

図7.1 GNOME端末の起動


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

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

図7.2 GNOME端末のウィンドウ


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

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

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

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


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

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

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

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


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

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

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

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

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


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

図7.6 共有フォルダー設定


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

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


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

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


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

7.1.2. VS Codeのセットアップ

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

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

7.1.2.1. VS Code を起動する

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

[ATDE ~]$ code

図7.9 VS Code を起動する


[ティップ]

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

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

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

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

images/abos-images/vscode_install_extension.png

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


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

7.1.3. 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 にインストールします。

7.1.3.1. initial_setup.swu の作成

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

images/abos-images/abosde_initial_setup_swu.png

図7.11 initial_setup.swu を作成する


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

なお、この後の Python アプリケーション による動作確認では 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

図7.12 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 に保存されます。

7.1.3.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 のインストールを行ってください。

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

images/a900eva-connection-network.svg

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


images/common-images/callouts/1.svg
Armadillo-900 開発セット
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 をスキャンします。 図7.14「ABOSDE で ローカルネットワーク上の Armadillo をスキャンする」 の赤枠で囲われているボタンをクリックしてください。

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

images/abos-images/abosde_monitor_scan.png

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


images/abos-images/abosde_monitor_rescan.png

図7.15 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アドレスと一致するもの( 図7.16「ABOSDE を使用して ABOS Web を開く」 の赤枠に表示されます )を探してください。

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

images/abos-images/abosde_monitor_abos_web_mac.png

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


7.1.3.3. ABOS Web へアクセス

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

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

図7.17 パスワード登録画面


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

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

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


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

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

図7.19 ログイン画面


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

images/abos-images/abos-web/top.png

図7.20 トップページ


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

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

images/abos-images/abos-web/swu-select_image.png

図7.21 SWU インストール


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

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

図7.22 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:5808

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

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

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

7.1.4. Python アプリケーションで動作確認する

本項では LEDを点滅させる Python のサンプルアプリケーションを使用して、 Armadillo による開発方法の勝手を大まかに把握したい方を想定した簡単な動作確認を行います。 なお、開発環境のセットアップに直接関わる手順ではないので、この動作確認が不要な方は本項をスキップしてください。

7.1.4.1. プロジェクトの作成

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

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

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

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

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


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

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


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

7.1.4.2. 初期設定

プロジェクトを作成する度に、初期設定を行う必要があります。 初期設定では主に Armadillo と SSH で接続するための秘密鍵と公開鍵の生成を行います。 以下の手順を実施してください。

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

images/abos-images/python-app/python_vscode_setup_environment.png

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


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

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

図7.26 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

図7.27 SSH 用の鍵を生成する


1

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

2

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

3

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

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

[ティップ]

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

7.1.4.3. アプリケーション実行用コンテナイメージの作成

Armadillo 上でアプリケーションを実行するためのコンテナイメージを作成します。 ここで作成したコンテナイメージは SWU イメージを使用して Armadillo へインストールします。

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

images/abos-images/python-app/python_vscode_build_dev_image.png

図7.28 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.

図7.29 コンテナイメージの作成完了


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

7.1.4.4. アプリケーション実行用コンテナイメージのインストール

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

図7.30「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

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


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

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

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

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

images/abos-images/abosde_monitor_set_ip.png

図7.31 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

図7.32 ssh_config を編集する


1

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

[ティップ]

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

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

VS Code の左ペインの [my_project] から [App run on Armadillo] を実行すると、 アプリケーションが Armadillo へ転送されて起動します。

images/abos-images/python-app/python_vscode_run_armadillo.png

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


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

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

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


アプリケーションを終了するには VS Code の左ペインの [my_project] から [App stop on Armadillo] を実行してください。

images/abos-images/python-app/python_vscode_stop_armadillo.png

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


7.1.4.7. アプリケーションの削除

動作確認として使用した Python アプリケーションを削除します。 ABOSDE から Armadillo のコンテナイメージを全て削除する SWU イメージを作成します。 この方法はコンテナイメージを全て削除する方法ですので、開発中に複数のコンテナイメージを使用している場合などはそれらも削除されることに注意してください。

VS Code の左ペインの [COMMON PROJECT COMMAND] から [Generate Container Clear Swu] を実行すると、SWU イメージが作成されます。 SWU イメージは ~/mkswu/container_clear.swu に保存されます。

この SWU イメージを Armadillo へインストールします。

images/abos-images/abosde_container_clear_swu.png

図7.36 Armadillo 上のコンテナイメージを削除する


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

インストール後に自動で Armadillo が再起動し、LED が点滅しなくなります。

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

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

基本的な Armadillo-900 開発セット でのアプリケーション開発の流れを図7.37「アプリケーション開発の流れ」に示します。

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

images/development-flow-a9e.png

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


  1. 「開発の準備」に従って開発環境の準備を行います。

  2. Armadillo-900 開発セット に周辺デバイスを接続して使用する場合は、使用手順を「各インターフェースの使用方法」で確認します。
  3. 「ソフトウェアの設計」を行います。
  4. 「ABOS Web を用いたネットワーク設定方法」を行います。
  5. Armadillo Twin を使用したデバイス運用管理を検討する場合、「Armadillo Twin を体験する」を行います。
  6. アプリケーションの開発を行います。図7.37「アプリケーション開発の流れ」 の網掛け部分です。

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

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

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

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

7.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内で行うことができます。

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

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

7.3.3.1. SWUpdate とは

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

Armadillo-900 開発セット では、 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-900 開発セット 開発用ツール から 「Hawkbit docker-composeコンテナ」 をダウンロードして展開してください。

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

7.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 メモリから読み取る、ウェブサーバーからダウンロードするなどです。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    • rootfs にブートに必要なファイルが存在しない (/boot/Image, /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'

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

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

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

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

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

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

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

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

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

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

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

    Armadillo-900 開発セットにUSBメモリを接続すると自動的にアップデートが始まります。 アップデート終了後にArmadillo-900 開発セットは自動で再起動します。

    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/mmcblk2p1(microSDカード)として認識された場合に、イメージのインストールを行う例です。

    [armadillo ~]# mount /dev/mmcblk2p1 /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-900 開発セット を複数台管理してアップデートすることができます。 「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-900/image/baseos-900-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 を入れると有効にすることができます。

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

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

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

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

図7.38 persist_file コマンド実行例


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

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

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

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

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

ディレクトリ 備考

/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

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


1

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

2

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

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

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

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

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

    Armadillo-900 開発セット インストールディスクイメージ にある標準イメージです。 Armadillo を初期化する際に使用します。

  • 開発が完了した Armadillo-900 開発セット をクローンするためのインストールディスク。

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

7.3.5.1. インストールディスクの作成

インストールディスクの作成方法は「初期化インストールディスクの作成」を参照してください。

参照先では初期化インストールディスクの場合の手順を示していますが、「Armadilloのソフトウェアをビルドする」 でビルドしたイメージについても同じ手順になります。 その際のインストールディスクイメージ(.img)は、以下のコマンドを実行して作成してください。

[ATDE ~/build-rootfs-[VERSION]]$ sudo ./build_image.sh --board a900
: (省略)
[ATDE ~/build-rootfs-[VERSION]]$ ls baseos-900*img
baseos-900-[VERSION].img
[ATDE ~/build-rootfs-[VERSION]]$ sudo ./build_image.sh --board a900 \
        --boot ~/uboot-[VERSION]/u-boot-dtb.imx \
        --installer ./baseos-900-[VERSION].img

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

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

インストールディスクを使用する方法については、「インストールディスクを使用する」を参照してください。

7.4. ソフトウェアの設計

Armadillo-900 開発セット を用いた製品のソフトウェア設計は、一般的な組み込み開発と基本的には変わりません。 しかし、 Armadillo Base OS という独自OSを搭載しているため、ソフトウェアの設計には特有のポイントがいくつかあります。 本章では、それらの設計時に考慮すべき Armadillo Base OS 特有のポイントについて紹介していきます。

7.4.1. 開発者が開発するもの、開発しなくていいもの

Armadillo Base OS では、組み込み機器において必要になる様々な機能を標準で搭載しています。

図7.40「開発者が開発するもの、開発しなくていいもの」は、 Armadillo Base OS 搭載製品において、開発者が開発するものと開発しなくていいものをまとめた図です。

images/common-images/development-judge.png

図7.40 開発者が開発するもの、開発しなくていいもの


開発しなくていいものについては設計を考える必要はありません。 開発するものに絞って設計を進めることができます。

[ティップ]

拡張ボードを追加するためにデバイスツリーのカスタマイズが必要となる場合は、デバイスツリー(dtbo)の追加が必要となります。

使用するデバイスによっては、Linux カーネルドライバの追加が必要となり、Linux カーネルのカスタマイズが必要となります。

7.4.2. ユーザーアプリケーションの設計

Armadillo Base OSでは基本的にユーザーアプリケーションを Podman コンテナ上で実行します。 そのため、実行環境として Armadillo Base OS を意識する必要はありません。

Podmanは、同じくコンテナを扱えるソフトウェアである Docker と基本的に互換性があります。

アットマークテクノでは、アットマークテクノが提供する Debian GNU/Linux ベースのコンテナイメージを提供しておりますが、それ以外のlink:Docker Hub などから使い慣れたディストリビューションのコンテナイメージを取得して開発することができます。

7.4.2.1. ユーザーデータの保存場所

アプリケーションが出力するユーザーデータで保存が必要なものは、「電源を切っても保持されるディレクトリ(ユーザーデータディレクトリ)」にも記載があるとおり、 /var/app/volumes/ 以下に配置してください。

色々な場所にデータが保存されていますと Armadillo-900 開発セット の初期化を行う際に削除の処理が煩雑になりますので、 /var/app/volumes/ 以下に集約してください。

7.4.2.2. アプリケーション設定情報の保存場所

開発したアプリケーションやコンテナがバージョンアップした際にも必要となる設定情報は、 「電源を切っても保持されるディレクトリ(ユーザーデータディレクトリ)」 にも記載があるとおり、 /var/app/rollback/volumes/ 以下に保存してください。

7.4.2.3. LTE 通信を使用する場合に考慮すべきこと

LTE 通信は、周辺の状況や工事などによって長時間通信ができなくなる可能性があります。そのため、クラウドやサーバーへ送信すべきデーターを即時に送信できない可能性があります。

データーの再送処理や動作しているコンテナ内にキャッシュする処理を実装して、上記状況に備えてください。

7.4.3. ログの設計

ユーザーアプリケーションのログは、不具合発生時の原因究明の一助になるため必ず残しておくことを推奨します。

7.4.3.1. ログの保存場所

ユーザーアプリケーションが出力するログは、「電源を切っても保持されるディレクトリ(ユーザーデータディレクトリ)」にも記載があるとおり、 /var/app/volumes/ 以下に配置するのが良いです。

コンテナの中から /var/app/volumes/ ディレクトリにアクセスすることになります。 手順についての詳細は実際に開発を行う箇所にて紹介します。

7.4.3.2. 保存すべきログ

  • Ethernet、LTE、Bluetooth、WLANなどの無線系のログ

    一般に不具合発生時によく疑われる箇所なので、最低でも接続・切断情報などのログを残しておくことをおすすめします。

  • ソフトウェアのバージョン

    /etc/sw-versions というファイルが Armadillo Base OS 上に存在します。 これは、 SWUpdate に管理されている各ソフトウェアのバージョンが記録されているファイルです。 このファイルの内容をログに含めておくことで、当時のバージョンを記録することができます。

  • A/B 面どちらであったか

    アップデート後になにか不具合があって、自動的にロールバックしてしまう場合があります。 後でログを確認する際に、当時 A/B 面どちらであったかで環境が大きく変わってしまい解析に時間がかかる場合があるので、どちらの面で動作していたかをログに残しておくことをおすすめします。

    図7.41「現在の面の確認方法」に示すコマンドを実行することで、現在 A/B どちらの面で起動しているかを確認できます。

    [armadillo ~]# abos-ctrl
    Currently booted on /dev/mmcblk0p1 1
    : (省略)

    図7.41 現在の面の確認方法


    1

    この実行結果から今の面は/dev/mmcblk0p1であることが分かります。

7.4.4. ウォッチドッグタイマー

Armadillo-900 開発セットのウォッチドッグタイマーは、i.MX 8ULPのWDOG(Watchdog Timer)を利用しています。

ウォッチドッグタイマーは、U-Boot によって有効化されます。標準状態でタイムアウト時間は10秒に設定されます。

何らかの要因でウォッチドッグタイマーのキックができなくなりタイムアウトすると、システムリセットが発生します。

ウォッチドッグタイマーの設定変更は、ioctlシステムコール経由で行うことができます。詳細な情報については、Linux カーネルのソースコードに含まれているドキュメント(Documentation/watchdog/watchdog-api.rst)を参照してください。

[ティップ]

ウォッチドッグタイマーを停止することはできません。

7.4.5. コンテナに 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

    図7.42 add_args を用いてコンテナに情報を渡すための書き方


    1

    シェルコマンドの出力を環境変数に代入する場合は <値> として $(シェルコマンド) を使用してください。

    add_args --env の例を示します。

    add_args --env=MY_ENV=my_value

    図7.43 add_args を用いてコンテナに情報を渡す例


    これにより、コンテナ内の環境変数 MY_ENV に文字列 my_value が設定されます。

7.5. ABOS Web をカスタマイズする

ABOS Web では以下の要素についてお客様自身で用意したものを使用して カスタマイズすることができます。

  • ロゴ画像
  • ヘッダロゴアイコン画像
  • ヘッダタイトル
  • favicon 画像
  • 背景色
  • メニューの表示名

ABOS Web をお客様の最終製品に組み込む場合、自社のロゴ画像に変更するといったような 使い方ができます。

カスタマイズは、「設定管理」で行うことができます。

[注記]

カスタマイズは ABOS Web のバージョン 1.3.0 以降で対応しています。

images/abos-images/abos-web/customize.png

図7.44 ABOS Web のカスタマイズ設定


  • ロゴ画像

    ログインページや新規パスワード設定画面で表示される画像です。 「ファイルを選択」をクリックしてアップロードしたい画像ファイルを選択してください。 フォーマットは PNG のみで、ファイルサイズは 3MB のものまでアップロードできます。

  • ヘッダロゴアイコン画像

    画面左上に常に表示されている画像です。 「ファイルを選択」をクリックしてアップロードしたい画像ファイルを選択してください。 フォーマットは PNG のみで、ファイルサイズは 3MB のものまでアップロードできます。

  • ヘッダタイトル

    画面左上に常に表示されている文字列です。24文字まで入力できます。

  • favicon 画像

    Web ブラウザのタブなどに小さく表示される画像です。 favicon 画像は以下の種類を favicon ディレクトリに保存して、 favicon ディレクトリごと zip 圧縮したものをアップロードしてください。

    表7.3 用意する 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

    図7.45 メニュー変更画面 (一部)


    各メニュー項目名と説明を変更することができます。 項目名を空欄にするとそのメニューは非表示になります。 入力し終わったらページ下部の「メニューを設定」をクリックしてください。

画像やメニューの変更後、すぐに Web ブラウザ画面に反映されない場合は、 お使いの Web ブラウザの設定でキャッシュの削除を行ってください。

変更完了後は、「カスタマイズ機能を無効にする」をクリックするとカスタマイズ項目が非表示になり それ以上カスタマイズできなくなります。お客様の最終製品に ABOS Web を組み込む場合に実行してください。

[ティップ]

Armadillo 内の /etc/atmark/abos_web/customize_disable ファイルを削除すると、 再びカスタマイズ項目が表示されるようになります。

7.6. RTOS ファームウェアの開発

7.6.1. m33-firmware-at とは

Armadillo-900 シリーズには、Linux を実行する2つの Arm Cortex-A35 コアに加えて、1つの Arm Cortex-M33 コアが搭載されています。

一部の I/O インタフェースは A35 コアからアクセスできないため、 M33 コア上に独自の RTOS ファームウェア「m33-firmware-at」を起動し、 図7.46「Armadillo-900 で使用している i.MX 8ULP の簡易構造」の様にコア間通信を介してLinuxから操作できるようにしています。

images/common-images/architecture_imx8ulp.png

図7.46 Armadillo-900 で使用している i.MX 8ULP の簡易構造


m33-firmware-at は主に以下の 3 つの役割を担います。

  • Linux から M33 に接続されている I/O を操作可能にする
  • サスペンド時に消費電力を最適化する
  • 必要に応じて任意のコードを RTOS 環境で実行する

本章では、上記の3つ目の任意のコードを m33-firmware-at に追加する方法について解説します。

7.6.2. 開発環境の説明

ブートローダーイメージのソースコードをダウンロード、ビルド、インストールすることで、m33-firmware-at を改造できます。 詳細なビルド手順は 「ブートローダーをビルドする」 を参照してください。

7.6.2.1. 開発を始める前の注意

ブートローダーの開発前に以下の注意点をご確認ください。

  1. ブートローダーを改造すると、 Armadillo が起動しなくなる可能性があります。 ハードウェアの故障でなければ、インストールディスクから復旧可能です。 予め 「初期化インストールディスクの作成」 通りにインストールディスクを作成しておくか、SD カードで開発を行うことを推奨します。
  2. Linux と m33-firmware-at はコア間通信で連携するため、長期間更新されていない状態から片方だけを更新すると正常に動作しない可能性があります。 原則として、常に適合性を維持するように更新を提供しますが、m33-firmware-at のコア部分を更新できるように開発することを推奨します。

    m33-firmware-at のソースコードを github に公開していますので、ブートローダーをダウンロードした後 m33-firmware-at を git リポジトリと置き換えると管理しやすくなります。

    [ATDE ~]$ tar xf imx-boot-[VERSION].tar.zst
    [ATDE ~]$ cd imx-boot-[VERSION]
    [ATDE ~/imx-boot-[VERSION]]$ rm -rf m33_firmware_at
    [ATDE ~/imx-boot-[VERSION]]$ git clone https://github.com/atmark-techno/m33-firmware-at m33_firmware_at
  3. ATDE のストレージ容量を抑えるため、デフォルトでは gcc-arm-none-eabi パッケージがインストールされていません。インストールされていない場合は、ソースコードアーカイブに含まれているバイナリが利用されるため、 m33-firmware-at のビルドは行われません。開発前に m33-firmware-at ビルド状態の確認 の手順でビルドできることを確認してください。

7.6.2.2. ソフトウェア構成

m33-firmware-at のファイル構成は以下の通りです。

  1. Linux ドライバーに必要なサービス

    Linux ドライバーとの連携は srtm サービスで行います。 app_srtm.c で初期化処理を行い、各ドライバーの対応は以下のファイルで行います。

    • srtm/services/srtm_*_service.[ch]: Linux ドライバーからのプロトコル実装
    • app_*.c: ハードウェア操作の実装
  2. 電源と電圧管理

    起動時の電圧管理やサスペンド時の消費電力の最適化は main.clpm.c で行います。

  3. カスタマイズ用ディレクトリ

    custom ディレクトリに任意のコードを実装することで、 m33-firmware-at を容易に変更できます。 以下のサンプルファイルを提供しています。

    • custom/cli_custom.c: デバッグシリアル接続のコマンド追加
    • custom/app_tty_custom.c: Linux の仮想 tty ドライバー

      arch/arm64/boot/dts/freescale/armadillo_900-customize.dts ファイル等に以下の内容を設定すると、仮想 tty デバイスが生成されます:

      &{/} {
              aliases {
                      ttyrpmsg2 = "/m33-custom-uart";
              };
              m33-custom-uart {
                      compatible = "fsl,imx-rpmsg-tty-serial";
                      port_type = <TTY_TYPE_CUSTOM>;
                      port_name = "custom port"; /* 32文字までの任意文字列 */
              };
      };

      custom_init() は tty が初期化される時に実行されます。複数のデバイスを生成する場合は port_name で区別できます。

      tx/rx は Linux 側から見た名称です。 Linux 側の tty に書き込むと custom_tx() 関数が実行されます。 SRTM_TtyService_NotifyAlloc()SRTM_TtyService_NotifySend() を利用すると Linux にメッセージが送信できます。

  4. ビルドシステム

    ビルドシステムは armgcc ディレクトリにあります。

    ファイルを追加する場合は armgcc/CMakeLists.txtadd_executable 命令に追加してください。

    NXP社の mcux-sdk のドライバを追加したい場合は armgcc/config.cmake を変更してください。

7.6.3. 不具合解析

7.6.3.1. ログによる解析

m33-firmware-at のソースコードで PRINTF を使用して簡易的な解析ができます。

ログの取得については 「RTD用コンソール を使用する」 を参照してください。

シリアル接続後、簡易コンソールで以下のコマンドを利用できます。

  • help: 利用可能なコマンド一覧
  • log: ログバッファーの内容を再表示
  • version: m33-firmware-at のバージョンを表示(git からビルドした場合は git describe によるタグかコミット情報が記載されます)
  • md, mw: u-boot に似た memory display/write コマンド。こちらのコマンドはデフォルト状態で利用できません。

    main.h で「#define CLI_RAW_MEM 」をコメントアウトしてイメージを更新するとコマンドが追加されます。

    -b, -w, -l, -q オプションで byte (1 byte), halfword (2 bytes), word (4 bytes), double word (8 bytes) を扱えます。

    md にアドレスとアイテム数を指定して、メモリ内容を表示します。mw にアドレスと値を指定します。

サスペンド関連の解析には、 main.h の DEBUG_SUSPEND (サスペンド中でもシリアル出力を無効化しない)と DEBUG_SUSPEND_SKIP_JTAG_PINS (サスペンド中に jtag のピンを無効化しない)設定も利用できます。

7.6.3.2. JTAG での解析

JTAG デバッガーを利用した解析ができます。

弊社では PALMiCE4 を利用して、以下の機能を確認しています。

  • メモリ、レジスターの取得と書き込み
  • ステップ実行・Break(ASM コード、C ソース両方)
  • ローカルまたはグローバル変数の値の取得と変更
  • FreeRTOS のデバッグ機能(タスクやタイマー情報)

以下では Armadillo 固有の情報のみを記載します。 ここに記載の無い内容については、コンピューテックス社にお問い合わせください。

  1. C ソースの連携や FreeRTOS のデバッグ機能にはデバッグ情報が必要です。 以下の手順で有効化できます。

    [ATDE ~/imx-boot-[VERSION]]$ ./m33_firmware_at/armgcc/build.sh debug 1
    [ATDE ~/imx-boot-[VERSION]]$ ls m33_firmware_at/armgcc/debug/*
    m33_firmware_at/armgcc/debug/m33-firmware-at.bin 2
    m33_firmware_at/armgcc/debug/m33-firmware-at.elf 3

    図7.47 m33-firmware-at のデバッグビルド方法


    1

    デバッグビルドの実行。一度実行すると、「 build.sh release 」で無効化するまでは imx-boot ディレクトリの「 make imx-boot_armadillo-900 」コマンドでデバッグビルドが利用されます。

    2

    imx-boot に組み込まれるファームウェアのバイナリ

    3

    デバッガーに提供する ELF ファイル(デバッグ情報あり)

  2. 接続に関しては 「JTAG を使用する」 を参照してください。

7.7. ABOSDEによるアプリケーションの開発

ここでは、ABOSDE(Armadillo Base OS Development Environment) によるアプリケーション開発の概要とABOSDEで作成される各プロジェクトの違いについて説明します。

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

ABOSDEでは、以下のようなアプリケーションを開発できます。

  • CUI アプリケーション
  • C 言語アプリケーション

7.7.1. ABOSDEの対応言語

表7.4「ABOSDEの対応言語」に示すように、アプリケーション毎に対応している言語が異なります。

表7.4 ABOSDEの対応言語

アプリケーションの種類使用言語(フレームワーク)

CUI アプリケーション

シェルスクリプト

Python

C言語アプリケーション

C 言語


7.7.2. 参照する開発手順の章の選択

どのようなアプリケーションを開発するかによってABOSDEによる開発手順が異なります。図7.48「参照する開発手順の章を選択する流れ」を参考に、ご自身が開発するアプリケーションに適した章を参照してください。

images/common-images/abosde_app_dev_flowchart.png

図7.48 参照する開発手順の章を選択する流れ


CUI アプリケーション
C 言語アプリケーション
  • 対象ユーザー

    • C 言語でないと実現できないアプリケーションを開発したい
    • 既存の C 言語によって開発されたアプリケーションを Armadillo で動作させたい
    • 開発環境に制約がある
  • マニュアルの参照先

7.8. CUI アプリケーションの開発

ここではシェルスクリプトおよび Python を使った CUI アプリケーションの開発方法を紹介します。 開発手順としてはシェルスクリプトと Python で同じであるため、シェルスクリプトの場合の例で説明します。

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

Armadillo 向けに CUI アプリケーションを開発する場合の流れは以下のようになります。

images/abos-images/cui-app/flutter_dev_cycle.svg

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


7.8.2. ATDE 上でのセットアップ

ここでは、開発開始時の ATDE 上でのセットアップ手順について説明します。 ATDE をお使いでない場合は、先に 「開発の準備」 を参照して ATDE 及び、 VS Code のセットアップを完了してください。

7.8.2.1. プロジェクトの作成

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

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

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

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


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

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


7.8.3. アプリケーション開発

7.8.3.1. VS Code の起動

ここでは、実際に Armadillo 上でサンプルアプリケーションを起動する場合の手順を説明します。 プロジェクトディレクトリへ移動し VS Code を起動します。

[ATDE ~]$ code ./my_project

図7.52 VS Code で my_project を起動する


7.8.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 を点滅させます。

7.8.3.3. 初期設定

初期設定では主に Armadillo と SSH で接続するための秘密鍵と公開鍵の生成を行います。

作成したプロジェクトディレクトリへ移動して VS Code を起動してください。

[ATDE ~]$ cd my_project
[ATDE ~/my_project]$ code ./

図7.53 初期設定を行う


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

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

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


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

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

図7.55 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

図7.56 SSH 用の鍵を生成する


1

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

2

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

3

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

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

[ティップ]

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

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

図7.57 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.

図7.58 コンテナイメージの作成完了


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

7.8.3.5. Python アプリケーションに Bluetooth Low Energy パッケージをインストールする

Python アプリケーションの場合は、アプリケーションから Bluetooth Low Energy を使用するために必要なパッケージを VS Code からインストールすることができます。

左ペインの [my_project] から [external packages] を開き [bleak] の右にある + をクリックするとインストールされます。

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

図7.59 Bluetooth Low Energy パッケージをインストールする


すでにインストール済みの状態で - をクリックするとアインストールされます。 一番右にある丸アイコンをクリックすると Web ブラウザで bleak パッケージの API リファレンスページを開きます。

[注記]

Bluetooth Low Energy パッケージのインストールは ABOSDE のバージョン 1.8.4 以降で、かつ 2024 年 7 月 24 日以降に 「プロジェクトの作成」 の手順で新たに作成したプロジェクトで使用できるようになります。

7.8.4. コンテナのディストリビューション

使用するコンテナのディストリビューションは以下のとおりです。

ディストリビューション
  • debian:bullseye-slim

7.8.5. Armadillo に転送するディレクトリ及びファイル

コンテナイメージ以外に、以下に示すディレクトリやファイルを Armadillo に転送します。 ここでは、プロジェクト名は my_project としています。

Armadillo に転送するディレクトリ及びファイル
  • my_project/app/src

7.8.6. コンテナ内のファイル一覧表示

図7.60「コンテナ内のファイル一覧を表示するタブ」 の赤枠で囲われているタブをクリックすることで、development.swu または「リリース版のビルド」で作成される release.swu に含まれるコンテナ内のファイルおよびディレクトリを表示します。

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

図7.60 コンテナ内のファイル一覧を表示するタブ


クリック後の表示例を 図7.61「コンテナ内のファイル一覧の例」 に示します。

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

図7.61 コンテナ内のファイル一覧の例


コンテナ内のファイル一覧は [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」になります。

ユーザー自身で同名のコンテナを既に作成していた場合、そのコンテナはこの機能を使用時に削除されます。

[注記]

コンテナ内のファイル一覧には、ファイルおよびディレクトリのみを表示しています。 シンボリックリンク、特殊デバイスファイルなどは表示していません。

7.8.6.1. resources ディレクトリについて

図7.62「resources ディレクトリ」に示すように ATDE 上のプロジェクトディレクトリには container/resources ディレクトリがあります。

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

図7.62 resources ディレクトリ


container/resources ディレクトリ下に、コンテナ内と同じパスでファイルまたはディレクトリを配置することで、それらは [Generate development swu] または [Generate release swu] を実行時にコンテナ内にコピーされます。

例えば、コンテナ内にある /etc/adduser.conf を上書きする場合は、編集した adduser.conf ファイルをプロジェクトディレクトリにある container/resources/etc/adduser.conf に配置してください。

プロジェクトディレクトリにある container/resources 下のファイルおよびディレクトリを操作する方法は以下の 2 通りがあります。

  • エクスプローラーを使用する
  • ABOSDEのコンテナ内のファイル一覧表示機能を使用する

ABOSDEのコンテナ内のファイル一覧表示機能を使用することで、視覚的にファイル構成や、差分があるファイルを把握しながら操作可能です。 以降に詳細を説明します。

7.8.6.2. コンテナ内のファイル一覧の再表示

図7.60「コンテナ内のファイル一覧を表示するタブ」 の赤枠で囲われているボタンをクリックすることで、コンテナ内のファイル一覧を再表示します。

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

図7.63 コンテナ内のファイル一覧を再表示するボタン


7.8.6.3. container/resources 下にファイルおよびフォルダーを作成

図7.64「container/resources 下にファイルを追加するボタン」 の赤枠で囲われている表記のボタンをクリックすることで、プロジェクトディレクトリにある container/resources 下にファイルを追加することが可能です。

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

図7.64 container/resources 下にファイルを追加するボタン


図7.65「ファイル名を入力」 に示すように、コマンドパレットが表示されますのでファイル名を入力してください。

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

図7.65 ファイル名を入力


例として、「add_file」というファイル名を入力したとします。

図7.66「追加されたファイルの表示」 に示すように、追加したファイルには「A」というマークが表示されます。

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

図7.66 追加されたファイルの表示


また、図7.67「container/resources 下にフォルダーを追加するボタン」 の赤枠で囲われている表記のボタンをクリックすることで、ファイルの追加と同様の操作でディレクトリを追加することが可能です。

追加したディレクトリも同様に "A" というマークが表示されます。

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

図7.67 container/resources 下にフォルダーを追加するボタン


7.8.6.4. container/resources 下にあるファイルを開く

図7.68「container/resources 下にあるファイルを開くボタン」 の赤枠で囲われている表記のボタンをクリックすることで、プロジェクトディレクトリにある container/resources 下のファイルをエディタに表示することができます。

この例では、プロジェクトディレクトリにある container/resources 下の add_file をエディタに表示します。

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

図7.68 container/resources 下にあるファイルを開くボタン


7.8.6.5. container/resources 下にあるファイルおよびフォルダーの削除

図7.68「container/resources 下にあるファイルを開くボタン」 の赤枠で囲われている表記のボタンをクリックすることで、container/resources 下にあるファイルを削除することができます。

この例では、プロジェクトディレクトリにある container/resources 下の add_file を削除します。

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

図7.69 container/resources 下にあるファイルを削除するボタン


ディレクトリも同様に図7.68「container/resources 下にあるファイルを開くボタン」 の赤枠で囲われている表記のボタンをクリックすることで削除することができます。

7.8.6.6. コンテナ内のファイルを container/resources 下に保存

図7.70「コンテナ内のファイルを container/resources 下に保存するボタン」 の赤枠で囲われている表記のボタンをクリックすることで、コンテナ内にあるファイルをプロジェクトディレクトリにある container/resources 下に保存します。

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

図7.70 コンテナ内のファイルを container/resources 下に保存するボタン


ファイルが container/resources 下に保存されると、図7.71「編集前のファイルを示すマーク」 に示すように、ファイル名の右側に "U" のマークが表示されます。

"U" のマークはプロジェクトディレクトリにある container/resources 下のファイルとコンテナ内にあるファイルの内容が同一であることを示します。

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

図7.71 編集前のファイルを示すマーク


container/resources 下にあるファイルを編集して再表示すると、図7.72「編集後のファイルを示すマーク」 に示すように、ファイル名の右側に "M" のマークが表示されます。

"M" のマークはプロジェクトディレクトリにある container/resources 下のファイルとコンテナ内にあるファイルの内容に差があることを示します。

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

図7.72 編集後のファイルを示すマーク


7.8.6.7. エラー表示

container/resources 下とコンテナ内にあるファイルまたはディレクトリを比較して、同名でかつファイルの種類が異なる場合、図7.73「コンテナ内にコピーされないことを示すマーク」 に示すように、ファイル名の右側に "E" のマークが表示されます。

"E" のマークが表示された場合、そのファイルまたはディレクトリは [Generate development swu] または [Generate release swu] を実行してもコンテナにコピーされません。

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

図7.73 コンテナ内にコピーされないことを示すマーク


7.8.7. Armadillo 上でのセットアップ

7.8.7.1. アプリケーション実行用コンテナイメージのインストール

「アプリケーション実行用コンテナイメージの作成」 で作成した development.swu「SWU イメージのインストール」 を参照して Armadillo へインストールしてください。

インストール後に自動で Armadillo が再起動します。

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

VS Code 上で ABOSDE(Armadillo Base OS Development Environment) から、 ABOS Web が動作している Armadillo の一覧を確認し、 指定した Armadillo の IP アドレスを ssh 接続に使用することができます。 ただし、ATDE のネットワークを NAT に設定している場合は Armadillo がリストに表示されません。

図7.74「ABOSDE で ローカルネットワーク上の Armadillo をスキャンする」 の赤枠で囲われているボタンをクリックすることで、 ローカルネットワーク上で ABOS Web が実行されている Armadillo をスキャンすることができます。

images/abos-images/abos-web/abosde_monitor_welcome_page.png

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


図7.75「ABOSDE を使用して ssh 接続に使用する IP アドレスを設定する」 の赤枠で囲われているマークをクリックすることで、 指定した Armadillo の IP アドレスを ssh 接続に使用する IP アドレスに設定することができます。

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

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


図7.76「ABOSDE に表示されている Armadillo を更新する」 の赤枠で囲われているマークをクリックすることで、 ABOSDE に表示されている Armadillo を更新することができます。

images/abos-images/abos-web/abosde_monitor_rescan.png

図7.76 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

図7.77 ssh_config を編集する


1

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

[ティップ]

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

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

VS Code の左ペインの [my_project] から [App run on Armadillo] を実行すると、 アプリケーションが Armadillo へ転送されて起動します。

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

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


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

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

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


アプリケーションを終了するには VS Code の左ペインの [my_project] から [App stop on Armadillo] を実行してください。

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

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


7.8.8. SBOM 生成に関する設定

SWU イメージ作成時に、同時に SBOM を生成することができます。 詳細は 「SBOM 生成に関わる設定を行う」 を参照してください。

7.8.9. リリース版のビルド

ここでは完成したアプリケーションをリリース版としてビルドする場合の手順について説明します。

VS Code の左ペインの [my_project] から [Generate release swu] を実行すると、 リリース版のアプリケーションを含んだ SWU イメージが作成されます。 事前に 「SWUイメージの作成」 を参照して SWU の初期設定を行ってください。

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

図7.81 リリース版をビルドする


[注記]

リリース版の SWU イメージには、開発用の機能は含まれていません。 このため、リリース版の SWU イメージをインストールした Armadillo では、 [App run on Armadillo] を使用したリモート実行は使用できません。

7.8.10. 製品への書き込み

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

この SWU イメージを 「SWU イメージのインストール」 を参照して Armadillo へインストールすると、 Armadillo 起動時にアプリケーションも自動起動します。

7.8.11. Armadillo 上のコンテナイメージの削除

「コンテナとコンテナに関連するデータを削除する」 を参照してください。

7.9. C 言語によるアプリケーションの開発

ここでは C 言語によるアプリケーション開発の方法を紹介します。

C 言語によるアプリケーション開発は下記に当てはまるユーザーを対象としています。

  • 既存の C 言語によって開発されたアプリケーションを Armadillo で動作させたい
  • C 言語でないと実現できないアプリケーションを開発したい

上記に当てはまらず、開発するアプリケーションがシェルスクリプトまたは Python で実現可能であるならば、「CUI アプリケーションの開発」を参照してください。

7.9.1. C 言語によるアプリケーション開発の流れ

Armadillo 向けに C 言語によるアプリケーションを開発する場合の流れは以下のようになります。

images/abos-images/cui-app/flutter_dev_cycle.svg

図7.82 C 言語によるアプリケーション開発の流れ


7.9.2. ATDE 上でのセットアップ

ここでは、開発開始時の ATDE 上でのセットアップ手順について説明します。 ATDE をお使いでない場合は、先に 「開発の準備」 を参照して ATDE 及び、 VS Code のセットアップを完了してください。

7.9.2.1. プロジェクトの作成

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

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

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

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


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

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


7.9.3. アプリケーション開発

7.9.3.1. VS Code の起動

ここでは、実際に Armadillo 上でサンプルアプリケーションを起動する場合の手順を説明します。 プロジェクトディレクトリへ移動し VS Code を起動します。

[ATDE ~]$ code ./my_project

図7.85 VS Code で my_project を起動する


7.9.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 を点滅させます。

7.9.3.3. 初期設定

初期設定では主に Armadillo と SSH で接続するための秘密鍵と公開鍵の生成を行います。

作成したプロジェクトディレクトリへ移動して VS Code を起動してください。

[ATDE ~]$ cd my_project
[ATDE ~/my_project]$ code ./

図7.86 初期設定を行う


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

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

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


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

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

図7.88 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

図7.89 SSH 用の鍵を生成する


1

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

2

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

3

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

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

[ティップ]

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

7.9.3.4. packages.txt の書き方

ABOSDEではコンテナイメージにパッケージをインストールするために container ディレクトリにある packages.txt を使用します。 packages.txt に記載されているパッケージは "apt install" コマンドによってコンテナイメージにインストールされます。

C 言語による開発の場合、packages.txt に [build] というラベルを記載することで、ビルド時のみに使用するパッケージを指定することが出来ます。

図7.90「C 言語による開発における packages.txt の書き方」に C 言語による開発の場合における packages.txt の書き方の例を示します。 ここでは、パッケージ名を package_A 、package_B 、package_C としています。

package_A
package_B

[build]   1
package_C

図7.90 C 言語による開発における packages.txt の書き方


1

このラベル以降のパッケージはビルド時のみに使用されます。

上記の例の場合、Armadillo 上で実行される環境では package_A 、package_B のみがインストールされ、package_C はインストールされません。

"[build] package_C" のように [build] の後に改行せずに、一行でパッケージ名を書くことは出来ませんのでご注意ください。

7.9.3.5. ABOSDEでの開発における制約

Makefile は app/src 直下に配置してください。 app/src 直下の Makefile を用いて make コマンドが実行されます。 ABOSDE では make コマンドのみに対応しています。

app/buildapp/lib 内のファイルが Armadillo に転送されますので、実行ファイルは app/build 、共有ライブラリ( 拡張子が .so ファイル )は app/lib に配置してください。

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

図7.91 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.

図7.92 コンテナイメージの作成完了


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

7.9.4. コンテナのディストリビューション

使用するコンテナのディストリビューションは以下のとおりです。

ディストリビューション
  • debian:bullseye-slim

7.9.5. コンテナ内のファイル一覧表示

図7.93「コンテナ内のファイル一覧を表示するタブ」 の赤枠で囲われているタブをクリックすることで、development.swu または「リリース版のビルド」で作成される release.swu に含まれるコンテナ内のファイルおよびディレクトリを表示します。

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

図7.93 コンテナ内のファイル一覧を表示するタブ


クリック後の表示例を 図7.94「コンテナ内のファイル一覧の例」 に示します。

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

図7.94 コンテナ内のファイル一覧の例


コンテナ内のファイル一覧は [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」になります。

ユーザー自身で同名のコンテナを既に作成していた場合、そのコンテナはこの機能を使用時に削除されます。

[注記]

コンテナ内のファイル一覧には、ファイルおよびディレクトリのみを表示しています。 シンボリックリンク、特殊デバイスファイルなどは表示していません。

7.9.5.1. resources ディレクトリについて

図7.95「resources ディレクトリ」に示すように ATDE 上のプロジェクトディレクトリには container/resources ディレクトリがあります。

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

図7.95 resources ディレクトリ


container/resources ディレクトリ下に、コンテナ内と同じパスでファイルまたはディレクトリを配置することで、それらは [Generate development swu] または [Generate release swu] を実行時にコンテナ内にコピーされます。

例えば、コンテナ内にある /etc/adduser.conf を上書きする場合は、編集した adduser.conf ファイルをプロジェクトディレクトリにある container/resources/etc/adduser.conf に配置してください。

プロジェクトディレクトリにある container/resources 下のファイルおよびディレクトリを操作する方法は以下の 2 通りがあります。

  • エクスプローラーを使用する
  • ABOSDEのコンテナ内のファイル一覧表示機能を使用する

ABOSDEのコンテナ内のファイル一覧表示機能を使用することで、視覚的にファイル構成や、差分があるファイルを把握しながら操作可能です。 以降に詳細を説明します。

7.9.5.2. コンテナ内のファイル一覧の再表示

図7.93「コンテナ内のファイル一覧を表示するタブ」 の赤枠で囲われているボタンをクリックすることで、コンテナ内のファイル一覧を再表示します。

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

図7.96 コンテナ内のファイル一覧を再表示するボタン


7.9.5.3. container/resources 下にファイルおよびフォルダーを作成

図7.97「container/resources 下にファイルを追加するボタン」 の赤枠で囲われている表記のボタンをクリックすることで、プロジェクトディレクトリにある container/resources 下にファイルを追加することが可能です。

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

図7.97 container/resources 下にファイルを追加するボタン


図7.98「ファイル名を入力」 に示すように、コマンドパレットが表示されますのでファイル名を入力してください。

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

図7.98 ファイル名を入力


例として、「add_file」というファイル名を入力したとします。 図7.99「追加されたファイルの表示」 に示すように、追加したファイルには「A」というマークが表示されます。

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

図7.99 追加されたファイルの表示


また、図7.100「container/resources 下にフォルダーを追加するボタン」 の赤枠で囲われている表記のボタンをクリックすることで、ファイルの追加と同様の操作でディレクトリを追加することが可能です。

追加したディレクトリも同様に "A" というマークが表示されます。

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

図7.100 container/resources 下にフォルダーを追加するボタン


7.9.5.4. container/resources 下にあるファイルを開く

図7.101「container/resources 下にあるファイルを開くボタン」 の赤枠で囲われている表記のボタンをクリックすることで、プロジェクトディレクトリにある container/resources 下のファイルをエディタに表示することができます。

この例では、プロジェクトディレクトリにある container/resources 下の add_file をエディタに表示します。

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

図7.101 container/resources 下にあるファイルを開くボタン


7.9.5.5. container/resources 下にあるファイルおよびフォルダーの削除

図7.101「container/resources 下にあるファイルを開くボタン」 の赤枠で囲われている表記のボタンをクリックすることで、container/resources 下にあるファイルを削除することができます。

この例では、プロジェクトディレクトリにある container/resources 下の add_file を削除します。

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

図7.102 container/resources 下にあるファイルを削除するボタン


ディレクトリも同様に図7.101「container/resources 下にあるファイルを開くボタン」 の赤枠で囲われている表記のボタンをクリックすることで削除することができます。

7.9.5.6. コンテナ内のファイルを container/resources 下に保存

図7.103「コンテナ内のファイルを container/resources 下に保存するボタン」 の赤枠で囲われている表記のボタンをクリックすることで、コンテナ内にあるファイルをプロジェクトディレクトリにある container/resources 下に保存します。

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

図7.103 コンテナ内のファイルを container/resources 下に保存するボタン


ファイルが container/resources 下に保存されると、図7.104「編集前のファイルを示すマーク」 に示すように、ファイル名の右側に "U" のマークが表示されます。

"U" のマークはプロジェクトディレクトリにある container/resources 下のファイルとコンテナ内にあるファイルの内容が同一であることを示します。

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

図7.104 編集前のファイルを示すマーク


container/resources 下にあるファイルを編集して再表示すると、図7.105「編集後のファイルを示すマーク」 に示すように、ファイル名の右側に "M" のマークが表示されます。

"M" のマークはプロジェクトディレクトリにある container/resources 下のファイルとコンテナ内にあるファイルの内容に差があることを示します。

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

図7.105 編集後のファイルを示すマーク


7.9.5.7. エラー表示

container/resources 下とコンテナ内にあるファイルまたはディレクトリを比較して、同名でかつファイルの種類が異なる場合、図7.106「コンテナ内にコピーされないことを示すマーク」 に示すように、ファイル名の右側に "E" のマークが表示されます。

"E" のマークが表示された場合、そのファイルまたはディレクトリは [Generate development swu] または [Generate release swu] を実行してもコンテナにコピーされません。

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

図7.106 コンテナ内にコピーされないことを示すマーク


7.9.6. Armadillo に転送するディレクトリ及びファイル

コンテナイメージ以外に、以下に示すディレクトリやファイルを Armadillo に転送します。 ここでは、プロジェクト名は my_project としています。

Armadillo に転送するディレクトリ及びファイル
  • my_project/app/build
  • my_project/app/lib

7.9.7. Armadillo 上でのセットアップ

7.9.7.1. アプリケーション実行用コンテナイメージのインストール

「アプリケーション実行用コンテナイメージの作成」 で作成した development.swu「SWU イメージのインストール」 を参照して Armadillo へインストールしてください。

インストール後に自動で Armadillo が再起動します。

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

VS Code 上で ABOSDE(Armadillo Base OS Development Environment) から、 ABOS Web が動作している Armadillo の一覧を確認し、 指定した Armadillo の IP アドレスを ssh 接続に使用することができます。 ただし、ATDE のネットワークを NAT に設定している場合は Armadillo がリストに表示されません。

図7.107「ABOSDE で ローカルネットワーク上の Armadillo をスキャンする」 の赤枠で囲われているボタンをクリックすることで、 ローカルネットワーク上で ABOS Web が実行されている Armadillo をスキャンすることができます。

images/abos-images/abos-web/abosde_monitor_welcome_page.png

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


図7.108「ABOSDE を使用して ssh 接続に使用する IP アドレスを設定する」 の赤枠で囲われているマークをクリックすることで、 指定した Armadillo の IP アドレスを ssh 接続に使用する IP アドレスに設定することができます。

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

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


図7.109「ABOSDE に表示されている Armadillo を更新する」 の赤枠で囲われているマークをクリックすることで、 ABOSDE に表示されている Armadillo を更新することができます。

images/abos-images/abos-web/abosde_monitor_rescan.png

図7.109 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

図7.110 ssh_config を編集する


1

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

[ティップ]

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

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

VS Code の左ペインの [my_project] から [App run on Armadillo] を実行すると、 実行ファイルや共有ライブラリを作成した後、アプリケーションが Armadillo へ転送されて起動します。

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

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


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

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

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


アプリケーションを終了するには VS Code の左ペインの [my_project] から [App stop on Armadillo] を実行してください。

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

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


7.9.8. SBOM 生成に関する設定

SWU イメージ作成時に、同時に SBOM を生成することができます。 詳細は 「SBOM 生成に関わる設定を行う」 を参照してください。

7.9.9. リリース版のビルド

ここでは完成したアプリケーションをリリース版としてビルドする場合の手順について説明します。

VS Code の左ペインの [my_project] から [Generate release swu] を実行すると、 リリース版のアプリケーションを含んだ SWU イメージが作成されます。 事前に 「SWUイメージの作成」 を参照して SWU の初期設定を行ってください。

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

図7.114 リリース版をビルドする


[注記]

リリース版の SWU イメージには、開発用の機能は含まれていません。 このため、リリース版の SWU イメージをインストールした Armadillo では、 [App run on Armadillo] を使用したリモート実行は使用できません。

7.9.10. 製品への書き込み

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

この SWU イメージを 「SWU イメージのインストール」 を参照して Armadillo へインストールすると、 Armadillo 起動時にアプリケーションも自動起動します。

7.9.11. Armadillo 上のコンテナイメージの削除

「コンテナとコンテナに関連するデータを削除する」 を参照してください。

7.10. 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 は生成されません。 図7.115「mkswu バージョン確認コマンド」 を実行するとインストール済のバージョンが確認できます。

[ATDE ~]$ mkswu --version
mkswu バージョン 6.4

図7.115 mkswu バージョン確認コマンド


表示されない場合は mkswu がインストールされていませんので、図7.116「mkswu のインストール・アップデートコマンド」 を実行してインストールしてください。 mkswu をアップデートする場合もこちらを実行して下さい。

[ATDE ~]$ sudo apt update && sudo apt install mkswu

図7.116 mkswu のインストール・アップデートコマンド


python3-make-sbom パッケージがインストールされている場合、make_sbom.sh が実行可能です。 図7.117「make_sbom.sh 実行確認コマンド」 を実行して、ヘルプが表示されるかご確認ください。

[ATDE ~]$ make_sbom.sh -h

図7.117 make_sbom.sh 実行確認コマンド


表示されない場合は python3-make-sbom がインストールされていませんので、図7.118「python3-make-sbom のインストールコマンド」 を実行してインストールしてください。

[ATDE ~]$ sudo apt update && sudo apt install python3-make-sbom

図7.118 python3-make-sbom のインストールコマンド


7.10.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 ファイルを編集する」 をご覧ください。

7.11. 生成した SBOM をスキャンする

SBOM の利点のひとつに、スキャンツールに入力することでソフトウェアに含まれる脆弱性を検出することができる点が挙げられます。 ここでは、 Google が提供しているオープンソース SBOM スキャンツール OSV-Scanner[9] を用いて、開発したソフトウェアに既知の脆弱性が含まれているかを確認する方法を紹介します。

7.11.1. OSV-Scanner のインストール

以下の手順はすべて ATDE 上で行います。

OSV-Scanner は GitHub にてビルド済みの実行ファイルが配布されているのでそちらを使用します。 OSV-Scannerのリリースページから、最新の実行ファイル(osv-scanner_linux_amd64)をクリックしてダウンロードしてください。

images/abos-images/download-osv-scanner.png

図7.119 OSV-Scanner の実行ファイルをダウンロード


次に、図7.120「OSV-Scanner をインストールする」のコマンドを実行することで、 OSV-Scanner がインストールされます。

[ATDE ~]$ sudo install ~/ダウンロード/osv-scanner_linux_arm64 /usr/local/bin/osv-scanner

図7.120 OSV-Scanner をインストールする


osv-scanner --help コマンドを実行して、正しくインストールされていることを確認してください。

[ATDE ~]$ osv-scanner --help
NAME:
   osv-scanner - scans various mediums for dependencies and checks them against the OSV database

USAGE:
   osv-scanner [global options] command [command options]

VERSION:
   1.9.1

COMMANDS:
   scan     scans various mediums for dependencies and matches it against the OSV database
   fix      [EXPERIMENTAL] scans a manifest and/or lockfile for vulnerabilities and suggests changes for remediating them
   help, h  Shows a list of commands or help for one command

GLOBAL OPTIONS:
   --help, -h     show help
   --version, -v  print the version

図7.121 OSV-Scanner がインストールされたことを確認する


これで OSV-Scanner のインストールが完了しました。

7.11.2. OSV-Scanner でソフトウェアの脆弱性を検査する

図7.122「OSV-Scanner を用いて SBOM をスキャンする」に示すコマンドを実行することで、ソフトウェアに含まれる既知の脆弱性を検出します。 ここでは例として ABOSDE で開発したアプリケーションの SBOM をスキャンします。 SBOM 生成については 「SWU イメージと同時に SBOM を作成する」 を参照してください。

[ATDE ~]$ osv-scanner scan --sbom ~/my_project/development.swu.spdx.json --format markdown 1
Scanned /home/atmark/my_project/development.swu.spdx.json as SPDX SBOM and found 97 packages
5 unimportant vulnerabilities have been filtered out.
Filtered 5 vulnerabilities from output
| OSV URL | CVSS | Ecosystem | Package | Version | Source |
| --- | --- | --- | --- | --- | --- |
| https://osv.dev/CVE-2022-3715 | 7.8 | Debian | bash | 5.1-2+deb11u1 | development.swu.spdx.json |
| https://osv.dev/CVE-2016-2781 | 6.5 | Debian | coreutils | 8.32-4 | development.swu.spdx.json |
| https://osv.dev/CVE-2021-33560 | 7.5 | Debian | libgcrypt20 | 1.8.7-6 | development.swu.spdx.json |
| https://osv.dev/CVE-2024-2236 |  | Debian | libgcrypt20 | 1.8.7-6 | development.swu.spdx.json |

図7.122 OSV-Scanner を用いて SBOM をスキャンする


1

今回は見やすさのために format を markdown に設定しています

上記の例では、 development.swu に含まれるソフトウェアから既知の重要な脆弱性が5件検出されました。 OSV URL 列の URL にアクセスすることで各脆弱性の詳細を確認することができます。

7.12. システムのテストを行う

Armadillo 上で動作するシステムの開発が完了したら、製造・量産に入る前に開発したシステムのテストを行ってください。

テストケースは開発したシステムに依ると思いますが、 Armadillo で開発したシステムであれば基本的にテストすべき項目について紹介します。

7.12.1. ランニングテスト

長期間のランニングテストは実施すべきです。

ランニングテストで発見できる現象としては、以下のようなものが挙げられます。

  • 長期間稼働することでソフトウェアの動作が停止してしまう

    開発段階でシステムを短い時間でしか稼働させていなかった場合、長期間ランニングした際になんらかの不具合で停止してしまう可能性が考えられます。

    開発が完了したら必ず、長時間のランニングテストでシステムが異常停止しないことを確認するようにしてください。

    コンテナの稼働情報は podman stats コマンドで確認することができます。

  • メモリリークが発生する

    アプリケーションのなんらかの不具合によってメモリリークが起こる場合があります。

    また、運用時の Armadillo は基本的に overlayfs で動作しています。 そのため、外部ストレージやボリュームマウントに保存している場合などの例外を除いて、動作中に保存したデータは tmpfs (メモリ)上に保存されます。 よくあるケースとして、動作中のログなどのファイルの保存先を誤り、 tmpfs 上に延々と保存し続けてしまうことで、メモリが足りなくなってしまうことがあります。

    長時間のランニングテストで、システムがメモリを食いつぶさないかを確認してください。

    メモリの空き容量は図7.123「メモリの空き容量の確認方法」に示すように 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

    図7.123 メモリの空き容量の確認方法


7.12.2. 異常系における挙動のテスト

開発したシステムが、想定した条件下で正しく動作することは開発時点で確認できていると思います。 しかし、そのような正常系のテストだけでなく、正しく動作しない環境下でどのような挙動をするのかも含めてテストすべきです。

よくあるケースとしては、動作中に電源やネットワークが切断されてしまった場合です。

電源の切断時には、 Armadillo に接続しているハードウェアに問題はないか、電源が復旧した際に問題なくシステムが復帰するかなどをよくテストすると良いです。

ネットワークの切断時には、再接続を試みるなどの処理が正しく実装されているか、 Armadillo と サーバ側でデータなどの整合性が取れるかなどをよくテストすると良いです。

この他にもシステムによっては多くの異常系テストケースが考えられるはずですので、様々な可能性を考慮しテストを実施してから製造・量産ステップに進んでください。

7.13. ユーザー設定とユーザーデータを一括削除する

ユーザー設定とユーザーデータを一括削除することができます。 ユーザー設定の削除では 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.

図7.124 削除されるユーザー設定とユーザーデータを確認


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!

図7.125 実際にユーザー設定とユーザーデータを削除する


コマンド実行後は自動的に Armadillo が再起動します。

ABOS Web または Rest API から実行することもできます。 ABOS Web から実行する場合は 「ユーザー設定とユーザーデータの削除」 を参照してください。 Rest API から実行する場合は 「Rest API : ユーザー設定とユーザーデータの管理」 を参照してください。

[注記]

再起動後、再び設定が必要な場合は ABOS Web や REST API を使用して行ってください。 特に Armadillo Twin を利用している場合は、必ずネットワークの再設定を行ってください。



[8] 特権ユーザーで GUI ログインを行うことはできません