Armadilloフォーラム

初期化について

yasuda0108

2022年9月20日 17時34分

お世話になっております。

Armadillo-G4用のソフト(Uboot変更/コンテナ自動起動)を作成し、.swuにてアップデート後しばらく運用しておりました。

#起動時メッセージ
U-Boot SPL 2020.04-gk_v0106 (Jul 07 2022 - 14:19:18 +0900)
DDRINFO: start DRAM init
DDRINFO: DRAM rate 4000MTS
DDRINFO:ddrphy calibration done
DDRINFO: ddrmix config done
Normal Boot
Trying to boot from BOOTROM
image offset 0x0, pagesize 0x200, ivt offset 0x0
NOTICE:  BL31: v2.4(release):
NOTICE:  BL31: Built : 13:23:57, Jul  7 2022

あるとき、起動してみるとArmadillo-G4が下記の通り初期化したような状態になっておりました。

#起動時メッセージ
U-Boot SPL 2020.04-at6 (Mar 25 2022 - 08:09:26 +0000)
setup_rtc_disarm_alarm: Can't find device id=0x32
DDRINFO: start DRAM init
DDRINFO: DRAM rate 4000MTS
DDRINFO:ddrphy calibration done
DDRINFO: ddrmix config done
Normal Boot
Trying to boot from BOOTROM
image offset 0x0, pagesize 0x200, ivt offset 0x0
NOTICE:  BL31: v2.4(release):lf-5.10.y-1.0.0-0-gba76d337e
NOTICE:  BL31: Built : 03:47:11, Dec 21 2021
 
#swversion
armadillo:~# cat /etc/sw-versions
base_os 3.15.4-at.6
boot 2020.04-at6

再度.swuにてアップデートすると、元通りに戻せたのですが、突然初期化してしまった原因が不明です。
何か想定される原因はわかりますでしょうか?

尚、外部から電気的に接続があるのは、電源/GPIO/UART/LVDSのラインで、特に通常運用時から変わったことはしていない認識です。
下記リンク先の初期化フローを実施しているわけでもございません。
https://manual.atmark-techno.com/armadillo-iot-g4/armadillo-iotg-g4_pro…

コメント

at_ohsawa

2022年9月20日 17時49分

rollbackされたのだと思います。
テスト等で、Linuxが起動を完了する前にDC12Vを切る、あるいはコンセントを抜く等の
操作を複数回実行したことはないでしょうか。

そのとき、3回以上起動が完了できない場合は、起動不能なソフトウェアを書かれたと判断して、
アップデートができる状態に入るためにアップデート前の状態にロールバックします。

既に、状態が発生した後にもう一度アップデートしてしまっているので、確かめられないのですが
もし次に発生したときは、そのままswuを適用する前に、abos-ctrlコマンドを実行して出力される
rollback-statusの表示を確認してみてください。
ロールバックされた場合は、rollback-statusがoptimalではなくrollbackとなります。

yasuda0108

2022年9月21日 8時02分

ご回答ありがとうございます。
こちらのrollback機能を停止する方法がありましたら、お教えください。

at_dominique.m…

2022年9月21日 9時04分

yasuda0108さん

マルティネです。お世話になっています。

この度 rollback 機能でご迷惑をおかけしまして申し訳ございませんでした。

停止する方法を説明する前に、いくつかの説明と注意点を伸ばせていただきます。

大澤さんが書いた通り、u-boot の起動から linux の起動までに連続で3回電源が落とすと rollback が発生します。
それの他に、fdt ファイル (/boot/armadillo.dtb) か linux イメージ(/boot/Image)が読めない状態になっていた場合にも rollback します。

現在のバージョンではログで判別できませんが、rollback したこと自体は /var/at-log/atlog で確認できると思います。

 

それで注意点がいくつかあります:
- rollback を完全に無効化してしまって、起動できない swu をインストールしてしまうとリモートでの回復ができなくなります。
- 「3回起動できなかった時のrollback」だけでもを無効化しても故障の可能性があります(データ化けで linux イメージを読めましたが、途中までできなかったなどの問題)が、アップデートからイメージがなかった場合の rollback だけをのこせばある程度の故障を回避できます。

予定ではアップデートをインストールした後に動作確認ができてから現在のシステムを予備のシステムにクローンすることを推奨しますが、この機能をテストする時間がまだとっていないのでまだご案内できません。
そうすれば、rollback が起動しても同じ動作確認済みのバージョンに戻るだけですので、一番安全だと思っています。
よろしければ今月のアップデートに preview版として追加できますが、いかがでしょうか?

 

それでは、無効化する方法を説明します。mkswu/baseos のバージョンによって、いくつかの方法があります:
- mkswu 4.4 と baseos 3.16.1-at.2 以上でしたら、/boot/uboot_env.d/ に変数ファイルで変更できます。

armadillo:~# cat /boot/uboot_env.d/norollback
# この変数で「3回失敗したらrollbackする」を無効化します
upgrade_available=
# この変数で「起動完全にできてない時の rollback」を無効化します
rollback_mmc=

このファイルが swupdate の再に適用されますので、手動で追加する場合には「fw_setenv -s /boot/uboot_env.d/norollback」で適用してください。
- 以前のバージョンの場合には uboot の変数を管理する機能がまだなかったので、変わりに自分で起動する度に「fw_setenv upgrade_available」で変数を削除することがでいます。

説明が長くなりましたが、何か不明な点があれば何でも聞いてください。

よろしくお願いします。

yasuda0108

2022年9月21日 9時44分

ご回答ありがとうございます。

> 現在のバージョンではログで判別できませんが、rollback したこと自体は /var/at-log/atlog で確認できると思います。
→確認致します。

> それで注意点がいくつかあります:
> - rollback を完全に無効化してしまって、起動できない swu をインストールしてしまうとリモートでの回復ができなくなります。
→こちらは、SDカード経由でしたら初期化可能の認識でよろしいでしょうか。

> 予定ではアップデートをインストールした後に動作確認ができてから現在のシステムを予備のシステムにクローンすることを推奨しますが、この機能をテストする時間がまだとっていないのでまだご案内できません。
> そうすれば、rollback が起動しても同じ動作確認済みのバージョンに戻るだけですので、一番安全だと思っています。
> よろしければ今月のアップデートに preview版として追加できますが、いかがでしょうか?
→ありがとうございます。よろしくお願いいたします。

> それでは、無効化する方法を説明します。mkswu/baseos のバージョンによって、いくつかの方法があります:
> - mkswu 4.4 と baseos 3.16.1-at.2 以上でしたら、/boot/uboot_env.d/ に変数ファイルで変更できます。
>

> armadillo:~# cat /boot/uboot_env.d/norollback
> # この変数で「3回失敗したらrollbackする」を無効化します
> upgrade_available=
> # この変数で「起動完全にできてない時の rollback」を無効化します
> rollback_mmc=
> 

> このファイルが swupdate の再に適用されますので、手動で追加する場合には「fw_setenv -s /boot/uboot_env.d/norollback」で適用してください。
> - 以前のバージョンの場合には uboot の変数を管理する機能がまだなかったので、変わりに自分で起動する度に「fw_setenv upgrade_available」で変数を削除することがでいます。
→ありがとうございます。
 以前のバージョンで、”変わりに自分で起動する度に「fw_setenv upgrade_available」で変数を削除”とありますが、具体的にどのようにすれば毎回起動時に自動的に削除できますでしょうか。

以上よろしくお願いします。

at_dominique.m…

2022年9月21日 10時13分

> > それで注意点がいくつかあります:
> > - rollback を完全に無効化してしまって、起動できない swu をインストールしてしまうとリモートでの回復ができなくなります。
> →こちらは、SDカード経由でしたら初期化可能の認識でよろしいでしょうか。

はい、SDカードやシリアルコンソールで復帰可能です。

> > 予定ではアップデートをインストールした後に動作確認ができてから現在のシステムを予備のシステムにクローンすることを推奨しますが、この機能をテストする時間がまだとっていないのでまだご案内できません。
> > そうすれば、rollback が起動しても同じ動作確認済みのバージョンに戻るだけですので、一番安全だと思っています。
> > よろしければ今月のアップデートに preview版として追加できますが、いかがでしょうか?
> →ありがとうございます。よろしくお願いいたします。

了解しました、今月のリリースを公開したら手順をこちらで説明します。

> > - 以前のバージョンの場合には uboot の変数を管理する機能がまだなかったので、変わりに自分で起動する度に「fw_setenv upgrade_available」で変数を削除することがでいます。
> →ありがとうございます。
>  以前のバージョンで、”変わりに自分で起動する度に「fw_setenv upgrade_available」で変数を削除”とありますが、具体的にどのようにすれば毎回起動時に自動的に削除できますでしょうか。

Base OS の起動スクリプトにこのコマンドを実行するだけですので、例えば以下のコマンドで3回起動の失敗の方の対応が無効になります。(swuで搭載したい場合には swdesc_files だけでもいいです)
ただし、新しいバージョンの対応と違ってこの変数は再起動した後にしか使えませんので、ブートローダーを含むswuをインストールすぐ後の再起動にはまだ影響がありません。ブートローダーをアップデートしない限りは問題ないですので、アップグレードするまでのワークアラウンドとして考えてください。

armadillo:~# vi /etc/local.d/norollback.start
#!/bin/sh
fw_setenv upgrade_available
armadillo:~# chmod +x /etc/local.d/norollback.start
armadillo:~# persist_file -v /etc/local.d/norollback.start
'/etc/local.d/norollback.start' -> '/mnt/etc/local.d/norollback.start'

よろしくお願いします