BLOG > 开源 > 开源的好处,修改Linksys AG241 ADSL路由器的Firmware

开源的好处,修改Linksys AG241 ADSL路由器的Firmware

最近家里的装宽带时电信送的华为MT800 ADSL Modem总是间歇性的抽风,而且开机第一次总是连不上网,非得等个5分钟再reset一下给他一鞭才行,看来是快要寿终正寝了。于是就准备在中国最伟大的百货公司taobao.com买个新的带路由和4个RJ45口交换的ADSL Modem,以免去我又要接modem又要接路由器/Switch的麻烦。挑了半天,最后选了个LinksysAG241。一是这个玩意牌子不错,我用的Linksys的WRT54GC,质量很好,感觉非常不错;二是用的德州仪器的TI AR7平台,基于Linux,自己可以找个源代码修改修改,根据自己的需要定制Firmware。

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:
/opt/TI-toolchains-2_1_0-cy07

/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中:)。

如果您喜欢这篇文章,您可以点击下列链接收藏
Del.icio.us Yahoo书签 365Key网摘 天极网摘 我摘 POCO网摘 YouNote网摘 和讯网摘 博啦网
发布时间 发布于 2008-11-03 14:39:47 | 阅读次数 阅读过3629次 | 分类 开源 | 评论 15条评论