U-Bootの設定情報を維持している、U-Bootの環境変数を見るには、U-Bootを実行している間にprintenvすれば表示できるのだが、シリアルにアクセスできないデバイスを持っている人もいるはず。そこで、ここではOS(Linux)上から見る方法を取り上げる。
【正攻法】
fw_printenvというコマンドがあるので、これを使う。
1. インストール
# apt-get install uboot-envtools
2. 設定
どこからか機器依存なデバイス情報を拾ってきて、/etc/fw_env.configに書く。
以下、SheevaPlugの場合:
/dev/mtd0 0xa0000 0x20000 0x20000ちなみに0xa0000でない場合もあるらしい。
3. 実行
$ sudo fw_printenv簡単。
CASset=min
MALLOC_len=1
autoload=no
baudrate=115200
~~~
【邪道な方法】
アドレス情報がわからなかったり、ソフトをインストールできないデバイスを持っている人もいると思う。そういう場合でも、読むだけならできる。
1. mtdデバイスを探し出す
$ ls /dev/mtd*mtd0~mtd2があるようなので、mtd0でチャレンジ。
/dev/mtd0 /dev/mtd1 /dev/mtd2 /dev/mtdblock0 /dev/mtdblock2
/dev/mtd0ro /dev/mtd1ro /dev/mtd2ro /dev/mtdblock1
2. mtdデバイスの中身を吸い出す
$ dd if=/dev/mtd0 of=~/mtd0.bin
3. odで開始アドレスと終了アドレスを探し出す
$ od -Ax -c mtd0.bin | lessこれで、「c o n s」など、環境変数に設定されていそうな値を適当に入力して、値が入っている場所を探し出す。
終わりは\0が続いているだけなので簡単。
4. \0区切りで分割する
見ての通り、\0で区切られてASCII文字が格納されているだけなので、開始アドレス~終了アドレスのデータを取り出して、\0で分割して出力してあげれば終わり。
$ ruby -e 'ARGF.seek(0xa0004); buf=ARGF.read(0xc0000-0xa0004); puts buf.split(/\0/)' mtd0.bin
CASset=min
MALLOC_len=1
autoload=no
baudrate=115200
bootargs=console=ttyS
~~~
CRCがあるようなので、間違っても書こうとはしないこと。
0 件のコメント:
コメントを投稿