Armadilloフォーラム

Armadillo-X1で、SD スロット拡張ボードがない場合の、カーネルが壊れた場合の復旧について

tsato_814

2022年6月17日 0時01分

お世話になります。
佐藤と申します。

当方では、Armadillo-X1 を使った IoT機器を生産させて頂いています。
カスタマイズされた、Linuxカーネルイメージを、
以下のようにして自社のwebサイトからダウンロードし、
書き換えています。

-------------------------------------------------------------
wget https://xxx.xxx/xxx/uImage -O /home/tmp/uImage
mount -t vfat /dev/mmcblk2p1 /mnt
cp /home/tmp/uImage /mnt/uImage
umount /mnt
-------------------------------------------------------------
(サイトのurlは伏せさせていただきました)

生産工場の都合により、ネットからは、
光回線 → ONU → 有線LAN → WiFiルータ → WiFi → PC → 有線LAN → Armadillo-X1
の経路でダウンロードしていますが、途中経路の不調により、
ダウンロードがうまくいかず、エラーとなった模様で
(なお、エラーとなった部分は、上記の前後にも数か所あったことを
実際に確認していますが、その際のログを保存しておらず、
記憶に頼っているのみです)、
それを気付かずにrebootしたところ、カーネルが壊れてしまったようで、
添付ファイルのようなメッセージが出力され、起動できませんでした。
(同様の現象が2台発生したため、1台目を「1台目の電源投入時画面出力.txt」、
2台目を「2台目の電源投入時画面出力.txt」としています。)

その対応として、
工場出荷イメージと同じイメージのインストールディスクイメージを作成し、
SDカードに書き込んで、インストールディスクを作り、ひとまず工場出荷状態に
復旧させてから、以降通常の作業することで、なんとかならないか、
と考えました。

ところが、Armadillo-X1 であるため、SDスロットがないわけですが、
動作する「SD スロット拡張ボード」も現在なくなってしまったため、
実際にはSDから復旧できない状況です。

U-Bootの環境変数のデフォルト値を変更することで、USBメモリから起動するように
変更する方法もある旨、拝見しましたが、
おそらく、あらかじめその変更をしていないと不可なのではと予想しています。

とりあえず、「SD スロット拡張ボード」を手配するよう動いていますが、
何か他に方法があるようでしたら、ご教示頂きたくお願い申し上げます。

なお、先程の画面出力の最後は、U-Boot コマンドプロンプトのようだったので、
試しに、各種U-Bootコマンドを入力した際の結果も、
「1台目のU-Bootコマンド入力時ログ.txt」と
「2台目のU-Bootコマンド入力時ログ.txt」に添付しておきます。

この際、helpコマンドを入力してみてわかったのですが、
「usbboot」というコマンドがあるらしいのですが、これを使ってUSBメモリから
インストールしたり、あるいはSDブートしたりできないか、
と淡い期待を抱いています。(「ums」コマンドも必要?)

コメント

at_akihito.irie

2022年6月17日 10時51分

入江です。

> 何か他に方法があるようでしたら、ご教示頂きたくお願い申し上げます。

カーネルイメージだけでしたら、以下の手順でUSBメモリ内のuImageを使用し
て(u-boot、dtb、rootfsはeMMC内のものを使用)起動できますのでお試しくだ
さい。

まず、適当なUSBメモリを用意します。
uImageが保存できればいいので容量は問いません。

そのUSBメモリをATDEなどでext4でフォーマットします。
以下はATDEに接続したUSBメモリが/dev/sdbとして認識された例です。
環境によって異なりますので、適宜読み替えてください。

[ATDE]$ sudo umount /dev/sdb[0-9] #マウントされていたらアンマウントします。
[ATDE]$ sudo mkfs.ext4 /dev/sdb1 #USBメモリの第1パーティションをext4でフォーマットします。

その後、sdb1にuImageを配置してください。

[ATDE]$ sudo mount /dev/sdb1 /mnt #USBメモリの第1パーティションを/mntにマウントします。
[ATDE]$ sudo uImage /mnt/ #起動できるuImageをUSBメモリに配置します。
[ATDE]$ sudo umount /mnt #USBメモリをアンマウントします。

USBメモリをArmadillo-X1に挿入し、u-bootで以下のコマンドを実行してください。
打ち間違いやすいのでコピーアンドペーストすることをおすすめします。

=> setenv loadimage ext4load usb 0:1 \${loadaddr} uImage
=> usb start
=> boot

これでuImageのみUSBメモリのものを使用して起動できるはずです。

起動したら、eMMC内のuImageを正しいものに書き換えて、USBメモリを抜いた
状態で正しく起動するかご確認ください。

上記手順ではsaveenvしていないので、次回起動時には環境変数は元に戻って
います。

tsato_814

2022年6月21日 17時15分

入江様

アドバイスありがとうございます。佐藤です。
急遽の出張が入ったため対応できず、返事が遅れてしまい、申し訳ありません。

ご教示して頂いた通りやってみましたが、うまくいきませんでした。

その際のログを添付します。

もしかしたら、カーネルイメージだけではなく、
他の部分も壊してしまっていた可能性もあります。

前回書き忘れましたが、X1の型番は、「AX1110-U01Z」(メモリ 1GB、WLAN コンボ搭載)です。
拡張ボードは載っていません。

ログで気になるのは、
Booting from net ...
となっていることですが、
「usb start」実行時のメッセージからすると、
USBの番号の指定が違うとか?よくわかりませんが。
あとは、
** Unable to read file boot.scr **
とありますが、これは前回添付したログにもあったので
関係ないかもしれません。

お手数をおかけしますが、もし何かわかればアドバイス頂けると助かります。

ファイル ファイルの説明
USBメモリからブート?した際のログ.txt