Start With OpenWrt /3

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,但具体还是要根据路由器型号判断)。

hardware

然后,将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
    2
    setenv 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
    20
    ar7240> 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
    2
    ar7240> cp.b 0x80000000 0x9f020000 0x3c0000
    ar7240> bootm 0x9f020000
  • 之后,系统就开始重新启动了,将计算机网线接入LAN口,完成刷机啦。

总结

特别说明,这里的刷机过程是以TP-LINK TL-WR841N为例的,其他型号可能在细节上需要稍作改动,但具体都可以参考Openwrt wiki,当然,这句话也是经常出现在我的教程里,就是去wiki页面参考。虽然wiki是英文版面,有时候大家看起来会有点吃力而遗漏很多细节,但是其中真的包罗万象,几乎能解决你所有遇到的问题。所以在wiki中好好探索吧。

虽然想写一个适用于新手的教程,但是写下来才发现,其实每个人遇到的问题都是不一样的,而我也只能主要强调我踩过的坑。所以也许也不是那么适合所有人,这一点真的非常遗憾。