Armadilloフォーラム

netflashコマンドでのユーザーランド書き換え

hira

2022年8月8日 14時24分

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

Armadillo-440の製品にてhermitを使用しての書き換えは問題なく行えている状況です。
ただし、そのArmadilloに対しnetflashを利用して書き換えを行うとうまく動かなくなってしまいます。

詳細内容としては
1. 前提として「linux.bin.gz」、「romfs.img.gz」は正常に動くものです。
2. USBに上記の2ファイルを入れてArmadilloにさしています。
3. 「netflash -k -b -r /dev/flash/kernel /home/ftp/pub/images/linux.bin.gz」
  でカーネルの書き換えは問題ないように思います。
4. 「netflash -k -b -r /dev/flash/userland /home/ftp/pub/images/romfs.img.gz」
  を行うと再起動後、正常に動かなくなります。

「netflash -k -b -r /dev/flash/userland /home/ftp/pub/images/romfs.img.gz」
を行ったときは以下のようなログになっています。
.........................................................................................
netflash: got "/home/ftp/pub/images/romfs.img.gz", length=1914356
netflash: prograing FLASH device /dev/flash/userland
.......................................................................

その後に再起動すると
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(1,0)
のようになります。

そのようになったものはhermitで書き換えようとしたプログラムを書き込めば
正常に動くようにはなります。

お手数おかけいたしますが、
上記の状況から何かわかる点はございますでしょうか。

コメント

溝渕です。

> 上記の状況から何かわかる点はございますでしょうか。

以下試してみていただけますか?

* netflashのオプションに"-u"を追加
* 「ソフトウェアダウンロード」ページからダウンロードしたファイルでnetflash
* netflash実行前にUSBメモリ内イメージのmd5ハッシュをチェック(tftpサーバ内のイメージとmd5ハッシュを比較)

[Armadillo-440 ソフトウェアダウンロード]
https://armadillo.atmark-techno.com/armadillo-440/resources/software

お手数をお掛けしますが、宜しくお願いします。

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

> * netflashのオプションに"-u"を追加
状況は変わりません。
-u とはどのようなオプションでしょうか。

> * 「ソフトウェアダウンロード」ページからダウンロードしたファイルでnetflash
こちらが手間取っており、
netflashが正常に動いたように見えるのですが、
自作で入れているタスクが立ち上がっており、書き換えられていないような状況です。

また、hermitを使用し、すべてをブートローダー、カーネル、ユーザーランドを
すべてフラットなものに書き換えたところ、
Armadilloでログインができないようになっています。
こちらについてはもう少し調査しますが取り急ぎご報告です。

> * netflash実行前にUSBメモリ内イメージのmd5ハッシュをチェック(tftpサーバ内のイメージとmd5ハッシュを比較)
自作のものをUSBに入れて書き換えているので、比較ができない認識です。
自作のイメージでもなにかチェックするものはありますでしょうか。

お手数おかけいたしますが、ご確認のほどよろしくお願いします。

溝渕です。

> -u とはどのようなオプションでしょうか。

netflashのhelpに記載の通り、次のようなオプションです。
"-u unlock flash segments before programming"

> > * netflash実行前にUSBメモリ内イメージのmd5ハッシュをチェック(tftpサーバ内のイメージとmd5ハッシュを比較)
> 自作のものをUSBに入れて書き換えているので、比較ができない認識です。
> 自作のイメージでもなにかチェックするものはありますでしょうか。

比較の目的としては、USBメモリ内にあるイメージファイルの破損です。

比較の手順としては、まず、自作のイメージファイルが置いてある(ビルドした)PCでmd5ハッシュを計算します。

[pc]$ md5sum linux.bin.gz
[pc]$ md5sum romfs.img.gz

次にUSBメモリを接続した状態のArmadilloで、USBメモリ内の自作のイメージファイルのmd5ハッシュを計算します。

[armadillo]$ md5sum linux.bin.gz
[armadillo]$ md5sum romfs.img.gz

USBメモリにコピーしただけなので、それぞれのmd5ハッシュは同じになるはずです。もし、md5ハッシュが異なっている場合はファイルが破損しています。

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

コンパイルしたものとnetflash直前のハッシュ値は同一のものでした。

また、現在hermitで自作のものを書き込むと
起動時に以下のメッセージが出ています。

Checking config on: failed
WARNING: config region will be reinitialized.

また、ログインしたのちに何もしていない状況でも
udhcpc[1137]: Seing discover...
udhcpc[1137]: Sending discover...
udhcpc[1137]: Sending discover...
udhcpc[1137]: Seding discover.
と出ています。

この現象は最初は出ていなかったため、関係ないかもしれませんが報告になります。

よろしくお願いします。

netflashで書き換え後の再起動時のログは添付の通りになります。
お手数おかけいたしますが、よろしくお願いします。

ファイル ファイルの説明
起動時ログ.txt

溝渕です。

> コンパイルしたものとnetflash直前のハッシュ値は同一のものでした。

ご確認ありがとうございます。これでイメージファイルの破損ではないことが確認できました。

> また、現在hermitで自作のものを書き込むと
> 起動時に以下のメッセージが出ています。
>
> Checking config on: failed
> WARNING: config region will be reinitialized.

これは、現在実行していただいている、
* 「ソフトウェアダウンロード」ページからダウンロードしたファイルでnetflash
の結果との比較で切り分けができるかと思います。

イメージに問題があるのか、手順や環境に問題があるのかです。

> また、ログインしたのちに何もしていない状況でも
> udhcpc[1137]: Seing discover...
> udhcpc[1137]: Sending discover...
> udhcpc[1137]: Sending discover...
> udhcpc[1137]: Seding discover.
> と出ています。

これは、dhcp clientがdhcp serverを探しているログなので問題無いかと思います。

もし、dhcpによってIPアドレスが与えられていたのに、現在では与えられなくなった場合は、Armadilloが接続されているネットワークの環境を確認してみてください。

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

申し訳ございません。
こちらのミスが発覚いたしました。

ブートローダーを最新のもの(3.14)を当てていたのですが、
Armadillo内はLinux 2.6.26が入っておりました。

バージョンを揃えたところ、正常に動くことを確認いたしました。

ありがとうございました。

溝渕です。

> ブートローダーを最新のもの(3.14)を当てていたのですが、
> Armadillo内はLinux 2.6.26が入っておりました。

ログから見落していました...。

こちらこそ気付けずにすみませんでした。

お世話になっております。
最初の質問者の平野です。

書き換えにつきまして、不可解な現象が起きておりますので、
なにかお分かりでしたらご教授いただけますでしょうか。

現象をいかにまとめます。
Armadillo内のバージョンはLinux 2.6.26
linux.bin.gz、romfs.img.gz はそれぞれバージョン1、バージョン2がある前提とします。

1. Armadillo内のlinux.bin.gz、romfs.img.gzはそれぞれバージョン1
2. Hermit を使用して出荷状態に戻してバージョン2を当てたいため以下を実施
 2-1.ShoehonでArmadillo4x0を指定
 2-2.loader-armadillo4x0-v2.5.0.bin をあてる(linuxのバージョンにあうブートローダー)
 2-3.linux.bin.gz、romfs.img.gzはそれぞれバージョン2をあてる

上記を実施した場合、Armadillo内のlinux.bin.gz、romfs.img.gzがそれぞれバージョン1のままになってしまいます。
この状態で2-3で当てようとしたバージョンをnetflashで書き換えると上書きができました。

また、念のため以下の現象も報告いたします。

1. Armadillo内のlinux.bin.gz、romfs.img.gzはそれぞれバージョン1
2. Hermit を使用して出荷状態に戻してバージョン2を当てたいため以下を実施
 2-1.ShoehonでArmadillo4x0を指定
 2-2.loader-armadillo4x0-v3.10.0.bin をあてる(linux3.14用のもの)
 2-3.linux.bin.gz、romfs.img.gzはそれぞれバージョン2をあてる
※最初との違いはブートローダーのバージョンになります

上記を行うと正常にバージョン2が当たります。
ただし、その後にnetflashを行おうとすると異常が発生します。

現在、まっさらなArmadilloがないため、最初に入れるときはどういう動きをするかは試せていないのですが、
Hermitを利用してイメージの書き換えを行うにはそのように行えばいいかわかりますでしょうか。

お手数おかけいたしますが、ご確認のほどよろしくお願いします。

溝渕です。

Armadillo-440の型番は、以下いずれでしょうか?

- A440*-***Z (従来品)
- A441*-***Z (新フラッシュメモリ適用品)

もし、新フラッシュメモリ適用品であれば、以下に記載の通りhermit-at(v2.x.x)とlinux-2.6.26-atにパッチを適用する必要があります。

https://manual.atmark-techno.com/armadillo-4x0/armadillo-400_flashmemor…

Armadillo-440の型番が不明の場合は、以下の手順でご確認ください。

https://manual.atmark-techno.com/armadillo-4x0/armadillo-400_flashmemor…

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

>- A441*-***Z (新フラッシュメモリ適用品)
こちらでしたので、パッチの適用が必要なのだと思います。

基本的な理解が浅く、お手数おかけして申し訳ないのですが、
hermit-at(v2.x.x)とlinux-2.6.26-atにパッチを適用 とはatdeのソースに指定された通りの変更を加えるということでしょうか。

こちらで修正した範囲はわかるので、
>お客様が行った修正を、新フラッシュメモリ適用品対応ソフトウェアに入れる
この対応でいきたいのですが、
「新フラッシュメモリ適用品対応ソフトウェア」はどこから取得すればよろしいのでしょうか。

上記に補足になりますが、現時点では
linuxは at28
hermit-at がよくわかっておりません。
現在は書き換え時にwindowsのHermitを使用していますが、それのことでしょうか。

溝渕です。

> 「新フラッシュメモリ適用品対応ソフトウェア」はどこから取得すればよろしいのでしょうか。

先に書きました、

https://manual.atmark-techno.com/armadillo-4x0/armadillo-400_flashmemor…

にある、「新フラッシュメモリ適用品向けアップデートの差分ダウンロード」をクリックすると取得可能です。ソースに対するパッチ形式で配布されています。

たびたび申し訳ございません。

現在Armadillo内には
linux 2.6.26-at28
Hermit-At v3.11
が当たっています。

linux には
new_flash_memory_linux-2.6.26-at.patch
を当てるということだと思いますが、

patch -p 1 < new_flash_memory_linux-2.6.26-at.patch
を実行すると

(Stripping trailing CRs from patch.)
patching file arch/arm/configs/armadillo400_defconfig
Reversed (or previously applied) patch detected! Assume -R? [n]

と出てしまい、どのように選択してもパッチが当たりません。

また、HermitはWindows版で書き換えているのですが、
その場合はパッチを何に当てるということになるのでしょうか。

お手数おかけいたしますが、
ご確認のほどよろしくお願いします。

溝渕です。

> (Stripping trailing CRs from patch.)
> patching file arch/arm/configs/armadillo400_defconfig
> Reversed (or previously applied) patch detected! Assume -R? [n]
>
> と出てしまい、どのように選択してもパッチが当たりません。

すでにパッチが適用されていませんか?

パッチファイル(new_flash_memory_linux-2.6.26-at.patch)と、パッチの対象ファイル(arch/arm/configs/armadillo400_defconfig)を見比べてみてください。

> また、HermitはWindows版で書き換えているのですが、
> その場合はパッチを何に当てるということになるのでしょうか。

Hermit-At Win32は書き換えツールです。パッチを適用するのは、Armadilloで動作するHermit(ブートローダ/ダウンローダ)です。

なので、パッチを適用して生成したHermit(ブートローダ/ダウンローダ)を、Hermit-At Win32で書き込んでください。

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

armadillo400_defconfig
のみの比較ですが、すでにパッチが当たっていました。

>Hermit-At Win32は書き換えツールです。パッチを適用するのは、Armadilloで動作するHermit(ブートローダ/ダウンローダ)です。
現在、ブートローダーは
https://armadillo.atmark-techno.com/resources/software/armadillo-440/li…
から取得したものを書き込んでいるのですが、
それにパッチが当たっていないので、ソースをダウンロードしてパッチを当ててリコンパイルしたものを書き込む
という認識でよろしいでしょうか。

お手数おかけいたしますが、ご確認のほどよろしくお願いします。

ブートローダーもパッチが当たっているようです。

現象はお伝えした通りなのですが、
そもそもUSB-RS232C変換ケーブルを使わないと書き換えができない等の問題もあるため、
環境的な問題かもしれません。

もう少しこちらで調査をしていきたいと思います。

ありがとうございました。