Killing Time 2nd

備忘録、日々の徒然想いを残します。

玄箱のu-boot化とDebian lennyアップデート

懸案だった無印玄箱Debian lenny化だが、そのためにはブートローダーにloader.oを使ったものからu-bootに変更すること、フラッシュROMの書き換えという大きな壁があった。フラッシュROMの書き換えはミスるとJTAGが無いと復旧が困難で、不精してシリアル接続さえもしていない小生にとっては玄箱はゴミ箱行きとなってしまうリスクがあった。
多くの先達が有益な情報を残して公開してくれているが、多くの場合EMモードにした状態でフラッシュROMの書き換えをしており、シリアル接続が必携という感があり専用のシリアルケーブルの用意を面倒がっていた自分は腰が重くなっていた。しかし一部のサイトではそもそもEMモードに入らずともフラッシュROMの書き換えが出来るとあり、今回試してみた。結果は可能だった。

通常のEMモードを経由した流れは以下の通り。

  1. 玄箱をEM(Engineering Mode)モードに移行
  2. フラッシュメモリーにu-boot loaderファームウエアを書き込み
  3. 玄箱を通常モードに移行

EMモードへ移行するためのデバイスファイル名がカーネル2.4と2.6で異なるため、その際の書き込み先を注意する。
EMモードになるとフラッシュ上のカーネル、kernel2.4から起動する。IPアドレスも初期化されるので注意。
IPアドレスはだいたい以下のどちらか。

  • 192.168.11.150 <== こちらが本命か
  • 192.168.1.100?
  • 192.168.0.100?
  • DHCPが動いていればそちらからIPアドレスを取得する。telnetでログインしてカーネル、モジュールの展開をする。

但し、EMモードに移行せずに通常モードでフラッシュの書き込みが出来るとの情報もあり。取り敢えず通常モードで試してみて、ダメだったらEMモードに移行してみるか。
話は簡単で通常の起動モード、kernel2.6.25からフラッシュROMにu-bootのファームウエアを書き込むだけ。
用意したのは u-boot 対応の

  • カーネルイメージ(kernelimage-2.6.20-kuroBOX-uImage.tgz)
  • カーネルモジュール(modules-2.6.20-kuroBOX.tgz)
  • そして u-boot(u-boot-hd.flash.bin)

これらを http://www.genbako.com/ から入手しておく。U-Boot Loaderはmd5も忘れずに。

# wget http://www.genbako.com/uImage/kernelimage-2.6.20-kuroBOX-uImage.tgz
# wget http://www.genbako.com/uImage/modules-2.6.20-kuroBOX.tgz
# wget http://www.genbako.com/u-boot_loader/u-boot-hd.flash.bin
# wget http://www.genbako.com/u-boot_loader/u-boot-hd.flash.md5

md5の確認。

# md5sum -c u-boot-hd.flash.md5
u-boot-hd.flash.bin: 完了

カーネルは /boot に展開し、カーネルモジュールは /lib/modules に展開。最後に(念のため) EM モードに移行して書き換えを実行する。
/devに「mtdblock1」があるのを確認。なければ以下のコマンドでデバイスを作っておく。

# cd /dev
# ./MAKEDEV mtd

/bootのシステムマップを退避(念のため)

# cd /boot
# cp -p System.map System.map.orig

EMモードへの移行

# echo -n "NGNG" > /dev/fl3

デバイスファイル名は起動しているカーネルのバージョンによって異なるので注意。

  • kernel 2.4系 /dev/fl3
  • kernel 2.6系 /dev/mtdblock2

#/usr/bin/write_ng > /dev/fl3

このコマンドでも良いらしい。 中身はshell scriptで"NG"を繰り返しエコーしているだけ。
rebootして再起動することでEMモードに入る。u-boot を書き換え。

# cat u-boot-hd.flash.bin > /dev/fl2

EMモードでのターゲットのフラッシュメモリーは /dev/fl2
どうやらEM移行しなくても直接通常モードでフラッシュメモリーに書き込む方法、

# cat ./u-boot-hd.flash.bin > /dev/mtdblock1

※EMモードの場合とデバイス名が違うので注意
でもイケるらしい。ならばEMモードにわざわざ移行しなくても良いかも。

# dd if=./u-boot-hd.flash.bin of=/dev/mtdblock1 bs=1k

フラッシュとU-Boot Loaderのファイルが同一かを確認しておく。

# cmp u-boot-hd.flash.bin /dev/mtdblock1

EM モードを抜ける。

# echo -n "OKOK" > /dev/fl3

EMモードはkernel 2.4であることに注意。
/usr/sbin/write_okコマンドはうちの環境にはなかった。
"OKOK"の書き込みの確認。

# dd if=/dev/fl3 bs=4 count=1
OKOK1+0 records in
1+0 records out
4 bytes transferred in 0.006583 seconds (608 bytes/sec)

EMモードを抜けてノーマルモードに戻る。

# echo -n "OKOK" > /dev/mtdblock2 これ良いのか?
# echo -n "OKOK" > /dev/fl3
# /usr/bin/write_ok > /dev/fl3 でも良いらしい。