Armadillo Base OS搭載製品で製品化する際にはmake-installerで量産用のインストールディスクを作成し、
それを使ってeMMCに書き込む事を推奨しております。
しかし、インストールディスクを使用できない場合にはswupdateでアップデートする事で書き込みを
行う事が出来ますので、本ブログではその手順を紹介します。(注意点がございますので下記熟読下さい)
注意事項
Armadillo Base OSはOSやブートローダー、コンテナは2面化管理されており、swupdateを使って
アップデートを行うと、アップデート分は現在使用していない面にコピーされます。
しかし、意図せずロールバックが発生してしまうと前のバージョンに戻ってしまい、出荷状態に戻る可能性が
ある為、この2面とも同じデータとすることで仮にロールバックしても安全な状態にしておく必要があります。
swupdateで2面書き込む方法
ここでは説明する上で、出荷状態をA面とし、もう一方をB面と仮に呼びます。
一度目のアップデートでB面に書き込み、二度目のアップデートでA面に書き込みます。
実施手順
下記の手順で実行します。
1.initial_setup.descを作成する
2.開発済みの実機から各種ファイルを取得する
3.Armadillo Base OSを準備する
4.ブートローダーを準備する
5.アップデート用descファイルを作成し、swuを作成する
6.コピー用descファイルを作成し、swuを作成する
7.USBにswuファイルをコピーし、アップデート実行して書き込む
1.initial_setup.descを作成
ABOS Development Envirementで既にinitial_setup.swuを作成済みの場合は
mkswuインストール と mkswu--init 実行はスキップしてください。
ATDE環境で、mkswuをインストールします。
バージョンが古い場合はapt upgradeでアップグレード出来ます。
mkswuインストール [ATDE]$ sudo apt update && apt upgrade -y && apt install mkswu mkswu --init実行で署名ファイル等を作成する(詳細はマニュアル参照) [ATDE]$ mkswu --init [ATDE]$ ls ~/mkswu/initial_setup.desc initial_setup.desc
以上でinitial_setup.descが作成されました。
作成したファイルをアップデート用ディレクトリを作成し、コピーしておきます。
ここではファイル名は1_initial_setup.descとします。(頭の数字はアップデート順に影響します)
[ATDE]$ mkdir ~/mkswu/update_20230101 [ATDE]$ cp ~/mkswu/initial_setup.desc ~/mkswu/update_20230101/1_initial_setup.desc
2.開発済みの実機から各種ファイルを取得する
ここではArmadillo Base OSで開発したコンテナや独自に作成したファイル等を
メモリーカードにコピーします。
今回は例として以下をコピーします。実際には独自に作成/編集したファイル全てコピーします。
※コンテナイメージ以外はpersist_fileで保存したファイルが該当します。
・開発済みのコンテナイメージ
・コンテナのコンフィグファイル
・LTEのコネクションファイル
・swupdate_preserve_files(追記した場合のみ)
コピー先のUSBメモリをマウント(/dev/sda1は適宜調整) [Armadillo]# mount /dev/sda1 /mnt ◆開発済みのコンテナイメージをArmadilloからアーカイブとして保存 (コンテナイメージ名:test_image , タグ名:v1.0.0 , 保存ファイル名は任意) [Armadillo]# podman save -o /mnt/test_image_v1.0.0.tar test_image:v1.0.0 ◆コンテナのコンフィグファイルをコピー ここでは例としてtest.confをコピーする [Armadillo]# cp /etc/atmark/containers/test.conf /mnt ◆LTEや無線LANなどのコネクションファイルを保存(ここではLTEの例) [Armadillo]# cp /etc/NetworkManager/system-connections/gsm-ttyCommModem.nmconnection /mnt ◆swupdate_preserve_filesをコピー(上書き保護) ※本ファイルを編集した場合のみ(persist_file -p/-Pを使用した場合を含む) [Armadillo]# cp /etc/swupdate_preserve_files /mnt ファイル保存が終了したらUSBメモリのマウントを解除 [Armadillo]# umount /mnt ATDEにUSBメモリから各種ファイルをコピー [ATDE]$ sudo mount /dev/sdb1 /mnt //sdb1は適宜変更 [ATDE]$ cp /mnt/[各種ファイル名] ~/mkswu/update_20230101 [ATDE]$ sudo umount /mnt 《注意》 LTEやWifi等のコネクションファイルは権限を600に設定してください 600ではない場合、コネクションが正常に動作しません。 [ATDE]$ chmod 600 ~/mkswu/update_20230101/gsm-ttyCommModem.nmconnection
3.Armadillo Base OSを準備する
Armadillo Base OSは上記でコピーしたファイル以外に変更がない場合はビルドが不要ですので
ArmadilloサイトからArmadillo Base OSアーカイブをダウンロードします。
※独自にビルドする場合は製品マニュアル参照
Armadilloサイトで対象製品のTOPページから「技術情報・ダウンロード」>「ソフトウェア」>
「Armadillo Base OS」の順に開き、ATDEに「Armadillo Base OSアーカイブ」をダウンロードします。
Armadillo Base OSアーカイブのダウンロード [ATDE]$ wget -P ~/mkswu/update_20230101 [URL]
4.ブートローダーを準備する
ブートローダーは変更する必要がない場合はビルドが不要ですので、Armadilloサイトから
ブートローダーイメージファイルをダウンロードします。
※独自にビルドする場合は製品マニュアル参照
Armadilloサイトで対象製品のTOPページから「技術情報・ダウンロード」>「ソフトウェア」>
「ブートローダー」の順に開き、ATDEに「ブートローダーイメージ」をダウンロードします。
ブートローダーイメージのダウンロード [ATDE]$ wget -P ~/mkswu/update_20230101 [URL]
5.アップデート用descファイルを作成し、swuを作成する
アップデート用のSWUファイルを作成します。
ここでは以下を一括で書き込むようにします。署名情報は最後にマージします。
・署名情報(initial_setup.desc)
・Armadillo Base OS
・ブートローダー
・開発済みのコンテナイメージ
・コンテナのコンフィグファイル
・LTEのコネクションファイル
・swupdate_preserve_files
アップデート用descファイルを作成する [ATDE]$ cd ~/mkswu/update_20230101 [ATDE]$ vi tmp.desc #Armadillo Base OS swdesc_tar "baseos-x2-3.18.3-at.2.tar.zst" \ --version base_os 3.18.3-at.2 \ --preserve-attributes \ --install-if different #bootloader swdesc_boot imx-boot_armadillo_x2_2020.04-at16 #version swdesc_option component=extra_os.install version=1 #container & config file swdesc_embed_container "test_image_v1.tar" swdesc_files --extra-os \ --dest /etc/atmark/containers/ "test.conf" #LTE connection file swdesc_files --extra-os \ --dest /etc/NetworkManager/system-connections/ "gsm-ttyCommModem.nmconnection" #swupdate_preserve_files swdesc_files --extra-os \ --dest /etc/ "swupdate_preserve_files" 署名ファイル(initial_setup.desc)とアップデートファイル(tmp.desc)を結合してswuファイル作成 ※1つ目のファイル名に統合される [ATDE]$ mkswu 1_initial_setup.desc tmp.desc [ATDE]$ ls 1_initial_setup.swu 1_initial_setup.swu
6.コピー用descファイルを作成し、swuを作成する
ブートローダー、OS、コンテナについてアップデートが無い場合は現状の内容がアップデート先に
コピーされる為、これを利用して空のアップデートを行うswuを作成します。
POST_ACTIONは省略可能で、アップデート後にリブート(省略時)、パワーオフ、コンテナだけ再起動、
自動リブートしない(次回起動時に適用)を選択可能です。(詳細は製品マニュアル参照)
[ATDE]$ vi 2_copy.desc #version swdesc_option component=extra_os.install version=2 swdesc_option POST_ACTION=poweroff swdesc_command true [ATDE]$ mkswu 2_copy.desc [ATDE]$ ls 2_copy.swu 2_copy.swu
7.USBにswuファイルをコピーし、アップデート実行
作成した2つのSWUファイルをUSBメモリのTOP階層にコピー
[ATDE]$ sudo mount /dev/sdb1 /mnt [ATDE]$ cp 1_initial_setup.swu /mnt [ATDE]$ cp 2_copy.swu /mnt [ATDE]$ sudo umount /mnt
起動後(ログイン不要)のArmadilloにUSBメモリを挿入するとファイル名順に自動で書き込みが
スタートします。今回の場合swuファイルが2つの為、先に1_initial_setup.swuがアップデートされ、
再起動後に2_copy.swuがアップデートされます。
最後にPOST_ACTION=poweroffによりpoweroffすると書き込みが完了です。
アップデート完了後に/etc/sw-versionsを確認すると、descファイルで指定したバージョン名に
書き変わっている(=アップデートされている)事が分かります。
[Armadillo]# cat /etc/sw-versions base_os 3.18.3-at.2 other_boot 2020.4-at16 boot 2020.4-at16 extra_os.initial_setup 2 extra_os.install 2