Buffalo部分路由的tftp刷机过程
转载自http://blog.sina.com.cn/s/blog_4162deb80101ctj2.html
因为某网站的可访问性很差,就写一点做备份。
这不是教程,只是个人一点经验和一些资料的合体罢了。
适用于 Buffalo家的WHR-HP-GN | WZR-HP-G300NH | WZR-HP-AG300N,由于Buffalo的UBoot在以上三个不同机器上表现出相似的行为,可以推断Buffalo家其他使用相同/相似(Atheros芯片)的路由也能使用相同方法,从而通过UBoot的tftp窗口在路由开机后短暂的时间里刷入特定固件。
参考:
[1] http://g300nh.blogspot.com/2010/06/firmware-flash-and-brick-recovery.html
(这篇blog有不少数据并不适用于我的路由,也和op官方wiki相差较大,只做参考)
[2] http://wiki.openwrt.org/toh/buffalo/wzr-hp-g300h#oem.installation.using.the.tftp.method
准备工作
1.一个未加密,没有trx头的固件。
由于从Buffalo官网下载的固件大部分都是加密过的(它的路由自己可以解密,不过对一般人来说,从路由的Flash为里提取出固件相当困难),如果你想刷官方固件,那么你需要它的未加密版本。Buffalo和DD-WRT合作关系比较紧密,一般DD- WRT的固件也是加密了的。对一般人来说,OpenWrt比较方便,编译出的以tftp为后缀的固件就可以直接作tftp刷机用。(你想刷TOMATO 吗?抱歉它只支持BCM)
2.一个特别的连接环境。
近几年的操作系统,无论是Windows还是Linux,大多带有网络管理功能,这些软件能够识别网络是否正确连接了,并且会在连接出错的时候提示你。他们勤劳工作、任劳任怨、值得赞赏,但是他们会妨碍我们刷机——我们需要一个总是看起来可用的连接,不管它是否真的可用。[1,#note 1]
你可以把电脑和一台交换机连接,然后再从交换机上连路由。如果你有闲置的交换机或者路由器(多口路由器一般都有交换机功能)的话,这是最好的选择。这样你可以直接在你的机器上操作,而且电脑也可以使用无线连接到你的闲置路由,同时用有线连接上网。
你也可以选择使用虚拟机。在网卡桥接模式下,虚拟机系统将会认为网线已经连好。
如果你的机器跑不起一个虚拟机,那么你可能需要一个Linux操作系统。操作系统至少有tftp工具和基本的网络设置工具,如ifconfig和arp。除此之外,你还要保证你的Linux或者虚拟系统能拿到固件文件。
另外,理论上Windows也能直连刷机,但我没成功过。Windows的网络管理似乎涉及不少服务,不是那么容易干掉。
3.其他什么东西
(请读完再做)把你要刷的路由和交换机或者电脑连好,不要通电,并确保你给路由通电的同时,能够回头按下回车键。
刷机参考
对于不同的路由器,会有一些细微的数据差异,比如UBoot默认的MAC地址。
如果是WZR-HP-AG300N/WHR-HP-GN,在下面出现的脚本里,用 02-aa-bb-cc-dd-20 代替<MAC>
如果是WZR-HP-G300NH,用 02-aa-bb-cc-dd-1a 代替<MAC>
其他路由请搜索相关文档。
Linux下,MAC地址要用半角冒号代替Windows的减号分隔。
Windows
对于Windows系统,你可能需要下载一个tftp客户端软件,比如tftpd32,或者使用win7/vista自带的tftp命令行工具(win8不明,大概是有的),在打开关闭Windows功能里找吧。
客户端装好后,先跑一遍(地址什么的随便)让Windows防火墙放过它。然后设置网络连接的ipv4为手动,自己的IP为192.168.11.2,子网掩码255.255.255.0,网关192.168.11.1。
以管理员身份启动一个cmd,输入 route print ,找到你连接路由的网卡,开头的那个数字就是接口号,记下来。然后
如果你用vista以上系统,输入
netsh interface ipv4 add neighbors 接口号 192.168.11.1 <MAC>
如果是XP系统,就是
arp -s 192.168.11.1 <MAC>
然后就可以设置tftp客户端了。把服务器(Host)的IP设为192.168.11.1就可以了,如果是用Windows自带客户段,那么就在命令行里继续输入(不要打回车)
tftp -i 192.168.11.1 PUT 固件文件名
设置好以后,接通路由器电源,然后立刻开始tftp传输(比如按下回车)。某些客户端可能会有进度提示,这就代表tftp传输成功。
Linux
由于系统一般自带的软件仓库都会有——有的甚至有好几个——tftp客户端,tftp或者tftp-hpa都可以。我用的是tftp-hpa。软件包的下载和安装请参考发行版帮助和man page。
刷机前要干掉网络管理,但如果你使用了交换机或者虚拟机,那么可以跳过这步。Debian系系统用
sudo service network-manager stop
命令,或者稍微通用一点的
sudo /etc/init.d/network-manager stop
都可以,然后执行(你需要自己用 ifconfig -a 确定接口名称替换eth0)
sudo ifconfig eth0 up
sudo ifconfig eth0 192.168.11.2
sudo ifconfig eth0 netmask 255.255.255.0
sudo arp -s 192.168.11.1 <MAC>
然后准备tftp客户端,tftp-hpa是
输入
tftp 192.168.11.1
进入字符交互界面,会有 tftp> 提示符
输入(tftp>提示符是指示用,请保证固件在当前目录)[2]
tftp> verbose
tftp> binary
tftp> trace
tftp> rexmt 1
tftp> timeout 60
tftp> put 固件名
输入最后一行先不要回车,这里tftp-hpa客户端就准备好了。
而使用tftp软件包则直接输入
tftp -m binary 192.168.11.1 -c put 固件名
据说使用curl也可以(据说甚至可以在MAC下成功刷机)
curl -T 固件名 tftp://192.168.11.1
刷机和Windows相似,先给路由上电,通电同时按回车。传输没有开始时是一秒刷两行,传输开始后会连续滚屏,滚屏结束表示传输完成。
如果失误了错过了路由启动时机,那么可以给路由断电然后从准备tftp客户端开始重来。因为不会刷UBoot所以理论上刷多少次都是没问题的。
刷入固件启动需要一段时间,视机器不同大约为3分钟到10分钟不等,而且第一次启动不一定可用,如果路由器完全连不上,可以考虑在路由器状态稳定后重启(断电重连)一次。
如果你看到无线指示灯亮起,一般表示固件已成功刷入并启动完成。[1]


浙公网安备 33010602011771号