BBR-4MG::Linux化ファームウェア
2台目のBBR-4MGを買ってしまいました(なにやってるんだか…).シリアルポート経由での転送は遅いので,Linux化ファームウェアを作ってみました.
おことわり
- もちろん,何があっても自己責任で.
- 私は,Linuxを殆ど知らないので,妙な事をしている可能性があります.
- 実はLinuxが入ったPCさえ無いのでFreeBSD上でやってます.
- シリアルコンソールを使えること前提です(telnetdを入れたので,何とかなるかも)
フラッシュメモリ
フラッシュメモリがAMD製かIntel製かで,ファームウェアが違います.本当は共通にしたかったのだけど,今のところサイズの都合でできません.ブート時にシリアルポートから出てくるメッセージか,チップ表面の型番を(シールで隠れてますが)確認してください.最近売っているものはIntel製のようです.
Intelのフラッシュは,TE28F160C3-Bで動作確認しました.AMDの方は,AM29LV160DB以外はサポートしていません.他のフラッシュメモリを乗せたボードを見かけたら連絡ください.
ダウンロード
- bbr-4mg/bbrlinux-0.1.0_i.zip for Intel Flash
- bbr-4mg/bbrlinux-0.1.0_a.zip for AMD Flash(AM29LV160DB only)
- bbr-4mg/ramdisk-0.1.1.bz2 Ramdisk data (/dev/mtd5に書き込んでください)
- bbr-4mg/linux-src.tar.gz Linuxソース (2007-04-17)
機能
- NAT/IPマスカレード
- DHCPサーバ&クライアント(udhcp)
- DNSプロキシ(dnrd)
- パケットフィルタ(iptables)
- 最小限のコマンド(BusyBox)
- telnetサーバ
PPPoEとかは入れてません.再起動すると設定消えます(…そのうちなんとかするかも).
フィルタはiptablesコマンドで設定してください.httpdがあるので,Webサーバにできるかも(やっぱり再起動すると消えますが…).
起動したときの設定は/etc/init.d/rcSを確認してください.ローカルのIPは192.168.0.1になってます.WAN側のネットワークとぶつかる場合は起動してから設定してください.
使えるコマンド
あとで書きます.
ramdisk.bz2を書き込む前
[, ash, busybox, cat, chmod, chown, cp, date, dd, df, echo, env, false, head, ifconfig, init, kill, killall, linuxrc, login, ls, mkdir, mknod, mount, mv, ping, ps, pwd, reboot, rm, rmdir, route, sh, sleep, tail, telnetd, test, tftp, touch, tr, true, tty, udhcpc, udhcpd, uname, uniq, usleep, vi, wc, whoami, yes
ramdisk.bz2を書き込み後
[, [[, ash, busybox, cat, chmod, chown, cp, crond, crontab, cut, date, dd, df, du, echo, env, expr, false, gzip, head, httpd, id, ifconfig, init, insmod, kill, killall, linuxrc, ln, login, ls, lsmod, mkdir, mke2fs, mkfs.ext2, mkfs.ext3, mknod, mount, mv, netstat, nslookup, passwd, ping, printf, ps, pwd, reboot, rm, rmdir, rmmod, route, sh, sleep, sync, tail, tar, tee, telnet, telnetd, test, tftp, touch, tr, traceroute, true, tty, udhcpc, udhcpd, umount, uname, uniq, uptime, usleep, vi, wc, wget, which, whoami, yes
あと,iptables,dnrd等
使い方
BBR-4MG用のファームウェアになっているので,普通にWebのインターフェイスのアップデート画面から書き込めます.展開して出てきたbinファイルを書き込んでください.4HGの人はバイナリエディタで最後の4MGを4HGに変更すれば書き込めると思います(動作確認はしていません).
ファームウェアの書き込みが終了して再起動すると,Linuxが起動するはずです.
あとは,シリアルコンソールで操作するか,telnetでログインしてください.LAN側のIPアドレスは192.168.0.1になっています.この時点でDHCPdも動いているので,192.168.0.から始まるIPが取得できると思います.WAN側はDHCPクライアントが動いています.telnetでログインするときのrootのパスワードは"bbr4mg"になっています.
ネットワークの設定等は適当にやってください.busyboxコマンドで使えるコマンドが確認できます.
これだけでは何もできないので,ramdisk.bz2を/dev/mtd5に書き込んでください./dev/mtd5に何かあると,そっちからファイルシステムを読み込むようになります.(壊れたデータでも気にせず読もうとするので,困ったことになるかも….言ってくれればweb領域しか読まないカーネルも公開するかもしれません)
tftpが入っているので,PCでTFTPサーバを起動してramdisk.bz2を置いてください.例えば,tftpサーバが192.168.0.100で動いているなら.
tftp -g -l /dev/mtd5 -r ramdisk.bz2 192.168.0.100
と実行すれば書き込めると思います.
TFTPサーバは何処からかダウンロードしてきてください.私はTFTPサーバー Poor TFTP Server for WIN32を使わせてもらいました.インストール不要で簡単に動きます.
後は,祈りながら再起動.
rebootで再起動出来ますが,Intelのフラッシュメモリにアクセスした後だと,再起動中に止まる気がします(ドライバが不完全なのかも…).
色々やるならramdisk.bz2を自分で作り直した方が良いと思います.展開すれば中身はext2なファイルシステムなので,普通にLinux等でmountできるはずです.
ramdisk.bz2を書き込んだ場合はiptablesでWAN側は192.168.から始まるネットワークのパケットを捨てるようになってるので,WAN側を192.168なネットワークに繋いでいると接続できなくなります.iptables -Fしてください.自分で嵌りました.
パスワード変更
このままだと,危なくてネットワークにつなげないので,passwdコマンドでパスワードを変更してください.変更しただけだと再起動すると元に戻ってしまうので,フラッシュメモリに設定を書き込みます.
まず,/etc/format.shを実行してフラッシュの設定領域にファイルシステムを作ります.これをやると,BBR-4MGのファームウェアで保存した設定は失われます.
つぎに,/etc/write.shを実行するとファイルシステムをマウントして,passwdファイルと,起動時に設定を書き戻すためのスクリプトを書き込みます.他の設定ファイルも変更したい場合は,スクリプトを書き換えてください.write.sh自身もフラッシュメモリにコピーするので,次回は書き換えなくて済みます.終了後は,/flashに読み取り専用でマウントされています.
128Kしか無いので,大きいファイルを入れたい場合はramdisk.bz2の方を書き換えた方が賢いと思います.もしくは,ramdisk.bz2を書き込んだ後は,mtd2の256Kが使われなくなるので,ファイルをtarで固めて書き込んでおくという手もあります.
アンインストールの仕方
BUFFALOのサイトからファームウェアをダウンロードしてきてtftpを使って転送してください.展開したファームウェアのファイル名がbbr4mg.binならば,
tftp -g -r bbr4mg.bin 192.168.0.100 dd if=bbr4mg.bin of=/dev/mtd2 bs=1024 count=256 dd if=bbr4mg.bin of=/dev/mtd3 bs=1024 count=512 skip=256
これで元に戻るはずです(同じ方法でLinuxもアップデートできます).戻せない場合は,バイナリエディタでファームウェアからデータを切り出して,ブートローダのメニューからシリアルポート経由で書き込んでください.
最後に
面倒なことになっても,その状況を楽しめるという人以外は,やってみようと思わない方が懸命です.
この文書の履歴
- 2005-10-08 公開
- 2005-10-10 telnetdを追加&設定を保存できるように