経緯
u-boot の環境変数の "ethact=COMET#0" の部分を変更したところ、システムの起動は今までどおりに行えるのですが、u-boot のコンソールへ移行することができなくなってしまいました。どうもコンソール画面がまだ満足に環境設定を行なっていないイーサネット側へ出力されているようです。このままでは、u-boot の設定の見直しができなくなってしまいます。ethact=COMET#0
↓
ethact=RTL8169#0
対策
フラッシュメモリへ書き込まれている u-boot の設定値を修正して書き戻すこととしました。まずはブロックデバイスがどのように認識されているか確認しました。
# cat /proc/mtd
dev: size erasesize name
mtd0: 00400000 00010000 "physmap-flash.0"
# ls /dev | grep mtd
mtd0
mtd0ro
mtdblock0
Debian Jessie のシステム上では、フラッシュメモリは /dev/mtdblock0 と認識されているようです。
フラッシュメモリ全体のデータを吸い出す
この /dev/mtdblock0 からフラッシュメモリ全体のデータを dd コマンドを使用して全部吸い上げてしまいました。# dd if=/dev/mtdblock0 of=flash.bin bs=1k
4096+0 records in
4096+0 records out
4194304 bytes (4.2 MB) copied, 1.51899 s, 2.8 MB/s
吸い上げたデータがフラッシュメモリの内容と一致するか確認しました。
# cmp flash.bin /dev/mtdblock0
(何の表示もせずに終了した場合はデータは一致しています)
操作パソコンで修正
吸い上げたフラッシュメモリのデータ(flash.bin)を操作するパソコンへ転送して、バイナリ・エディタで編集しました。私は ghex で編集しました。上記の "ethact=" の部分を検索して編集して、新しく flash2.bin として保存しました。そして再び玄箱へ転送しました。修正済みデータの書き込み
念の為、書き換え前のデータと修正データを比較してみました。最終行の "EOF on flash2.bin" の部分は、編集によって新しいデータの長さが若干短くなってしまいました。空白(null)データが詰まっている部分なので、これで問題ありません。# cmp -l flash.bin flash2.bin
3540661 122 103
3540662 124 117
3540663 114 115
3540664 70 105
3540665 61 124
3540666 66 43
3540667 71 60
3540668 43 0
3540669 60 0
3604479 0 117
3604480 0 113
3604483 117 116
3604484 113 107
3604735 116 377
3604736 107 377
cmp: EOF on flash2.bin
大きな不安を抱えつつフラッシュメモリを書き換えました。読み出しの時と違って書き換えの時には時間が掛かるため、心臓に負担がかかります(苦笑)。
# dd if=flash2.bin of=/dev/mtdblock0 bs=1k
4095+1 records in
4095+1 records out
4194302 bytes (4.2 MB) copied, 66.4426 s, 63.1 kB/s
最後にもう一度比較を行います。
# cmp -l flash2.bin /dev/mtdblock0
cmp: EOF on flash2.bin
これで作業は終了です。祈りながら再起動をします。
# reboot
再起動後
再起動した後、u-boot の起動表示画面が表示されて Bad CRC の表示と共に初期値のデータを使用するとの表示が出ました。"s" キーで無事に u-boot のコンソールへログインすることができました。ただし設定値は初期化された状態でした。
そこで再度 u-boot の設定値を setenv コマンドを使って設定し直しました。これで無事起動することができるようになりました。
0 件のコメント:
コメントを投稿
注: コメントを投稿できるのは、このブログのメンバーだけです。