使っていたTP-LINKルータが不安定な気がしたので交換し保管していたが、余ったルータを持っていても仕方ないのでOpenWrtを試してみた。
OpenWrt Project は、組込デバイスを対象とする Linux オペレーティング システムということらしい。
機種はTP LINKのArcher C20 v1。OpenWrtで該当ファイルをダウンロード。
フィアルにはfactory、kernel、sysupgradeの3種類があるようだ。
factoryは元々ルータに入っているファームからGUIで入れ替えることが出来るもの,kernelは最低限のコア部分でtftpなどで、ルータに書き込むもの,sysupgradeはOpenWrtを入れたルータでのアップデートらしい。
ところが、Archer C20 v1では現在の最新バージョン22.03.0ではkernelとsysupgradeしかない。
いろいろ調べたところ、バージョン19.07.6では、factoryが存在する。つまり19.07.6を入れて、22.03.0にアップグレード出来ると考え実施してみた。
初期化(ルーターの電源を入れてから3分後、ルーターの電源を入れたままRESETボタンを5秒長押しし再度3分待つ)し、ファームウエアをGUIよりバージョンアップしたが文鎮化してしまった。LEDランプは「電源+インターネット」、「USB」、「全て点灯」が繰り返される状態。
ここで落ち着いてWebで情報を検索すると、以下のような記載が。(大失敗)
TP-Link Archer C20 v1
WARNING ABOUT BRICKING YOUR DEVICE:
You need to use TFTP or DUMP to install. Do not flash from the stock UI because you will get an lzma kernel decompression error and you’ll have to use serial console to recover from soft-brick.
これ以上悪化することはないと、ネジ2本をはずして蓋を無理やりはずす。(かなり蓋を歪ませないと行けないようだ。爪が数個われてしまった)
シリアルがあるので状況が確認出来ないか接続を試みたが、Webで記載があるように配線がつながっていない。Unable to access through serial console - Archer C20 V1
白枠部分にチップ抵抗があるべき。
There should be 4 pads (J2) looking from the font on right side, where the square pad is vcc 3.3V.
FRONT | vcc3.3 - gound - tx & rx | BACK
Serial connection parameters
for TP-Link Archer C20 1 115200, 8N1
なんとか配線を接続するように考えたが、細かすぎてはんだ付け出来ない。つながっても復旧出来る訳ではないのでシリアルの接続は諦めた。
他の方法を調べて見ると、ROMを外して直接書き込む方法が紹介されていた。
How to Flash Chip of a Router With a Programmer | TP-Link Router Repair & MAC address change
私のルータでは基板上で確認出来たLSIは以下のとおり。(ROMは25Q64CIG 64Mbit SPIフラッシュ)
MEDIATEK MT7620A
MY7610EN
winbond W9751G6KB-25
25Q64CIG
ROMを剥がすため低融点ハンダも購入したが、良く考えてみると書き込み一度で復旧出来る保証はない。そこでICクリップで書き込めるROMライタをアマゾンで購入。ソフトはダウンロードしてWidows10に導入。ところがこれが実に使いにくい代物で、クリップの精度が悪いのかすぐ外れ、手で支えながら何分も書き込むのだが失敗する。
頭に来て、直接はんだ付け。
動き出した。
しかしファームウエアはインターネット上からダウンロードしたArcher_c20v1_eu_full.binで、英語バージョンでMACアドレスも当初のものと異なる。そこで正式な日本版に変更しようとTP-LINKのダウンロードセンターから、Archer C20(UN)_V1_160921_JPをダウンロードしファームウエアアップを試みた。ところがエラー。(The uploaded file does not match the device's current hardware version.) ハードは変更していなのだけど、確かに表示上は変わっている。(Archer C20 v1 00000001 -> Archer C20 v1 00000002)
このファームウエアを使うのは、MACアドレスからもライセンス的にもまずいと思われるので、再度openwrtに変更を試みることにした。今度は間違えないようにtftpを使用する。
- 母艦にtftpを導入
$ sudo apt install tftp-hpa $ cat /etc/default/tftpd-hpa # /etc/default/tftpd-hpa TFTP_USERNAME="tftp" TFTP_DIRECTORY="/srv/tftp" TFTP_ADDRESS="0.0.0.0:69" TFTP_OPTIONS="--secure" $ sudo service tftpd-hpa status ● tftpd-hpa.service - LSB: HPA's tftp server Loaded: loaded (/etc/init.d/tftpd-hpa; generated) Active: active (running) since Sat 2022-10-01 16:48:42 JST; 15min ago Docs: man:systemd-sysv-generator(8) Process: 5836 ExecStart=/etc/init.d/tftpd-hpa start (code=exited, status=0/SUCCESS) Tasks: 1 (limit: 4915) Memory: 1.4M CGroup: /system.slice/tftpd-hpa.service └─5844 /usr/sbin/in.tftpd --listen --user tftp --address 0.0.0.0:69 --secure /s 10月 01 16:48:42 takugaku systemd[1]: Starting LSB: HPA's tftp server... 10月 01 16:48:42 takugaku tftpd-hpa[5836]: Starting HPA's tftpd: in.tftpd. 10月 01 16:48:42 takugaku systemd[1]: Started LSB: HPA's tftp server.
リセット長押しし、tcpdump で見るとtftpでArcherC20V1_tp_recovery.binを読みに来ていることが確認出来た。
17:00:36.867688 IP 192.168.0.1.3909 > takugaku.tftp: 46 RRQ "ArcherC20V1_tp_recovery.bin" octet timeout 1
- ファイルの準備(TP-Link Archer C20 v1)
tp-linkのサイトからダウンロードしたバイナリからブート部分を取り出し、openwrtの所定のバージョンと結合する。
今はバージョン22.03.0があるようだが、とりあえず記載のとおりに進めてみる。
dd if=Archer_C20v1_0.9.1_4.0_up_boot(160427)_2016-04-27_13.53.59.bin of=uboot.bin bs=512 count=256 skip=1 cat uboot.bin openwrt-19.07.6-ramips-mt7620-tplink_c20-v1-squashfs-factory.bin > ArcherC20V1_tp_recovery.bin これをtftpにセット。(`cp ArcherC20V1_tp_recovery.bin /srv/tftp`)
- リセットを長押ししtftpでプログラムを読みこむ
(注意)読み込ませたあと、どうしてもブラウザでアクセスしても表示しないので再度Webを見直すと、なんとIPアドレスは192.168.1.1。さっきまでデフォールトの192.168.0.1だったのに。PC側のIPを変更し192.168.1.1にアクセスしてやっと表示された。
- 追加インストール
(ファイルは(https://archive.openwrt.org/releases/19.07.3/targets/ramips/mt7620/))
The ArcherC20V1_tp_recovery.bin provides the basic OpenWrt. If you want to also install the rest of the components like the LuCI GUI, after the above process completed and the router is now up and running, download the latest version of the “Firmware OpenWrt Upgrade” from Installation section above. Upload the file to the router in /tmp using scp (after first install the root user is allowed login without password) Router's default IP is for example 192.168.0.1, 192.168.1.1, etc.
$ scp openwrt-19.07.3-ramips-mt7620-tplink_c20-v1-squashfs-sysupgrade.bin root@192.168.1.1:/tmp/ root@192.168.1.1's password: openwrt-19.07.3-ramips-mt7620-tplink_c20-v1-s 100% 4032KB 1.8MB/s 00:02 $ ssh root@192.168.1.1 root@192.168.1.1's password: BusyBox v1.30.1 () built-in shell (ash) _______ ________ __ | |.-----.-----.-----.| | | |.----.| |_ | - || _ | -__| || | | || _|| _| |_______|| __|_____|__|__||________||__| |____| |__| W I R E L E S S F R E E D O M ----------------------------------------------------- OpenWrt 19.07.6, r11278-8055e38794 ----------------------------------------------------- root@OpenWrt:~# sysupgrade -v /tmp/openwrt-19.07.3-ramips-mt7620-tplink_c20-v1-s quashfs-sysupgrade.bin Saving config files... etc/config/dhcp etc/config/dropbear etc/config/firewall etc/config/luci etc/config/network etc/config/rpcd etc/config/system etc/config/ucitrack etc/config/uhttpd etc/config/wireless etc/dropbear/dropbear_rsa_host_key etc/group etc/hosts etc/inittab etc/luci-uploads/.placeholder etc/opkg/keys/0b26f36ae0f4106d etc/opkg/keys/1035ac73cc4e59e3 etc/opkg/keys/5151f69420c3f508 etc/opkg/keys/72a57f2191b211e0 etc/opkg/keys/792d9d9b39f180dc etc/opkg/keys/9ef4694208102c43 etc/opkg/keys/b2d571e0880ff617 etc/opkg/keys/b5043e70f9a75cde etc/opkg/keys/c10b9afab19ee428 etc/opkg/keys/dace9d4df16896bf etc/opkg/keys/dd6de0d06bbd3d85 etc/opkg/keys/f94b9dd6febac963 etc/passwd etc/profile etc/rc.local etc/shadow etc/shells etc/sysctl.conf Commencing upgrade. Closing all shell sessions. Connection to 192.168.1.1 closed by remote host. Connection to 192.168.1.1 closed.
- ログインしてGUIからバージョンアップを行う。
(参考 https://geekok.github.io/openwrt/usage/openwrt-upgrade/)
- MACアドレスの変更
まだ購入時のMACアドレスにしておかないと、バッティングしてもまずい。
GUIの画面からMACアドレスが変更出来るようなので、購入時のものに変更。
以上とりあえず文鎮化を免れた。結局OpenWRT22.03となり、かなり複雑な設定が出来るようだ。
OpenWrtコミュニティ内の手順解説では「みんな当然わかってるよね」ということはいちいち説明してないので、LINUX無知な自分では実行に移せるほど「腑に落ちた感」を得られませんでした。
(「公式ファームウェアのbootを切り取ってOpenWrtファームと合体させてね。コマンドはこれね」とあっても、そもそもそのコマンドをどこで入力したらよいのかもよく分からない状態だったりしたので…)
こちらでたまたま同じ機種をいじっているのを拝見してたいへん参考になりましたし、「ちゃんと動いている実例があるんだ」ということで背中を押してもらえました。感謝感謝です。
SPIプログラマがチップを認識することがありましたが、
SPI ID(?)が毎回違うものになります。(結局ちゃんと認識されてない)
もっと便利なのがあってもいい気がします。
誰かが上からかぶせるだけでBIOSチップと接続できるようなアダプタみたいなの作ってくれたらいいのに。