接上文,这篇主要记录如何刷机。

概述

因为已经引出了 TTL 串口插针,所以这篇讲述的刷机方式是串口刷机,如果有更方便的方法,例如通过官方 Web 界面上传固件刷机,就不用这么麻烦了。

不过,对于我们这些非专业选手而言,TTL 刷机也是拯救路由器变砖前的最后一根稻草,所以还是要了解下如何通过串口刷机。

有关刷机原理方面,可以参考我画的示意图

刷机原理图

  1. 路由器通过串口和电脑相连(中间有个转接版),可以直接看到路由器启动等信息
  2. 路由器通过 LAN 端口直接和电脑相连,用于网络传输数据
  3. 上面是针对 MR11U 的刷机方式,不同的路由器有不同的刷机方式

软件和工具

我用的软件环境是 Mac,所以我主要记录下 Mac 下如何操作。Linux 或者其他的系统请自行搜索,网上都应该有原理方面其实都差不多。

Mac 下安装命令行工具,如果没有装开发工具(xcode)可能会没法进行。要下一步操作,就必须安装 xcode,同时找个软件包管理工具,例如我推荐 HomeBrew

接下来,下载必要的软件。

  1. Lion 似乎自带了 tftp 服务器,但用命令行启动它的确有些麻烦,这里有个免费的 gui 前端
  2. 官方的 OpenWrt for MR11U 固件,4m 版本其他容量的没测试过,如果您改了芯片,谨刷。
  3. minicom,这个是个命令行的串口调试软件。如果您已经安装了 HomeBrew,那么简单的 $brew install minicom 即可,如果是其他安装方式请自行搜索。

环境配置

市面上大多的 TTL2USB 板子都是基于 PL2303HX 芯片的这里有个文档看完以后就可以直接驱动设置转接版了。

PS,建议安装驱动的时候最好不要连接设备(转接版),同时重启计算机以后再连接使用。

接下来就可以插上 TTL2USB 的转接版到计算机上了,同时注意下 Mac 的「系统概述」中是否有这个板子的信息,如图

系统概述信息

如果一切 OK,系统会有个 /dev/cu.usbserial 文件,接下来我们就可以试试接口是否正常。


$ echo \"Hello, world!\" > /dev/cu.usbserial

如果没有错误信息,同时注意 TTL2USB 转接版的灯是否闪了下(如果没有闪,那么可能是 RX 和 TX 接反了),那么说明一切正常了。

接下来配置 minicom 如何链接路由器,路由器的速率一般是 115200 ,运行命令


$sudo minicom -s

minicom 配置

选择 Serial port setup ,然后配置如图,保存以后重启下 minicom 就可以使用了。

链接启动

环境配置好了以后,打开插上路由器电源,在 minicom 中应该就可以看到启动信息了。这时候,快速按下「tpl」顺序组合键,就可以停留在命令台。

串口启动显示信息

将路由器的网线端口和 Mac 的网线端口相连,在 minicom 中输入


printenv

查看环境变量,会看到如下字符串,注意此时 serverip 是 Mac 的 ip,ipaddr 是路由器的 ip 地址。

环境变量

设置 Mac 端的地址为 server ip 的地址,如图

设置 Mac 网络地址

然后打开 tftp Server 软件,选择下载保存固件的目录,然后启动 tftp Server (需要管理员权限)。

至此,和路由器的网络链接以及 Mac 端的 tftp 就配置好了,可以真正进行刷机了。

刷机

接下来就可以执行刷机操作了,在进行这个项目之前,请务必再检查:

  1. 电源是否稳定,避免刷机过程中掉电(MR11U 还带了快电池,这方面的风险少很多)
  2. 各接口板的连线是否正常,避免松动
  3. 网络链接是否正常

如果没有其他问题,就真正的开始了。这里再次声明下,由于刷机造成的后果本篇 Blog 不承担任何责任。

进行刷机操作

依次键入如下命令


tftpboot 0x81000000 openwrt-ar71xx-generic-tl-mr11u-v1-squashfs-factory.bin

从 tftp 服务器获得 openwrt-ar71xx-generic-tl-mr11u-v1-squashfs-factory.bin 固件内容,并写到从 0x81000000 开始的内存地址中


erase 0x9f020000 +0x3c0000

擦除从 0x9f020000 地址开始,偏移 +0x3c0000 地址的数据。注意,操作完此条命令以后,路由器的闪存已经就没有数据了。


cp.b 0x81000000 0x9f020000 0x3c0000

拷贝内存中的数据到闪存中,大小刚好是我们上条命令擦除的容量大小,这个操作需要点时间,例如 4m 大小的闪存大概需要几十秒。


bootm 9f020000

至此,路由器闪存中的数据已经是 openwrt-ar71xx-generic-tl-mr11u-v1-squashfs-factory.bin 中的内容,也就是已经成功将路由器刷成了 OpenWrt 。

然后从 9f020000 地址开始引导,如果能看到很多字符在跳动,同时过段时间按下回车能登录到控制台,那么恭喜你刷机成功了。

OpenWrt 成功启动

但此时还没法做任何事情,因为此时的 OpenWrt 固件是没有 Web 端界面、默认无线是关闭的,所以我们还是要留在 minicom 中继续操作。

参考:http://wiki.openwrt.org/toh/tp-link/tl-mr11u

未完,待续…