Start with OpenWrt /3
终极刷机——TTL法
TTL刷机就是指用TTL线(串口线)让路由器与电脑的BOOT进行串口通信,然后通过网口利用TFTP把固件传输过来。
所以这种方法同样适合在路由器死机变砖了之后救活它。
引用一个滑冰犀鸟的原理解释:
原理说明
- TTL线就是串口线(USB转串口)。
- 系统固件不是通过TTL线传输到路由器中。
- TTL线的作用是让PC端和BOOT进行串口通信。
- PC端通过串口线使用BOOT的控制台。
- 系统固件实际是通过网口(TFTP协议)传输到路由器中。
准备工作
TTL刷机需要进行一些焊接工作,提前准备好电烙铁,排针,杜邦线等电工工具。
TTL转USB线,可以在淘宝买到,但是一定要买对型号,具体可参考wiki或询问淘宝客服。
网线
Windows上安装SecureCRT、Putty、Tftpd(注意选择32位/64位)。
硬件准备
首先,在OpenWrt的wiki页面找到相应型号路由器的电路板图片。以TP-LINK 841n为例,它的wiki页面下有一个Serial port settings:栏,在其中你可以找到电路板上GND RX TX在哪(一般都不会使用到VCC,但具体还是要根据路由器型号判断)。
然后,将GND口、TX和RX焊上排针,再用杜邦线连接出来。
TTL转USB线比较推荐如图这样的,无须再焊接,把从排针印出来的杜邦线接上就可以了。需要注意的是,购买转串口线的时候一定要注意型号,在wiki看好型号再去找,买的时候也要多和卖家沟通,否则会出现扫码率怎么都对不上等乱七八糟的问题。
接着,将电路板引出来的TX接到串口线的RX,RX接到TX,GND接GND,电路方面的准备工作理论上就完成了。
正式刷机
- 设置电脑ip设置到与路由器相同网段,如:192.168.1.169
- 打开SecureCRT,按照如下设置并连接。
protol: Serial
port: COMx (在电脑的设备管理器中查看端口号)
Baud rate: 115200(通常是这个速率,但具体值根据型号不同有所不同)
Data bits: 8
Parity: None
Stop bits: 1
Flow Control: 均不钩选
将电脑的无线网卡禁用,如果电脑有多张有线网卡也将其他几张禁用,关闭防火墙。
把官方固件(openwrt-ar71xx-generic-tl-wr841nd-v7-squashfs-factory.bin
)与Tftpd32放在同一个文件夹中(官方固件的获取方式在上两篇文章中有介绍),打开tftpd。
将USB串口连接到电脑,为路由器通电,WAN口用网线与电脑网口相连,在SecureCRT中可以看到开机信息,则证明串口连接成功。
如果出现乱码,应该是Baud rate设置有误;如果没有反应,但路由器灯正常亮起,则可能是电路出了问题。
将路由器断电,重新通电,在SecureCRT上查看打印信息,出现
Autobooting in 1s…
马上在键盘上按下tpl(也有一些路由器需要按Ctrl+c 或者其他,具体可以参照特定路由器的刷机教程)
成功进入路由器系统的boot界面。
在窗口输入:
1
2setenv ipaddr 192.168.1.1
setenv serverip 192.168.1.169 ipaddr 是路由器的ip地址
serverip是电脑的ip地址
将固件拷到路由器内存中,0x80000000是flash上一段空白位置,可以暂时存储文件。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20ar7240> tftpboot 0x80000000 openwrt-ar71xx-generic-tl-wr841n-v8-squashfs-factory.bin
Using eth0 device
TFTP from server 192.168.1.100; our IP address is 192.168.1.111
Filename 'openwrt-ar71xx-generic-tl-wr841n-v8-squashfs-factory.bin'.
Load address: 0x80000000
Loading: checksum bad
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
######################################################
done
Bytes transferred = 3932160 (3c0000 hex)将flash原来的固件文件擦除
1
ar7240> erase 0x9f020000 +0x3c0000
0x9f020000为内核的启动地址,在开机的引导信息中可以看到,见840N的U-boot行
Booting image at 9f020000 …
不同的路由器启动地址也有所不同,具体情况可以在uboot行中看到。
0x3c0000为固件大小,这个输错了路由器会变砖,上一步返回信息的最后一句会给出。
擦除完成后,将openwrt固件复制到固件启动地址中,bootm启动。
1
2ar7240> cp.b 0x80000000 0x9f020000 0x3c0000
ar7240> bootm 0x9f020000之后,系统就开始重新启动了,将计算机网线接入LAN口,完成刷机啦。
总结
特别说明,这里的刷机过程是以TP-LINK TL-WR841N为例的,其他型号可能在细节上需要稍作改动,但具体都可以参考Openwrt wiki,当然,这句话也是经常出现在我的教程里,就是去wiki页面参考。虽然wiki是英文版面,有时候大家看起来会有点吃力而遗漏很多细节,但是其中真的包罗万象,几乎能解决你所有遇到的问题。所以在wiki中好好探索吧。
虽然想写一个适用于新手的教程,但是写下来才发现,其实每个人遇到的问题都是不一样的,而我也只能主要强调我踩过的坑。所以也许也不是那么适合所有人,这一点真的非常遗憾。