Armadilloフォーラム

SDブート用のマイクロSDカードを作成したがSDブートせずeMMCブートになる。

sawadamasanori

2021年6月10日 14時04分

 澤田と申します。たびたび恐縮です。

 SDブートが必要なため「Armadillo-IoT ゲートウェイ A6 製品マニュアル」第16章に従って手順通りにSDカードを作成し、スライドスイッチもSDブート側にしてからパワーオンしましたが、複数回試しましたが、どうしてもeMMCブートになってしまいました。

 本日(2021/6/10)の時点で最新版のファイルを「Armadilloサイト - Armadillo-IoT Gateway A6 ソフトウェアダウンロード」から取得し、SDブート用のマイクロSDカード作成手順においては製品マニュアルの記載と完全に一致したアウトプットが現れることを確認しながら作成しました。

 このSDブート用に作成したマイクロSDカードをA6本体のマイクロSDスロットにセットし、スライドスイッチをSDブート側にしてからA6の電源を投入しますとeMMCブートになってしまいましたが、そのままコンソールにてrootユーザーでA6にログインし、SDカードをmountし、SDカードの中身をlsコマンドで確認したとき、次のような出力になりました。

/dev/mmcblk1p1 on /root/sdb type vfat (rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=iso8859-1,shortname=mixed,utf8,errors=remount-ro)
/dev/mmcblk1p2 on /root/sd type ext4 (rw,relatime,data=ordered)
root@armadillo:~# ls *
sd:
bin dev home lost+found mnt proc run srv tmp var
boot etc lib media opt root sbin sys usr

sdb:
'System Volume Information'

 eMMCブートした状態のA6本体からSDカードがマウントできて中身も確認できたので、マイクロSDカードのハードウェア部分での取り扱いには誤りが無いと思いますが、A6のブート時、どうやらマイクロSDカードの先頭パーティションに設置したはずのブートローダーをA6が読みに行ってくれていない感じを受けました。トラブルシューティングで行き詰まってしまいました。

 もし同様の問題を御経験の方、原因にお心当たりのある方、A6におけるSDブートの成功体験のある方から、何らかの御指南を頂けますと大変ありがたいです。

 何卒宜しくお願い致します。

コメント

 澤田です。御判断いただく際の材料になるかどうか、わからないのですが、SDカードには2GBの容量のSD規格のマイクロSDカードを用いました。かなり規格としては古いカードだと思います。

 またATDEを動かす環境としてはVMware play とVirtualBoxの両方で試しました。
 別途、CentOS Linuxマシンを用いてパーティション作成、ファイルシステム作成、ddコマンドによるイメージの書き込み、ルートファイルシステム及びカーネルイメージ、dtbファイル格納を行い作成したブート用マイクロSDカードをA6にセットして、A6のSDブートを試すこともしました。
 一通り、上手く行きませんでした。 これからUSBブートであればうまく行くかどうかについてテストします。

 今後もトラブルシューティングは続けますので、必要を感じたら追記させて頂きます。

 澤田です。追加情報を記入させて頂きます。

 USBブートを試みたところ難なく成功しました。
 そこで、改めてSDブートがうまく行かない原因についてトラブルシューティング中です。

 2021年5月末にアップデートがあったので、6月3日にeMMCの書き換えを実施しました。
 その時、「Armadillo-IoT ゲートウェイ A6 製品マニュアル 12章 12.1インストールディスクを使用する」 の記述に従い、

 install-disk-sd-buster-aiota6-[version].img

 というファイルを https://armadillo.atmark-techno.com/armadillo-iot-a6/resources/software の中から探したのですが、見つからず、

 install-disk-buster-aiota6-20210531.img

 というファイルを使ってeMMCの書き換えに用いました。間に「-sd」の文字が抜けていましたが、6月3日当時には、そのことに気づかないまま作業してしまいました。
 そのまま 12.1.2 の記述に従いeMMCの上書を実施したところ、作業は順調に進み、最後にコンソールにおいて

 Install Completed!!

 の表示が得られ、そのあとeMMCブートにも無事成功しました。
 この作業の前にはSDブートについてテストしてはいないため、比較対象はできないのですが、どうもここが気になります。

 理想的には製品マニュアルで指定されたとおり install-disk-sd-buster-aiota6-[version].img という名前のルールに従ったファイル名を持つものがあればよかったのですが、今日も探したところ見つかりません。
 もし必要があれば、今からA6のeMMCを適切なイメージファイルで再構築したいと思っています。

  install-disk-sd-buster-aiota6-[version].img という名前つけ規約に従ったファイルのありかについて教えて頂けますと非常に助かります。

 以上です。どうぞよろしくお願いします。

at_keitaro.takahashi

2021年6月10日 17時29分

高橋です。
インストールディスクのファイル名がマニュアルと異なる件については、マニュアル側の記載ミスとなります。
次回のアップデートで修正いたします。ご迷惑をお掛けし申し訳ありません。

SDブートが行えない問題についてですが、以下の点を確認していただいてもよろしいでしょうか
・ダウンロードしたu-bootのチェックサムが、ダウンロードページのmd5と一致するか(md5sum u-boot-a600-console-uart3-v2018.03-at8.imxで確認できます)
・使用したSDカードとは別のSDカードを使用しても同様の問題が発生するか

同様の問題が発生する場合は、お手数ですが「SDブート用のSDカードを作成するために使用したコマンドとコマンド結果」及び「問題が発生した際のArmadilloの起動ログ」をコピーして添付いただけますでしょうか。

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

高橋様

 澤田です。有難うございます。御対応頂き感謝申し上げます。

 御指摘頂いたチェック項目のうち、ダウンロードしたファイルについてはmd5sumコマンドを用いて確認し、ダウンロードページのmd5と一致することを確認しました。
 また、同じ種類の2枚のマイクロSDカードを用いてテストした結果、どちらのマイクロSDカードであってもSDブートに失敗しました。

 そこで、ATDE環境における「SDブート用のSDカードを作成するために使用したコマンドとコマンド結果」及び「問題が発生した際のArmadilloの起動ログ」を記録したテキストファイルを作成しましたので添付させて頂きます。

 御忙しい中御対応頂き、大変恐縮です。御指南頂けますと大変有り難く存じます。

 澤田 拝

ファイル ファイルの説明
sdboot_making_log.txt SDブート用のSDカードを作成したときの作業記録と、そのSDカードを用いてSDブートを試みた時のA6からの出力記録。

at_keitaro.takahashi

2021年6月11日 17時55分

高橋です。

本件ですが、ダウンロードページで公開しているu-boot及びマニュアルの記載に誤りがありました。
現在公開しているu-bootでは、スライドスイッチの切り替えによるSDブートを行うことができません。

SDブートに対応したu-bootを添付いたしますので、お手数ですがそちらをご使用いただくようお願いいたします。
度々ご迷惑をお掛けし、誠に申し訳ありません。
現在公開中のファイルについては次回のアップデートで修正を行います。
よろしくお願いいたします。

ファイル ファイルの説明
u-boot-uart3-sdboot.zip

高橋様

 澤田です。有難うございます。迅速な御対応を頂き、本当に助かります。
 この「u-boot-uart3-sdboot.zip」ファイルを解凍して得られるimgファイルを、SDブート用のSDカードに書き込むブートローダーとしてテストさせて頂きます。
 今後とも何卒お願い申し上げます。心より感謝します。

 澤田 拝

 澤田です。テストの結果、無事SDブートについて成功しました。皆様に感謝申し上げます。有難うございました。

 別件ですが、先月末のアップデートの後に、eMMCのイメージを更新してから、eMMCブートをテストした時に気付いたのですが、rootユーザーでログインしてからA6の電源オフのためhaltコマンドを実行したとき、 /sbin にパスが通っていなかったので /sbin/halt と入力して電源オフしました。
 製品マニュアルはパスが通っている前提で記載されているものと思います。

 この件についてはユーザーが自分でパスを通すか、直接 /sbin の中のコマンドをフルパスで実行すればよいので情報共有の気持ちで書かせて頂きました。

 澤田 拝

高橋様

 澤田です。お手数をおかけします。御忙しいところ大変恐縮です。
 6/11にご提供いただきました「u-boot-uart3-sdboot.zip」を用いたところ、正常にSDブートに成功しました。SDブートした状態でopenssh-serverのインストールをしたところ、同じLAN上にあるWindowsマシンとA6の間を有線LANでつないだ状態で、SDブートしたA6にsshでログインできるようになりました。

 次に、現在公開されているブートローダーのソースを用いてビルドしてブートローダーイメージを作成し、SDブート用のSDカードにddコマンドを用いて書き込み、スライドスイッチをSDブート側に設定してSDブートをした結果、同じLAN上にあるWindowsマシンとA6の間を有線LANでつないだ状態で、SDブートしたA6にsshでログインできなくなりました。このときpingコマンドを用いるとA6から応答が得られました。

 ブートローダーのソースには
https://armadillo.atmark-techno.com/resources/software/armadillo-iot-a6…
 にある
u-boot-a600-v2018.03-at8.tar.gz
 を用いました。md5sumを用いてファイルの正常を確認しました。

 ブートローダーをビルドするとき、A6本体ののRS232Cコネクタにデータロガーを接続したい目的があったため、ブートローダーからのコンソール出力を止めるための作業を追加しました。
 フォーラムの
「Armadillo IoT A6 シリアルttymxc2をコンソール出力から外し汎用ポートとしたい」
https://armadillo.atmark-techno.com/forum/armadillo/9296
 をそのままなぞってブートローダーのコンフィグとビルドをしました。

 (LinuxカーネルイメージとDTBファイルのビルドにおいては、さらに「UART1 : /dev/ttymxc0 を使って外部機器と接続方法について」(https://armadillo.atmark-techno.com/forum/armadillo/9188)を参考にし、Linuxカーネルからのコンソール出力を止める作業を追加しました。)

 このようにビルドしたブートローダー、Linuxカーネルイメージ、DTBをSDカードに書き込んだ状態でA6をSDブートしたところ、最初に説明させて頂いた、pingで応答は返ってくるがsshはつながらない、という状態に至りました。(コンソール出力は止めることができました。)

 トラブルシューティングとして、SDカードのブートローダーだけは、6/11にご提供いただきました「u-boot-uart3-sdboot.zip」を用いて元に戻し、LinuxカーネルイメージとDTBは上記手順でビルドしたものをそのまま用いて、再度A6をSDブートしたところ、今度は外からsshでログインできるようになりました。

 もしかしてですが、現在公開されているブートローダーのソースコードか、私がブートローダーをビルドしたときの手順の中に、何らかのトラブル原因があったのかな?という思いを抱いております。

 そこで御願いなのですが、もし可能でしたら、6/11にご提供いただきましたブートローダーイメージ「u-boot-uart3-sdboot.zip」をビルドしたときの、ブートローダーのソースコードについて、何か手掛かりに繋がる情報を御案内頂けますと幸いです。

 以上です。どうぞよろしくお願いします。

at_keitaro.takahashi

2021年6月16日 17時03分

高橋です。
先日添付したu-bootについては、現状ソースコードを公開しておりません。
内容としては、公開済みの最新のブートローダーに添付のパッチを適用したものとなります。
(インストールディスクで使用しているブートローダーと同じものです)

パッチを適用した上でブートローダーのコンフィグとビルドを行っていただくと、想定通りの動作をするものと思われます。

>  このようにビルドしたブートローダー、Linuxカーネルイメージ、DTBをSDカードに書き込んだ状態でA6をSDブートしたところ、最初に説明させて頂いた、pingで応答は返ってくるがsshはつながらない、という状態に至りました。(コンソール出力は止めることができました。)

上記については、先述の通り現在公開しているブートローダーでは製品マニュアルの手順によるSDブートが行えないため、
SDカード内のカーネル、ユーザーランドではなくeMMC内のカーネル、ユーザーランド(openssh-serverがインストールされていない)が起動したものと思われます。

なお、ブートローダーのコンソールで以下の環境変数を設定することにより、現在公開中のブートローダーでもSDブートを行うことは可能です。

=> setenv bootcmd run setup_mmcargs\; ext4load mmc 1:2 \${loadaddr} /boot/uImage\; ext4load
mmc 1:2 0x83000000 /boot/a640.dtb\; bootm \${loadaddr} - 0x83000000\;
=> setenv setup_mmcargs setenv bootargs root=/dev/mmcblk1p2 rootwait \${optargs}\;
=> saveenv

設定した環境変数をデフォルトに戻すには以下を実行してください。

=> env default bootcmd setup_mmcargs
=> saveenv

お手数をお掛けし申し訳ありません。
以上、よろしくお願いいたします。

ファイル ファイルの説明
aiotg-a6_sdboot.patch

高橋様

 澤田です。無事、SDブートができました。心より感謝申し上げます。
 頂きましたパッチを適用したu-bootのソースをコンフィグし、ビルドしてSDブート用のSDカードに書き込み、SDブートしたところ無事成功しました。
 A6メインボードのRS232Cコネクタをコンソール以外の目的で使うために、ブートローダー及びLinuxカーネルからのコンソール出力を止めることにも成功しました。

 本当に有難うございました。