1. 几种故障恢复的方法
openwrt的故障恢复可以算是有四种方法,分别是安全模式,重置nvram,重新上传firmware,JTAG.这四种方法份量由轻到重,不到不得已还是不要请重量级选手出场啦.

遇到了问题,先根据症状,自己最后对openwrt做过哪些更改等情况,选择合适的方法来恢复故障。如果确实对症状不了解,或是记不清自己做了哪些更改搞坏了我的wrt,那么将wrt的状况描述清楚,去forum.openwrt.org上面问一下吧(这个很有用),看看大家建议你怎么恢复故障。如果没有人回答你(注意你的提问方法哦,这个很关键的),那只好由轻到重让几种方法依次登场了。实验都是在linksys wrt54G v4上进行的,请留意硬件的差异。

2.安全模式(failsafe mode)
为什么说这个是轻量级呢?这个模式就好像windows的安全模式,或者linux的单人维护模式一样,这个方法所做的更改都是可逆的(一定要记录你所做的更改哦),不会对wrt造成不可挽回的伤害,所以如果不知道怎么办时,先试试这个东东吧!

tips:进入安全模式可能会更改你的mac地址

2.1.怎样进入安全模式
对于linksys的wrt,正常开机情况是dmz灭,power灯闪烁二至三秒,dmz灯亮。想要进入安全模式,就在dmz亮起的那一刻,按住reset键两到三秒(多按一会也可以),看到dmz灯开始闪烁,大概频率是每秒闪三下,这样就进入了安全模式。

对于其他的router,是插上power后两秒钟,按下reset 10到15秒。如果你想更精确的了解进入failsafe mode时openwrt到底在做什么,用叫做recvudp的东西吧,没用过,就不乱讲了。。。参看一下官方文档吧。

2.2.在安全模式下能做些什么?
进入安全模式后,ip地址会被设为默认的192.168.1.1,没有密码,所以telnet登录上去吧,看看有什么设置是不合理的。可以更改nvram的设置,或者更改软件设置,实在搞不懂,就新传一个fireware上去吧.我一开始很多原理不懂,干脆都给他重置了。。。

2.3.重置nvram
如果还可以登录到wrt上,那输入以下命令就可以将nvram重置:

mtd -r erase nvram

如果wrt已经登录不上了,那可以按reset键重置nvram(linksys)。上面说进入安全模式,要在开机时dmz刚一亮起的时刻按下reset,如果dmz还没亮起,power还刚开始闪,就按下reset,则会刷新nvram到default了。按照我的经验,最好先按住reset,再接通电源,两三秒后,也就是dmz灯还没亮,就松开reset,这样nvram就会被重置了。

重置nvram,很多东西还要再重新配置,很麻烦,而且官方网站上说:Resetting NVRAM this way will actually cause more problems than it solves. For example, Asus WL-500g and the Motorola WR850G bootloader will not recreate default values and will not boot properly after being reset. If you do this on a Siemens SE505 V1, your router will not be accessible to you anymore! You will have to reflash it with the stock firmware on ip address 192.168.1.1 (NOT 192.168.2.1 as the installation procedure says!!) 貌似要引起很严重的问题。所以nvram的设置,自己最好做点记录。重置前先分析是不是nvram出了问题,自己最后一次登录上去改了nvram的什么设置?不要轻易出手阿!

3.重新上传firmware
如果是firmware出问题,那就要换一个firmware给他装上去了。

如果boot_wait=on,那么就像第一次上传firmware那样,用tftp传上去好了。多数情况是boot_wait=off了,tftp也不行,登录更不可能了,怎么办呢?这时候重量级方法该出场了,那就是短接管脚。通过短接管脚,我们可以将新的firmware上传到wrt上去。记得以前官方文档上讲过短接管脚(short pins),但是现在的文档好像去掉了?用这个方法可以解决一些问题的,当然也有一定的危险性。官方文档上讲了设置CFE的方法,我没有试过噢…

短接管脚其实很简单,不过要打开wrt的外壳,总觉得有点危险了。打开外壳后,找到那块intel的flash芯片。对于wrt54g version 2.2–version4.0,应该短接 flash 的16、17脚,其它的router,我没有接触过。参考官方网站吧。用个小刀之类的器具,要确保它的导电性良好。现在pc主机端准备好tftp命令,就像第一次上传firmware那样,然后接好16.17脚,再接power,应该看到power灯快闪,dmz慢闪(慢的好像不能称之为“闪”),松开短接的工具,执行pc端已经准备好的tftp命令,应该可以看到这样的信息: Transfer successful: 1537024 bytes in 6 seconds, 256170 bytes/s 如果不行,多试几次吧。还有一件事情比较重要,一般芯片上应该有个圆点标志第一管脚,以此为准确定管脚位置。可是这块芯片的管脚却是标在电路板上的,1.24.25.48四个管脚都标清楚了,看清楚16.17在哪里,再短接,接错了可就麻烦了!

4.JATG
截止到上面,一般问题都应该可以解决了。自制JTAG线,比较麻烦了。虽然做过一次,但是其中的原理不太懂。关键是linksys wrt54G v4.0好像变化比较大。比较全的文档可以去这里下载: http://downloads.openwrt.org/utils/HairyDairyMaid_WRT54G_Debrick_Utility_v45.zip 曾用JTAG刷过v2.2,但是4.0的硬件结构发生了一些变化,参考上面这个包里的文档。

JTAG线的制作参见:HairyDairyMaid_WRT54G_v2_DeBrick_Guide.pdf,需要注意的是,制作这根线时,要看好db25口的引脚,一般的口上都是标着的,一定搞清楚文中那张图db25口的前后方向,不要颠倒了。硬件照着这篇文章,很好做,只要一点电工的基础就行。刷CFE的时候,可以在windows下,也可以在linux下。还需要几个软件,也包括在上面那个压缩包里了,windows下分别是wrt54g.exe、
loaddrv.exe、和giveio.sys。先用loaddrv.exe 来load giveio.sys,然后运行wrt54g.exe,看他的说明(这个网页上有:http://www.wlan-skynet.de/docs/ortsverteilung/wrt54g/flash-datentransfer2.shtml),你所要做的就是两个指令:备份cfe,再刷上去新的cfe(用JTAG刷nvram或者kernel需要很长时间),新的cfe可以从skynet repair kit生成(去这里下载http://www.wlan-skynet.de/download/index.shtml,这个软件安装后要升级、重启才行)。刷完以后再重启,就可以了。