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 | sudo apt-get install tftpd-hpa tftp |
- 2.将固件重命名为简单形式,如 a1.bin。(这一步可有可无,仅仅为了方便接下来的命令行输入)
- 3.TFTP传输过程中必须保证网络链接在路由器开启电源时就建立,为保重这一步成功,可以先关闭网络。(根据你linux系统的版本从以下选择合适的命令行)
1 | /etc/init.d/networking stop |
- 4.配置与引导程序相匹配的静态IP地址。(一般为192.168.1.1,可以从路由器wiki页面中找到相关信息)
1 | ifconfig eth0 ipv4.x.y.z netmask 255.255.255.0 |
- 5.为TFTP预置arp请求条目
1 | arp -s ipv4.x.y.1 20:aa:bb:cc:dd:00 |
基本步骤
做完以上准备工作可以正式开始了。用TFTP客户端(TFTP Client)将固件上传路由器的基本方法如下:
- 1.断开路由器电源
- 2.用网线将电脑与路由器LAN口相连
3.在电脑上启动TFTP客户端
4.TFTP到路由器的ip地址(可在wiki页面查询)
1 | tftp IPv4.x.y.z |
- 5.设置TFTP传输模式为octet/binary(二进制传输)
1 | binary |
- 6.设置TFTP重传直至成功
1 | timeout 60 |
- 7.用put命令设置传输的固件
1 | 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 | atftp |
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 | tftp IPv4.x.y.z |
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联系我。