用于编译 tplink tl-wdr5600 v2 无线路由器 openwrt 系统的 patch 文件
下载对应版本的 openwrt 源码,使用 patch 文件,之后编译获得固件。
必须用编程器刷:
1.先用编程器将原厂固件读出来,并留一份做备份
2.修改原厂固件,将 0x0-0x1d800(不包括0x1d800,下同),0x40000-0x800000(固件末尾)填充ff(这步可以不做,只是我强迫症不全写成 ff 看着难受)
3.将原厂固件的 0x30000-0x40000 间的数据复制到 0x0-0x10000(即将其复制到固件头),将 openwrt-19.07.3-ath79-generic-tplink_tl-wdr5600-v2-squashfs-sysupgrade.bin 的内容复制到 0x40000处。
4.修改完成后用编程器将修改完成的固件写回flash。
这机子原厂的固件更新和启动时使用的第一个 uboot 会检查固件的签名,所以不拆机刷不成。拆开后仅用 ttl 也刷不成:uboot 阶段没办法输入。进入 linux 后可以输入了,但需要登录 root 账户,而 root 的密码我们不知道。
但这个设备有两个uboot,分别在 0x0-0x1d800 和 0x30000-0x40000 。启动时会先启动第一个 uboot,第一个 uboot 在正常启动时好像只会检查固件签名,之后会启动第二个 uboot,而第二个 uboot 不会检查固件签名。将第二个uboot复制到 0x0 后,设备启动时就会直接运行第二个 uboot (其实只将第二个 uboot 前面的一小段复制过去应该就有这种效果)。而第二个 uboot 在完成一系列操作后就会在 flash 的 0x40018,0x4001C 处读取内核的加载地址和入口地址,然后就会加载位于 0x40200 的内核。(除了 wdr5600 以外应该还有不少 tplink 的路由是这样)
Soc: QCA9561-al3a
5Gwifi: QCA9887
内存:64mb,m14d5121632a
flash:8m,25系列芯片,25Q64CSIG(在板子背面)
ttl:板子边上一排四个洞,从板子边到板内依次是 txd,rxd,gnd,电压3.3v(接线的时候将 ttl 的 rxd 接到板子的 txd 上,txd 接到 rxd上,gnd 接 gnd 上,vcc 不接)。波特率 :uboot 阶段和开始部分 linux 启动阶段为 128000,后面 Linux 会将其设置为 115200,uboot 阶段无法输入。
gpio 1 是复位按钮,按下去的时候值是 0,不按值是 1; gpio 21 是 led 灯,值是 1 的时候不亮,是 0 的时候亮; ttl 的 rxd 在 18 口, txd 在 20 口。
0x000000000000-0x00000001d800 : "factory_boot"
0x00000001d800-0x00000001e000 : "factory_info"
0x00000001e000-0x000000020000 : "art"
0x000000020000-0x000000030000 : "config"
0x000000030000-0x000000040000 : "normal_boot"
0x000000040000-0x00000013fa78 : "kernel"
0x00000013fa78-0x000000680000 : "rootfs"
0x000000680000-0x000000800000 : "rootfs_data"
0x000000040000-0x000000800000 : "firmware"
补充:2g 的 art 数据位于 art 分区开头,共 1088 字节;5g 的 art 数据位于 art 分区的 0x1000 处,共 2116 字节。
2g wifi 和 lan 口的 mac 地址是设备 mac ,wan 口 mac 地址是设备 mac +1,5g wifi 的 mac 地址是设备 mac +2。
设备树文件中的 eth0 和 eth1 和系统中的 eth0 eth1 是反着的。