Mar 17

WRT310N V2 升级DD-WRT 不指定

kcao , 09:42 , 技术 , 评论(0) , 引用(0) , 阅读(6297) , Via 本站原创

1. 先根据DDWRT官网上的方法,用30-30-30方式RESET路由器后刷DDWRT,但都报错说文件非法,奇怪,再用LINKSYS的界面升级DD-WRT MINI. 先想升级DD-WRT的STD,但是说不行,升级FAILED. 所以只能用MINI进行升级, UPLOAD SUCCESSFUL以后,过了很久网页变为不可用,等3分钟.

2. 再开机,发现糟糕.LED灯只有连接的3号网口亮,连POWER灯都灭了.计算机PING 192.168.1.1不通,改计算机IP地址为192.168.1.100后PING也不通.机器变砖...哭...

3. 用30-30-30方式RESET路由器,还好这界面还是有的.去LINKSYS官网下载了原厂固件,用此界面刷入.成功.还好,机器回生了.

4. 仔细查看后发现,原来刷入的DDWRT是给V1版的WRT310N的,应该是这个原因导致的失败,继续下载最新版的DDWRT,注意是要给V2版用的,最新的是2011年2月编译的SP2版,用FTP可以在DDWRT官网下载到.

5. 在LINKSYS的界面中刷DDWRT,继续出失败消息"FAILED""FAILED"...下载了老的SP1稳定版也是一样失败.用30-30-30 RESET路由器后刷,报错不是合法的IMAGE.刷DDWRT不成功.郁闷.

6. 停止使用IE,改用CHROME打开LINKSYS界面刷DDWRT,用SP2的最新编译的MINI版...成功了!

7. 想偷懒把原来WRT54GL中的配置文件导出再导入到WRT310N中,结果又一次导致机器变砖.看来只能自己手动配置了.

8. 再用30-30-30方式后直接用CHROME刷DDWRT,也成功了.然后手动配置路由器,累是累点,没办法.

重新设好网络,用T410测试速度(SPEEDTEST.NET),达到20M!很不错,下面就要花时间看WRT310N的稳定性了.

3/17,在EBAY上买了个INTEL 5100的N速网卡,准备给老机I6400换上提速.

看起来,在LINUX平台上,IE还是问题多多,这不,费了那么多事,换成CHROME就可以.我没试FIREFOX,估计那也成.

 

 

Tags: , , , , , , , , ,
Nov 19

这个BUG是老早就存在的,在我刚来公司没多久的时候,JACK就跟我说起过这个问题,这个问题的症状很奇怪,正常使用时,它永远不会出现,而当用户把屏幕锁定以后再过若干时间,就会有一长串的弹出窗口,更怪的是,这些窗口有时有,有时没有.

 

同事最近老是遇上这个问题,要我一定得想想办法,凑了点时间仔细查看了这个问题,发现如下的细节:

  • 这个错误出现的前提是: 1. 屏幕锁定, 2. 屏保出现
  • 程序的窗口需要是当前窗口,如果仅在后台运行,这个错误不会出现
  • 即使是在当前窗口,这个错误也不是每次都会出现,似乎与当前子窗口有关
  • 即使是相同子窗口,这个错误也是有时出现,有时不出现
  • 根据经验判断应该是定时器中出现的问题
  • 这个错误其实包括2个, 1. "A call to an OS function failed.", 2. "Access denied" 错误

由于这个错误只在屏幕锁定且有屏保时出现,我先把计算机的屏保设定为1分钟,以减少浪费的时间,然后用DELPHI打开工程进入DEBUG模式启动程序,再锁上屏幕等屏保出现.如果有效,那么出错时DELPHI应该截获这个出错信息并停留在那里.

1分钟以后,输入密码重新进入桌面,果然,DELPHI报错了,可是,错误的地方不是我的程序,而是进入了Forms.pas这个系统单元,在function TApplication.ProcessMessage这个函数中,停留在这句 TranslateMessage(Msg); 上.

按F8进行DEBUG,进入了ExtCtrls这个系统单元,原来是这里出的错,上面的函数是在 Application.HandleException(Self); 这里调用到的.继续F8,我的程序跳出了错误框,然后就结束了.没有找到哪里出错.不过,这也验证了的确是定时器的问题,但是,是哪个定时器呢?

我把主界面及子窗口中的所有定时器全部关闭,可是这个错误还是照常出现.奇怪了.

procedure TTimer.WndProc的定义如下:

Copy Code To Clipboard
  1. procedure TTimer.WndProc(var Msg: TMessage);
  2. begin
  3. with Msg do
  4. if Msg = WM_TIMER then
  5. try
  6. Timer;
  7. except
  8. Application.HandleException(Self);
  9. end
  10. else
  11. Result := DefWindowProc(FWindowHandle, Msg, wParam, lParam);
  12. end;

我把断点设在第6行 Timer上,用F7不断进行跟踪,跳转了几次后,发现进入了一个自定义的控件单元,有戏!

进入的函数是OnHintTimer. 看,这就是一个隐藏的TIMER不是.我在这个函数的开始加个EXIT使之禁用,再运行程序,锁屏,等屏保,再进入.果然没有错误了!看来问题就是在这儿.

程序函数中出错的地方居然是取鼠标位置的几句,很奇怪会出这样的错误.我又试了一下,恢复原来的代码,使当前窗口是此程序,如果把鼠标移到此程序窗口之外,再锁屏,等屏保,解锁再进入,果然就是没有错误的.

再次尝试,把出错的一段句子加上try...except....语句.在except中加上Mouse.CursorPos.x,结果...居然就没有错,晕死.

总结一下这个错误:当打开此程序,并激活某个使用特定控件的窗口,使此控件的OnHintTimer可用,并且鼠标指针在此控件上,能引发OnHintTimer事件.在这种情况下,锁定屏幕,使计算机进入屏保(如果不锁屏,只进入屏保也不会引发这个错误),然后再解除屏幕锁定,就会在此控件的OnHintTimer事件中发生错误,而发生的错误是在获得鼠标位置的语句.错误为"A call to an OS function failed.",由系统抛出.

老实说,这个错误非常奇怪,因为在OnHintTimer中只是获得鼠标位置,我甚至已经把此事件中的语句删得仅剩一句
x :=Mouse.CursorPos.x;
了.也还是一样的错误.到底为什么,还是一个谜,我会继续追踪下去.

无论如何,这个错误是找到了,要解决的话,只要在OnHintTimer事件中套上try...except...end语句,那么就不会出现那些烦人的错误框了.

Tags: , , , , , , , , , ,
分页: 1/1 第一页 1 最后页 [ 显示模式: 摘要 | 列表 ]