OpenWRT は Linux のディストリビューションの一つで、主に WiFi ルータなどの小規模な機器をターゲットとしています。 前に扱った Linino One も OpenWRT を使っています。
日本で売られている WiFi ルータにおいては主に Buffalo 製品に対応している機種が多いです。
最近、NEC の Aterm シリーズにも対応しているものがあるっぽいと知ったので、試しに入れ替えてみたいと思います。 基本的に公式のインストール手順をなぞってるだけです。
ターゲットは Aterm WG2600HP3 という、802.11ac (WiFi 5)対応のルータです。 2018 年の製品かと思います。
標準GUI の画面から、直接ファームウェアを書き込み出来れば楽なのですが、 そこまで解析できていないようなので、本体の基板から UART を引き出して、 u-boot を直接操作する必要があります。
まずは分解したいと思うのですが、本体にはトルクスのネジが2本あるだけで、ほかに外せそうな場所はありません。(ラベルの下にあるかと思ったのに…) プラスチックの爪で止まっているようなので、慎重に外します。
カバーを外したところ。
基板下部の J3 が UART の端子になりますので、ここから信号を取り出します。 左から 2 番目が GND で、4 番目が TX、一番右が RX です。 適当な USB-シリアル変換機を使って接続します。
Teraterm などでつないで(115200bps)、u-boot の画面が出たところで、ESC を押して止めます。
U-Boot 2012.07 [Standard IPQ806X.LN,local] (Jul 12 2019 - 10:25:18)
smem ram ptable found: ver: 0 len: 5
DRAM: 491 MiB
NAND: SF: Detected W25Q256JW with page size 64 KiB, total 32 MiB
ipq_spi: page_size: 0x100, sector_size: 0x10000, size: 0x2000000
32 MiB
MMC:
*** Warning - bad CRC, using default environment
PCI0 Link Intialized
PCI1 Link Intialized
In: serial
Out: serial
Err: serial
PRODUCTDATA CRC Verify OK.
Net: MAC1 addr:f8:b7:97:zz:zz:zz
athrs17_reg_init: complete
athrs17_vlan_config ...done
S17c init done
MAC2 addr:f8:b7:97:zz:zz:zz
eth0, eth1
post start
SF: Detected W25Q256JW with page size 64 KiB, total 32 MiB
DRAM Test ..... ABORT
post fail [1]
reboot after 10s ...
key abort
welcome to boot console
Password:
boot>
パスワードは chiron
です。
WG2600HP3のページから、ファームウェアをダウンロードします。
これを書いている時点では、最新版は
openwrt-23.05.0-ipq806x-generic-nec_wg2600hp3-initramfs-uImage
となっていました。
tftp サーバは Windows で動作するtftpd64を使いました。 tftp のディレクトリにダウンロードした OpenWRT のイメージを置いておきます。
LAN 側のポートのどこかにイーサネットのケーブルをつないておきます。 以下は、u-boot から操作します。 まずは tftp サーバとの疎通確認。
boot> setenv ipaddr 192.168.1.xxx
boot> ping 192.168.1.yyy
Using eth1 device
host 192.168.1.yyy is alive
できたら、いったん再起動。(不要かも?)
boot> setenv bootcmd "nboot 0x44000000 1 0x860000"
boot> saveenv
Saving Environment to NAND...
Erasing Nand...
Erasing at 0x2a0000 -- 100% complete.
Writing to Nand... done
boot> setenv ipaddr 192.168.1.xxx
boot> setenv serverip 192.168.1.yyy
tftpboot 0x44000000 openwrt-23.05.0-ipq806x-generic-nec_wg2600hp3-initramfs-uImage
Using eth1 device
TFTP from server 192.168.1.yyy; our IP address is 192.168.1.xxx
Filename 'openwrt-23.05.0-ipq806x-generic-nec_wg2600hp3-initramfs-uImage'.
Load address: 0x44000000
Loading: #################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################
done
Bytes transferred = 6429980 (621d1c hex)
boot> bootm
これで tftp から OpenWrt がロードされて起動します。
BusyBox v1.36.1 (2023-10-09 21:45:35 UTC) built-in shell (ash)
_______ ________ __
| |.-----.-----.-----.| | | |.----.| |_
| - || _ | -__| || | | || _|| _|
|_______|| __|_____|__|__||________||__| |____|
|__| W I R E L E S S F R E E D O M
-----------------------------------------------------
OpenWrt 23.05.0, r23497-6637af95aa
-----------------------------------------------------
=== WARNING! =====================================
There is no root password defined on this device!
Use the "passwd" command to set up a new password
in order to prevent unauthorized SSH logins.
--------------------------------------------------
root@OpenWrt:/#
デフォルトの IP アドレスは 192.168.1.1 なので、Web ブラウザでアクセスします。 この状態ではパスワードは空です。 うちの環境だと本物の WiFi ルータと IP アドレスが被ってしまうのだが…。 たぶん、設定用PCと OpenWRT ルータだけでネットワークを切り離しても大丈夫だと思います。
System → Backup Restore Firmware で Flash Operation のページに移行します。 ここで本体にファームウェアの書き込みを行います。 先ほどダウンロードした sysupgrade のイメージを指定します。
フラッシュの書き込みが終了すると再起動するのですが、カーネルが起動しないので、u-boot のパラメータを修正します。
boot> setenv bootcmd "nboot 0x44000000 1 0x860000;bootm"
boot> saveenv
Saving Environment to NAND...
Erasing Nand...
Erasing at 0x2a0000 -- 100% complete.
Writing to Nand... done
boot> reset
これで起動したら終了です。 お疲れさまでした。