tishihara
2021年9月17日 13時55分
下記ブログを参考にして,Linux動作中のU-Bootパラメータ設定を試しています.
https://armadillo.atmark-techno.com/blog/53/3323
すると,下記のような動作となったのですが,何が原因なのか,どうすれば解消できるか等,ご教授頂けないでしょうか?
(1) fw_setenv後,U-Bootコマンドでsaveenvに失敗する
=> saveenv Saving Environment to SPI Flash... SF: Detected N25Q64 with page size 256 Bytes, erase size 64 KiB, total 8 MiB Erasing SPI flash...offset 0xe0000 is protected and cannot be erased Failed (-22) Saving Environment to SPI Flash... Erasing SPI flash...offset 0xe0000 is protected and cannot be erased Failed (-22)
(2) 2回目以降のfw_setenvが正常に動作しない
(一見正常に終了したように見えるが,反映されていない)
root@armadillo:~# fw_printenv mmcdev mmcdev=1 root@armadillo:~# fw_setenv mmcdev 0 root@armadillo:~# fw_printenv mc mcdev mmcdev=0 root@armadillo:~# fw_setenv mmcdev 1 root@armadillo:~# fw_printenv mmcdev mmcdev=0
【環境】
Armadillo-IoT G3 (AGX3000-C00Z)
※install_disk_sd_jessie_20200720_iotg3.imgによりインストール(Linux3.14で試したいため)
よろしくお願い致します.
コメント
at_koseki
古関です。
> (1) fw_setenv後,U-Bootコマンドでsaveenvに失敗する
こちらの環境でも再現しました。
> => sf probe
> => sf protect unlock 0xe0000 0x10000
上記だとunlockできないようです。
u-boot側のSPI Flashドライバーの実装が足りないのかもしれません。。
Linux側からmtd-utilsでunlockしてみると、
u-boot側からもsaveenvできるようになりました。
root@armadillo:~# apt-get install mtd-utils
root@armadillo:~# flash_unlock /dev/mtd0 0xe0000 1
... u-bootへ...
=> saveenv
> (2) 2回目以降のfw_setenvが正常に動作しない
環境も可能な範囲で合わせてみたのですが、
今のところこちらは再現できていません。
install_disk_sd_jessie_20200720_iotg3.imgで初期化
u-boot-toolsのバージョン
root@armadillo:~# dpkg -l |grep u-boot-tools
ii u-boot-tools 2014.10+dfsg1-5 armhf companion tools for Das U-Boot bootloader
tishihara
古閑さま
ご確認&ご回答,ありがとうございます.
> > (1) fw_setenv後,U-Bootコマンドでsaveenvに失敗する
>
> Linux側からmtd-utilsでunlockしてみると、
> u-boot側からもsaveenvできるようになりました。
ご教授頂いた手順で確認したところ,saveenv は OK となるのですが,Linux起動後に fw_printenv で確認すると,
値が反映されていないようです(saveenvも異様に早く終了する…).
=> setenv mmcdev 0 => saveenv Saving Environment to SPI Flash... Erasing SPI flash...Writing to SPI flash...done OK
... Linux起動 ...
root@armadillo:~# fw_printenv mmcdev mmcdev=1
また,その後,fw_setenv しても,値が反映されていないようです...
root@armadillo:~# fw_setenv mmcdev 0 root@armadillo:~# fw_printenv mmcdev mmcdev=1
再度,ご確認頂けないでしょうか?
> > (2) 2回目以降のfw_setenvが正常に動作しない
> 環境も可能な範囲で合わせてみたのですが、
> 今のところこちらは再現できていません。
インストールイメージ,u-boot-toolsのバージョンともに,こちらの環境と同じ同じでした.
root@armadillo:~# dpkg -l | grep u-boot-tools ii u-boot-tools 2014.10+dfsg1-5 armhf companion tools for Das U-Boot bootloader
上記以外で,こちらの環境で確認すべきことがありましたら,ご連絡をお願いいたします.
at_koseki
古関です。
ご確認ありがとうございます。
こちらの環境では問題なくsaveenvした値をfw_printenvで確認できました。
・kernelからfw_saveenv
・u-bootからsaveenvエラー
・kernelからflash_unlock
・u-bootからsaveenv OK
・u-bootからprintenv compare OK
・kernelからfw_printenv compare OK
症状に個体依存性はありますでしょうか?
(Armadillo-IoT G3の個体を変えても同様に問題が起こるか)
個体不良やSPI NOR FlashのErase回数による寿命の可能性を疑っています。
tishihara
古関さま
早々のご確認,ありがとうございます.
別のArmadillo-IoT G3(ただしAGX3020)で試してみた結果,一度目は値が反映されたのですが,その後は値が反映されませんでした.
また,fw_setenvについても値が反映されないことがありました.
/etc/fw_env.configと別Armadilloでの確認手順を添付しますので,何かまずい個所がありましたら,ご指摘頂けますでしょうか?
なお,saveenvがOKでfw_printenvの比較NGとなった個所に★,fw_setenvがOKでfw_printenv/printenvの比較NGとなった個所に☆を記載しています.
# Configuration file for fw_(printenv/saveenv) utility. # Up to two entries are valid, in this case the redundant # environment sector is assumed present. # # XXX this configuration might miss a fifth parameter for the "Number of # sectors" # MTD device name Device offset Env. size Flash sector size /dev/mtd0 0xe0000 0x2000 0x10000
ファイル | ファイルの説明 |
---|---|
別Armadilloでの確認.txt |
at_koseki
古関です。
こちらでも同様の手順を実施したところ
問題が再現できました。
個体依存やハードウェア故障ではなさそうです。
お手数をおかけし、申し訳ありません。
u-boot側からと、kernel側のu-boot-toolsの双方から
setenvすることで、SPI Nor Flashのセクタlock/unlock管理で
不整合が起きるソフトの問題ではと考えていますが、原因を特定できていません。
bootloaderとして書き込んでいるu-bootのベースバージョンが2016.07なのに対して、
debian jessie側のu-boot-toolsは2014.10をベースにしているのも気になっています。
u-boot動作中のenv値はRAM上でも保持しており、printenvはその値を表示しているようです。
saveenv実行のレスポンスが早いときは、
RAM -> SPI NOR Flashへのsyncができていないようです。
また、以下サイトの報告も気になっており、合わせて確認・調査中です。
https://community.nxp.com/t5/i-MX-Processors/i-MX6-Linux-fw-printenv-fw…
https://u-boot.denx.narkive.com/Yicy7TMV/between-2015-10-and-2016-01-sp…
tishihara
tishihara
at_koseki
tishihara
at_syunya.ohshio
大塩です。
返答が遅くなり大変申し訳ございません。
調査致しましたので、最初にいただいたご質問に回答いたします。
> 下記のような動作となったのですが,何が原因なのか,どうすれば解消できるか等,ご教授頂けないでしょうか?
> (1) fw_setenv後,U-Bootコマンドでsaveenvに失敗する
> (2) 2回目以降のfw_setenvが正常に動作しない
・原因について
上記現象は「fw_setenv
コマンド後に SPI Flash 全体が lock される」ことが原因です。
このため、fw_setenv
以降の saveenv
や fw_setenv
がエラーまたは反映されない状態になっていました。
この lock 処理は u-boot-tools の仕様です。
・解決方法について
以下コマンドで解決可能です。
flash_unlock /dev/mtd2
flash_unlock
コマンドの引数に、/dev/mtd2
を指定することで
SPI Flash 全体を unlock できます。
これにより SPI Flash の lock 箇所がなくなり、再度 fw_setenv
などが反映されるようになります。
以上を踏まえ、お客様が運用する上では
fw_setenv
コマンド後には必ず flash_unlock /dev/mtd2
を実行するようにしてください。
以上です。
tishihara
tishihara
at_koseki
2021年9月29日 22時06分
古関です。
Linux側からu-boot-toolsでsetenvすることで
SPI Flashのsectorがlockされたのかもしれません。
u-bootでunlockしてみるとどうなるか試していただけますでしょうか。
※ 申し訳ありません、こちらでまだ試していません。
=> sf probe
=> sf protect unlock 0xe0000 0x10000
=> saveenv