Armadilloフォーラム

A6E(AG6271)でのSDブートの実行方法について

uesugi

2023年11月29日 9時05分

お世話になっております。
SDブートが成功しない問題についてご相談をさせてください。

Armadillo 起動時にコンテナの外でスクリプトを実行したく、いくつか方法を試していたのですが、
起動時のソフトの自動実行によりコンソールが戻らず、ログインできなくなってしまいました。
SDブートにて復帰を図ろうとしているのですが、SDブートが完了せず、コンソールが戻りません。

以下手順を踏んでいるのですが、ブートディスクの作成やSDブートが完了しない原因についてお気づきの点等ありますでしょうか?
(ブートディスクの構成が表 6.27 microSD カードのパーティション構成になっていないことが原因かと考えていますが、以下手順を試してもrootfs_0以外の構成が生成されません。)
また、SDブート以外の方法で復帰する方法等ありましたらご教授いただければと思います。

①6.26.3. Alpine Linux ルートファイルシステムをビルドする : 1~4(3は実施していません)
②6.26.1. ブートローダーをビルドする : 1~3
③6.24.1. ブートディスクの作成 : 1~4
④6.24.2. SD ブートの実行

参考元:https://armadillo.atmark-techno.com/files/downloads/armadillo-iot-a6e/d…

ファイル ファイルの説明
Alpine Linux ルートファイルシステムをビルド-log.txt 「①6.26.3. Alpine Linux ルートファイルシステムをビルドする」ログ
u-boot.log 「④6.24.2. SD ブートの実行」ログ
ブートディスクの作成-log.txt 「③6.24.1. ブートディスクの作成 : 1~4」 ログ
ブートローダーをビルドする-log.txt 「②6.26.1. ブートローダーをビルドする : 1~3 」ログ
コメント

アットマークテクノの古賀です。

uesugiさん:
>SDブートが成功しない問題についてご相談をさせてください。

以下にコメントします。

>Armadillo 起動時にコンテナの外でスクリプトを実行したく、いくつか方法を試していたのですが、
>起動時のソフトの自動実行によりコンソールが戻らず、ログインできなくなってしまいました。

この時の状況について、確認させてください。
「いくつか方法を試していたのですが」ということですが、試していらしたのは、どういった内容でしょうか?
添付して頂いた、ブートディスクからの起動ログ(u-boot.log)を見ると、カーネル起動直後に

[    1.200695] rtc-rv8803 1-0032: hctosys: unable to read the hardware clock

というようなログが出ており、これが気になっています。
A6E 搭載の RTC からの日時読み出しにエラーしているようですが、このログは、通常出ないはずなのです。
A6E に搭載している I2C 接続の RTC との I2C 通信で、エラーが起きる状態なのかも知れません。

>SDブートにて復帰を図ろうとしているのですが、SDブートが完了せず、コンソールが戻りません。
>以下手順を踏んでいるのですが、ブートディスクの作成やSDブートが完了しない原因についてお気づきの点等ありますでしょうか?

ログを拝見したところ、手順に間違いは、なさそうです。
気になったのは、上述した、カーネル起動直後の RTC からの日時読み出しエラーのログくらいです。
ところで、

>(ブートディスクの構成が表 6.27 microSD カードのパーティション構成になっていないことが原因かと考えていますが、以下手順を試してもrootfs_0以外の構成が生成されません。)

パーティション構成については、問題なさそうです。
実は、ブートディスクイメージを書き込んでブートディスクを作成した直後は、rootfs_0 のパーティションしか存在しないのです。ブートディスクで起動すると、最初の起動の際の初期化処理で、残りのパーティションを作成する仕組みになっています。

>また、SDブート以外の方法で復帰する方法等ありましたらご教授いただければと思います。
>
>①6.26.3. Alpine Linux ルートファイルシステムをビルドする : 1~4(3は実施していません)
>②6.26.1. ブートローダーをビルドする : 1~3
>③6.24.1. ブートディスクの作成 : 1~4
>④6.24.2. SD ブートの実行
>
>参考元:https://armadillo.atmark-techno.com/files/downloads/armadillo-iot-a6e/d…

一点確認させてください。SW2 の設定を、microSD 側から eMMC 側に戻して eMMC ブートした場合、起動ログは、どのようになるでしょうか?
添付して頂いた SD ブートの起動ログでは、初期化処理が済んで自動リブートした後、つまり二回目のカーネルの起動で、以下のメッセージで止まっています:

Starting kernel ...
 
[    1.361864] rtc-rv8803 1-0032: hctosys: unable to read the hardware clock

もし、eMMC ブートの場合も同様であれば、「コンソールが戻らず」とおっしゃっているのは、SD ブートの場合と同じ要因の可能性があります。

アットマークテクノの古賀様

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

>この時の状況について、確認させてください。
>「いくつか方法を試していたのですが」ということですが、試していらしたのは、どういった内容でしょうか?

実は2台同じ状況に陥っていまして、試した方法は以下の2つになります。
やりたかったこと:無限ループするシェルスクリプトでファイルを監視し、内容の変化をキャッチしてBaseOS上からコマンドを実行したい
方法1:「6.22. Armadillo 起動時にコンテナの外でスクリプトを実行する」のlocal サービスの.startへシェルスクリプトを記載し起動
   →バックグラウンド実行になっておらず、起動処理でループに入りコマンド実行ができない
   (こちらがご相談させていただいたログの実機です。)

方法2:コンテナを自動起動する.confのset_commandへシェルスクリプト実行指示を記載
   →コンテナ起動に必要なシェルもあったため、新しくシェルスクリプトを作成し、「&」でつなげる形で2つのシェルを起動
   →もともとのコンテナが起動しなくなり、コマンド実行ができない状態に

どちらもSDブートで起動しようとしましたが、u-boot.logと同様の状態になります。

>A6E 搭載の RTC からの日時読み出しにエラーしているようですが、このログは、通常出ないはずなのです。
>A6E に搭載している I2C 接続の RTC との I2C 通信で、エラーが起きる状態なのかも知れません。
特にこの辺りは触っていない認識のため、出力している要因に心当たりがないような状態です。
関連があるかはわかりませんが、2台ともsimカードはさしていません。
上記2点の情報から、対応方法等ありますでしょうか?

>パーティション構成については、問題なさそうです。
>実は、ブートディスクイメージを書き込んでブートディスクを作成した直後は、rootfs_0 のパーティションしか存在しないのです。ブートディスクで起動すると、最初の起動の際の初期化処理で、残りのパーティションを作成する仕組みになっています。
無事作成ができているとのこと、安心いたしました。
ご回答ありがとうございます。

>一点確認させてください。SW2 の設定を、microSD 側から eMMC 側に戻して eMMC ブートした場合、起動ログは、どのようになるでしょうか?
>添付して頂いた SD ブートの起動ログでは、初期化処理が済んで自動リブートした後、つまり二回目のカーネルの起動で、以下のメッセージで止まっています:

以下がeMMC ブート時の起動ログです。同様のメッセージは出力されるのですが、問題なく次の処理へ進めているようです。
==============================================================================
Starting kernel ...
[ 1.371511] rtc-rv8803 1-0032: hctosys: unable to read the hardware clock
OpenRC 0.48 is starting up Linux 5.10.186-0-at (armv7l)
=============================================================================

ファイル ファイルの説明
Armadillo 起動時にコンテナの外でスクリプトを実行する.log 方法1のeMMC ブート実行ログ
自動起動用 conf ファイル書き換え.log 方法2のeMMC ブート実行ログ

アットマークテクノの古賀です。

uesugiさん:
>ご回答ありがとうございます。
>
>>この時の状況について、確認させてください。
>>「いくつか方法を試していたのですが」ということですが、試していらしたのは、どういった内容でしょうか?
>
>実は2台同じ状況に陥っていまして、試した方法は以下の2つになります。
>やりたかったこと:無限ループするシェルスクリプトでファイルを監視し、内容の変化をキャッチしてBaseOS上からコマンドを実行したい
>方法1:「6.22. Armadillo 起動時にコンテナの外でスクリプトを実行する」のlocal サービスの.startへシェルスクリプトを記載し起動
>   →バックグラウンド実行になっておらず、起動処理でループに入りコマンド実行ができない
>   (こちらがご相談させていただいたログの実機です。)
>
>方法2:コンテナを自動起動する.confのset_commandへシェルスクリプト実行指示を記載
>   →コンテナ起動に必要なシェルもあったため、新しくシェルスクリプトを作成し、「&」でつなげる形で2つのシェルを起動
>   →もともとのコンテナが起動しなくなり、コマンド実行ができない状態に

周辺機器制御は行わず、純粋にソフトウェア動作的なものだったということですね。

>>一点確認させてください。SW2 の設定を、microSD 側から eMMC 側に戻して eMMC ブートした場合、起動ログは、どのようになるでしょうか?
>>添付して頂いた SD ブートの起動ログでは、初期化処理が済んで自動リブートした後、つまり二回目のカーネルの起動で、以下のメッセージで止まっています:
>
>以下がeMMC ブート時の起動ログです。同様のメッセージは出力されるのですが、問題なく次の処理へ進めているようです。
>==============================================================================
>Starting kernel ...
>[ 1.371511] rtc-rv8803 1-0032: hctosys: unable to read the hardware clock
> OpenRC 0.48 is starting up Linux 5.10.186-0-at (armv7l)
>=============================================================================

この起動ログを見ると、OpenRC も起動していますので、SD ブートの場合とは違う振る舞いということで了解しました。

>どちらもSDブートで起動しようとしましたが、u-boot.logと同様の状態になります。

>>A6E 搭載の RTC からの日時読み出しにエラーしているようですが、このログは、通常出ないはずなのです。
>>A6E に搭載している I2C 接続の RTC との I2C 通信で、エラーが起きる状態なのかも知れません。
>
>特にこの辺りは触っていない認識のため、出力している要因に心当たりがないような状態です。
>関連があるかはわかりませんが、2台ともsimカードはさしていません。
>上記2点の情報から、対応方法等ありますでしょうか?

RTC のエラーメッセージは直接関係ないようですから、一旦保留にしますね。sim カードの装着有無は、関係ないと思います。

>>パーティション構成については、問題なさそうです。
>>実は、ブートディスクイメージを書き込んでブートディスクを作成した直後は、rootfs_0 のパーティションしか存在しないのです。ブートディスクで起動すると、最初の起動の際の初期化処理で、残りのパーティションを作成する仕組みになっています。
>
>無事作成ができているとのこと、安心いたしました。
>ご回答ありがとうございます。

microSD カードを Armadillo から外して ATDE でパーティション構成を見れば、マニュアル記載のものと同様になっていると思います。

さて、本題の SD ブートできない件ですが、ブートディスクイメージの作成手順を少し変えて作り直してみて頂けますか。
先のコメントを書く前に、お使いのものと同じバージョンの build-rootfs および u-boot を使い、以下の手順で作成したインストールディスクから問題なく起動できることは、確認していました:

1.) ルートファイルシステムアーカイブを build-rootfs でビルドせず、ビルド済みのものをダウンロードして使う
 https://armadillo.atmark-techno.com/resources/software/armadillo-iot-a6…
 ←このページの、「Armadillo Base OSアーカイブ」のリンク先の .zst をダウンロードしてください。

2.) u-boot イメージも、ビルド済みのものをダウンロードして使う
 https://armadillo.atmark-techno.com/resources/software/armadillo-iot-a6…
←このページの、「ブートローダー(UART3コンソール)」のリンク先のファイルをダウンロードしてください。

これらを使ってブートディスクイメージを作成する場合は、build_image.sh の --rootfs オプション引数で、ルートファイルシステムアーカイブを指定してください(※--rootfs オプションはマニュアルに記載していませんが、build_image.sh の -h が表示するヘルプには記載しています)。次のような感じです:

atmark@atde9:~/work/build-rootfs-v3.18-at.6$ sudo ./build_image.sh --board a6e --boot u-boot-aiotg-a6e-v2020.04-at20.imx --rootfs baseos-6e-3.18.4-at.6.tar.zst

もし、この手順で作成されたブートディスクでは正常に SD ブートできる場合は、正常にブートできなかった手順での再現確認を行ない、原因調査しますので。
お手数をかけまして恐縮ですが、どうぞ宜しくお願いします。

アットマークテクノ 古賀様
ご回答ありがとうございます。いただいた手順を元にSDブートを実施いたしました。

以下手順で実施しましたが、上記の内容と同じくSDブートは成功しませんでした。

ATDEでの実行手順のログと、実機でのu-bootログを添付させていただきます。
手順の誤りや他に改善するための方法、原因等はありましたらご教授いただきたいです。

実施した手順は以下の通りです。
①6.26.3. Alpine Linux ルートファイルシステムをビルドする : 1~2
②6.26.1. ブートローダーをビルドする : 1~2
③1.)「Armadillo Base OSアーカイブ」のリンク先の .zst をダウンロード
2.)「ブートローダー(UART3コンソール)」のリンク先のファイルをダウンロード
④6.24.1. ブートディスクの作成 :
1. ブートディスクイメージのビルドします:sudo ./build_image.sh --board a6e --boot u-boot-aiotg-a6e-v2020.04-at20.imx --rootfs baseos-6e-3.18.4-at.6.tar.zst
2~4の手順
⑤6.24.2. SD ブートの実行

また、少し話はずれてしまいますが、起動時のソフトの自動実行によりコンソールが戻らない問題は「3.2.6. インストールディスクを使用する」の
初期化インストールディスクの適用でも解消することができるものなのでしょうか?

お忙しいところ恐縮ですが、ご検討並びにご回答をよろしくお願いいたします。

ファイル ファイルの説明
u-boot_archive.log 実機でのu-bootログ
ブートローダーの作成_archive.txt ATDEでの実行手順のログ

アットマークテクノの古賀です。

uesugiさん:
>ご回答ありがとうございます。いただいた手順を元にSDブートを実施いたしました。
>
>以下手順で実施しましたが、上記の内容と同じくSDブートは成功しませんでした。

了解しました。ご確認有難うございます。

>ATDEでの実行手順のログと、実機でのu-bootログを添付させていただきます。
>手順の誤りや他に改善するための方法、原因等はありましたらご教授いただきたいです。

u-boot ログを見直して、原因が分かりました。前回のコメントを書く前にも同じ箇所を見てはいたのですが、気づいていませんでした。ごめんなさい。
原因は、マニュアルに注意書きで記載しています:

 WLAN 搭載モデルでは、SD コントローラ(uSDHC2) を WLAN/BT コンボモジュールが使用するため SD ブートができません。
 https://manual.atmark-techno.com/armadillo-iot-a6e/armadillo-iotg-a6e_p…

お使いの A6E は、WLAN 搭載モデルだと思いますが、合っているでしょうか?
いただいた u-boot ログを見ると、以下の行がありますので、そうだと思いますが、もし違っていたら、教えてください。

U-Boot 2020.04-at20 (Oct 24 2023 - 04:16:30 +0000)
 
CPU:   i.MX6ULL rev1.1 at 396 MHz
Model: Atmark Techno Armadillo-IoT Gateway A6E Board
...
Applying fdt overlay: armadillo-iotg-a6e-els31.dtbo
3038 bytes read in 18 ms (164.1 KiB/s)
Applying fdt overlay: armadillo-iotg-a6e-lwb5plus.dtbo  ★
...

上に引用したログの ★ の行で、u-boot が WLAN/BT コンボモジュール用の .dtbo を適用しています。

WLAN 搭載モデルでは microSD カードをストレージとして使用できないため、ブートディスクでの初回起動時に行う、パーティション作成などの初期化処理と u-boot の起動までは動作するものの(※初回起動時は、WLAN/BT コンボモジュール用の .dtbo を使う設定がなされていないため、初期化用の Base OS が問題なく動作します)、初期化処理が終わって自動再起動した際には、.dtbo の設定により WLAN/BT モジュールが有効となり、microSD カードを使用できない状態になるため、Linux カーネルの起動直後、microSD カード上のルートファイルシステムをアクセスした際にハングアップしてしまう、という状況になります。

というわけで、WLAN 搭載モデルで SD ブートするには、WLAN/BT コンボモジュール用の .dtbo を無効にしなければいけません。
これについては、以下の「microSDカードが認識されない。」という質問に対する回答を参考にしてくださいませ:
 https://armadillo.atmark-techno.com/forum/armadillo/17770#comment-14753

A6E から、初期化処理が行われた microSD カードを取り出し、PC に接続して ATDE で rootfs_0 のパーティションをマウントしたあと、[マウントポイント]/boot/ にある overlays.txt の内容を編集して armadillo-iotg-a6e-lwb5plus.dtbo の記載を削除すれば、その microSD カードで SD ブートできるようになると思います。

お手数をかけまして恐縮ですが、どうぞ宜しくお願いします。

アットマークテクノ 古賀様
ご回答ありがとうございます。

>u-boot ログを見直して、原因が分かりました。前回のコメントを書く前にも同じ箇所を見てはいたのですが、気づいていませんでした。ごめんなさい。
>原因は、マニュアルに注意書きで記載しています:

> WLAN 搭載モデルでは、SD コントローラ(uSDHC2) を WLAN/BT コンボモジュールが使用するため SD ブートができません。
> https://manual.atmark-techno.com/armadillo-iot-a6e/armadillo-iotg-a6e_p

>お使いの A6E は、WLAN 搭載モデルだと思いますが、合っているでしょうか?
>いただいた u-boot ログを見ると、以下の行がありますので、そうだと思いますが、もし違っていたら、教えてください。

ご指摘していただいた通り、WLAN 搭載モデルでした。
確認が足りておらず、大変申し訳ありません。

>A6E から、初期化処理が行われた microSD カードを取り出し、PC に接続して ATDE で rootfs_0 のパーティションをマウントしたあと、[マウントポイント]/boot/ にある overlays.txt の内容を編集して armadillo-iotg-a6e-lwb5plus.dtbo の記載を削除すれば、その microSD カードで SD ブートできるようになると思います。
記載していただいたように、初回起動後microSDカードのrootfs_0 のパーティションの/boot/overlays.txtの記載を修正したところ、
無事SDブートが完了し、ログインすることができました。

そこから、問題となっていた自動起動スクリプトを修正することができ、
通常起動時のソフトの自動実行もログインすることができました。

解決方法をご教授いただきありがとうございました。