buffalo wmr-300(トラベルルータ)のフラッシュROMを16MBに換装

fon2405eでSPIフラッシュROMを取り替えが成功したので、他のルーターもやってみました。取り寄せたSPIフラッシュメモリの在庫がかなりあるのでできれば16MBにすれば使い勝手がかなり向上します。8MBでも十分OpenWrtが使えるのですが、本格的に使おうとすると最低16MBは必要です。wmr-300はかなり小さいくトラベルルータとして持ち運びでき重宝するので、SPIフラッシュを取り替えることにしました。

今回はfon2405eの時のようにu-bootからファームウェアを焼かずに、フラッシュROM全体を移し替えます。下図のログは換装後の16MBフラッシュROMですが、”u-boot”、”u-boot-env”、 “factory” 、”firmware”をddコマンドで吸い出して、catコマンド繋ぎ合わせれば、アドレスの連続したファイルが出来上がり全体のフラッシュROMのコピーになります。”firmware”パーティションのアドレスが物理アドレスより大きくなっていますが、物理的に切られるので問題ありません。そのコピーを直接、フラッシュROMに書き込みます。書き込み後、ブートしてデバイスツリーでパーティションを拡大してビルドした新しいファームウェアにアップグレードします。

[    0.540941] m25p80 spi0.0: mx25l12805d (16384 Kbytes)
[    0.551116] 4 fixed-partitions partitions found on MTD device spi0.0
[    0.563789] Creating 4 MTD partitions on "spi0.0":
[    0.573341] 0x000000000000-0x000000030000 : "u-boot"
[    0.584223] 0x000000030000-0x000000040000 : "u-boot-env"
[    0.595739] 0x000000040000-0x000000050000 : "factory"
[    0.606752] 0x000000050000-0x000001000000 : "firmware"
[    0.620737] 2 uimage-fw partitions found on MTD device firmware
[    0.632600] Creating 2 MTD partitions on "firmware":
[    0.642510] 0x000000000000-0x00000017e04d : "kernel"
[    0.653323] 0x00000017e04d-0x000000fb0000 : "rootfs"
[    0.664142] mtd: device 5 (rootfs) set to be root filesystem
[    0.676980] 1 squashfs-split partitions found on MTD device rootfs
[    0.689368] 0x000000380000-0x000000fb0000 : "rootfs_data"

mt7620だと16MB以上のフラッシュROMを積めるのですが、問題はu-bootが対応していないとブートできないという問題があります。u-bootのソースはあるにはあるのですが、いざコンパイルして使うとなるとリスクが大きすぎます。今回は余っているフラッシュROMを使うことにしたので、16MBまでならオリジナルのu-bootで十分対応可能です。

OpenWrtはデバイスツリーをSPIフラッシュROMを16MB用に変えるだけで他には変更は加えていません。

リソース

UPDATE

バグはできるだけ潰したのですがどうしても一つだけ潰せないものがありました。デフォルトのネットワークの設定がどうしてもswitchの仕様になります。解決方法はfailesafeでsshログインしてmount_rootでrootfsにマウントし/overlay/upper/etc/config/networkを書き換えます。

config interface 'loopback'
	option ifname 'lo'
	option proto 'static'
	option ipaddr '127.0.0.1'
	option netmask '255.0.0.0'

config globals 'globals'
	option ula_prefix 'fd7a:751a:4b5e::/48'

config interface 'lan'
	option type 'bridge'
	option ifname 'eth0'
	option proto 'static'
	option ipaddr '192.168.211.1'
    option netmask '255.255.255.0'
	option ip6assign '60'

config device 'lan_eth0_dev'
	option name 'eth0'
	option macaddr 'xx:xx:xx:xx:xx:xx'