开源的好处,修改Linksys AG241 ADSL路由器的Firmware
文章信息
关键字:adsl;modem;router;linksys;ag241
本文版本:8
最后修改于 2008-11-03 23:02:13

AG241 V1
两天过后,货终于到手了,成色不错,可惜是V1版本的硬件。迫不及待装上一看,这玩意的Firmware是官方最老的版本……2004年的V1.00.04 ……。这个版本Bug很多,稳定性也一般,二话不说,刷!网上找了半天,在linksys英国的网站上找到了新一些的版本。但是据说稳定性方面还是存在一些Bug。于是我就开始寻找非官方的版本。终于功夫不负有心人,在澳洲的一个讨论网络设备的网站whirlpool论坛,我找到了非官方的Firmware——Phoenix Edition。这个版本是基于官方的2.01.03版本修改的,修正了许多的Bug。赶紧下载刷上。使用了两天之后,果然稳定无比,以前MT800遇到的一些小问题例如半开连接限制等等都没发现。在使用中发现,由于这个Modem的CPU用的是主频150Mhz的TI的芯片,能够支持ADSL、ADSL2和ADSL2+,因此在我用ADSL上网的时候,简直是杀鸡用牛刀,以至于在2M带宽全速下载时,用telnet登录到Modem中看性能,CPU负载连20%都不到……
不过虽然这家伙好用的很,但是,对于我来说还是有点遗憾的。官方和非官方的Firmware中的DDNS(动态域名解析)功能支持的服务提供商只有两家,一个是dyndns.org,另一个是tzo.com。非常可惜,这两个国外最流行的动态域名服务商都被我们的伟大的GFW拒之门外了。所以,我想把对国内的3322.org这样的DDNS服务商的支持功能加到AG241的firmware中。
接下来就要感谢Linksys,感谢linux,感谢3322.org了。伟大的Linksys选用了伟大的linux作为了设备平台,同时在用户的质疑后,遵循了伟大的GPL许可证公开了源代码。伟大的Amiga同志在官方的Firmware的源代码的基础上修改出了伟大的Phoenix版本的固件,同时也公开了源代码。另外,伟大的3322.org也公开了他们DDNS服务的技术细节(不象某X生壳同志,要了解协议得交钱)。而我,就只要在这伟大的Phoenix版本的固件源代码的基础上做那么一些小小的改动,把对3322.org的DDNS的支持很方便的加进去。
说说轻松,弄起来还是挺麻烦的,首先要解决的是交叉编译平台。这玩意我折腾了两天装了两遍才好。第一次装好系统环境后,自己编译完toolchain,不管怎么修改,编译firmware时老是这边那边的报些小错。后来参考了又一位澳洲仁兄的网站,重新装了个Linux系统,同时参考了Google大仙的若干建议,终于给成功的编译出了一个直接用Amiga的Pheonix源码的Firmware(未对代码进行任何修改,只是测试交叉编译平台)。但是虽然成功的生成了upgrade_code.bin文件,不过在编译的过程中还是有一个error message:
/mipsfple/bin/../mipsel-hardhat-linux/bin/ld: cannot find -lpcap
collect2: ld returned 1 exit status
make[4]: *** [uml_netjig] Error 1
这个错很让我担心,这是在编译FreeS/Wan时报的错,应该是交叉编译环境缺少libpcap造成的。最后经过Google的确认和查看FreeS/Wan的文档,确认这个uml_netjig仅仅是被用于测试和Debug时使用的工具,应该不会影响到VPN的功能。OK,Let's skip it.
最后,就需要检查我的胆量了,冒着AG241变成砖头的危险……我把自己编译未改过的Phoenix源代码而得到的upgrad_code.bin文件刷进了系统……幸运的是……AG241还活得很滋润,哈哈!BINGO!第一次就成功啦!可以朝下一步努力了!
接下来就是枯燥的代码修改工作了,好在Firmware里用的是ez-ipupdate来实现DDNS的功能,这玩意以前我也弄过,还是挺熟的,所以差不多两个小时不到就搞定了代码。在这个过程中比较麻烦的还是一些AG241里面设置方面的代码。查看完源代码后发现,整个DDNS功能是这样实现的:用户首先在Web界面上设置后后提交给一个后台的CGI程序,这个程序会把用户的设定写到AG241的NVRAM中,然后每次AG241开机,rc程序会自动从NVRAM中读取用户信息,然后生成/tmp/ddns.conf,接着,执行ipupdate读取这个配置文件更新服务供应商那里的信息。因此这个修改就涉及到三个地方:
- Web页面要修改出3322.org的设定界面
- 开机执行的rc/ddns.c中要修改相应的3322.org的设定段
- ez-ipupdate的代码要加入3322.org的处理代码段
改好这些,编译,刷Firmware!这次我一点都不担心,因为最坏的情况就是DDNS功能出错,AG241是不会变成砖头的了!不过我最近运气真的很好,又是一次通过,哈哈3322.org成功接受了我的更新信息!

加入3322.org支持的Firmware,小小的汉化了一下这个页面
真是要感谢开源带来的好处啊,能让我定制自己的Firmware!下一步,我准备把整个Firmware的Web设定界面修改成中文的,再修正一些Phoenix版本的固件中的Bug(例如数据统计中,下载和上传的计数统计超过4G就自动清零的Bug),然后再发布我修改的版本的Firmware以方便国内的AG241的用户吧,如果有什么新鲜的想法,不妨告诉我一下,我看看能不能加到Firmware中:)。
| 年 月 | ||||||
| 日 | 一 | 二 | 三 | 四 | 五 | 六 |
| 29 | 30 | 31 | 1 | 2 | 3 | 4 |
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 | 1 | 2 |
[做人要厚道,看帖要回帖,点击发表评论]
显示评论
隐藏评论
评论列表
发布于 2008-11-03 14:39:47 |



