Start With OpenWrt /2

Start With OpenWrt /2

刷机进阶——TFTP法

这两种方式在Openwrt的wiki页面应该都有很详细的指导教程,我的经验是,如果你找到了一个自认为靠谱的教程,也记得先看看wiki上的介绍,有个大致的概念和对错判断。如果两者有出入,基本还是以wiki为准的。


TFTP

用TFTP方式刷机的原理其实和网页版本差不多,有一些版本的路由器甚至要挂载TFTP服务器才能完成固件更新。我的理解来说,TFTP的好处就在于有时候可能可以跨过网页版运营商对非官方固件的屏蔽,比较粗暴得导入固件。

用TFTP的方式,个人推荐是在Linux系统下进行,命令行输入、启动tftp服务器什么的会更方便。

准备工作

  • 1.安装并启动TFTP服务器(TFTP Server),注意将TFTP固件放在home(host)文件夹下,因为用tftp传输时,固件前不能添加路径。
1
2
sudo apt-get install tftpd-hpa tftp
sudo cp ~/uboot/arch/arm/boot/uboot.img /var/lib/tftpboot
  • 2.将固件重命名为简单形式,如 a1.bin。(这一步可有可无,仅仅为了方便接下来的命令行输入)
  • 3.TFTP传输过程中必须保证网络链接在路由器开启电源时就建立,为保重这一步成功,可以先关闭网络。(根据你linux系统的版本从以下选择合适的命令行)
1
2
3
4
5
6
/etc/init.d/networking stop
/etc/init.d/network stop
/etc/init.d/NetworkManager stop
service networking stop
service network stop
service NetworkManager stop
  • 4.配置与引导程序相匹配的静态IP地址。(一般为192.168.1.1,可以从路由器wiki页面中找到相关信息)
1
ifconfig eth0 ipv4.x.y.z netmask 255.255.255.0
  • 5.为TFTP预置arp请求条目
1
2
3
arp -s ipv4.x.y.1 20:aa:bb:cc:dd:00
#ipv4.x.y.1 是路由器ip地址
#20:aa:bb:cc:dd:00 是路由器背面的MAC地址

基本步骤

做完以上准备工作可以正式开始了。用TFTP客户端(TFTP Client)将固件上传路由器的基本方法如下:

  • 1.断开路由器电源
  • 2.用网线将电脑与路由器LAN口相连
  • 3.在电脑上启动TFTP客户端

  • 4.TFTP到路由器的ip地址(可在wiki页面查询)

1
2
tftp IPv4.x.y.z
#IPv4.x.y.z 为路由器的ip地址
  • 5.设置TFTP传输模式为octet/binary(二进制传输)
1
2
tftp> binary 
tftp> rexmt 1 #传输间隔为1秒
  • 6.设置TFTP重传直至成功
1
2
3
tftp> timeout 60
tftp> trace
tftp> Packet tracing on.
  • 7.用put命令设置传输的固件
1
tftp> put openwrt-xxx-x.x-xxx.bin
  • 8.TFTP客户端开始工作的同时打开路由器电源
  • 9.路由器大概需要十多秒才会成功启动,再次之前TFTP客户端持续发送请求。检测到路由器后,TFTP客户端将开始发送固件。
  • 10.等待传输完成,路由器重启。

TFTP方式的其他命令行形式实现

aTFTP

  • 一条命令行
1
atftp --trace --option "timeout 1" --option "mode octet" --put --local-file openwrt-xxx-x.x-xxx.bin IPv4.x.y.z

按下回车的同时接通路由器电源

  • 分布命令行
1
2
3
4
5
6
atftp
connect IPv4.x.y.z
mode octet
trace
timeout 1
put openwrt-xxx-x.x-xxx.bin

Netkit’s TFTP

  • 一条命令行
1
echo -e "binary\nrexmt 1\ntimeout 60\ntrace\nput openwrt-xxx-x.x-xxx.bin\n" | tftp IPv4.x.y.z
  • 分布命令行
1
2
3
4
5
6
7
tftp IPv4.x.y.z
tftp> binary
tftp> rexmt 1
tftp> timeout 60
tftp> trace
tftp> Packet tracing on.
tftp> put openwrt-xxx-x.x-xxx.bin

curl

1
curl -T openwrt-xxx-x.x-xxx.bin tftp://IPv4.x.y.z

Tips总结

用TFTP的方式有几个需要特别注意的点:

  • 一定要将固件放在home文件夹下,因为tftp put 的时候只添加文件名,不能前置文件路径。
  • 开始tftp传输的同时接通电源
  • 主机的ip地址要与路由器的ip地址在一个子网下,所以不要忘记提前把网络模式从DHCP改成Static。

希望这篇能够帮助到你,用tftp方式刷机总体来说实现难度不大,但是一定要细心,不要遗漏任何步骤。遇到问题可以详见OpenWrt的Wiki页面,基本都有详细的教程。同时也欢迎通过Email联系我。