硬件
为了研究传说中的dd-wrt与tomato系统,专门买了一个linksys e3200路由器。
CPU | Broadcom BCM5357 | 500 MHz |
---|---|---|
Flash ROM | Winbond 25Q128BUFG | 16 MB |
RAM | EtronTech EM6AB160TSC-5G 32M x 16 bit | 64 MB |
NVRAM | 60KB | |
Radios 2.4 Ghz | Broadcom BCM47186 (SoC) | IEEE 802.11b(1,2,5.5,11Mbps)/g(6,9,12,18,24,36,48,54Mbps)/n(up to 300+300 Mbps) |
Radios 5 Ghz | Broadcom BCM43236 | IEEE 802.11a(6,9,12,18,24,36,48,54Mbps)/n(up to 300+300 Mbps) |
Antenna Location | Internal | 3 |
Switch | BCM53125SKMMLG | 4x GigE + 1 WAN |
USB | 1x USB 2.0 |
e3200的cpu为bcm5357(有些网站上说是BCM47186,但我在cpuinfo中看到的是5357),频率为500mhz,千兆交换芯片为bcm53125,5g频段的无线芯片为bcm43236,内存为64m,
flash为16m,4口千兆交换机+1口千兆wan口,附带一个usb2.0接口,内置6天线。
在路由器的选择上,也考虑过华硕等其它品牌,不过还是对cisco更信赖,也有深厚的感情,就只在linksys里面找了。考虑到以后会尝试很多复杂的应用,所以比较在意cpu的性能,500mHz已经是市场上很高的了。能挂硬盘是很多应用的基础,所以usb接口必不可少。低于32m内存的话挂bt就会需要swap,所以内存也越大越好,64m内存也是原装中最高的,以后有必要的话再改装成128m的吧。16m的flash就是装complete的tomato固件也游刃有余了。这一款很让人满意。而在12月1号,
http://tomato.groov.pl 刚刚出了最新的固件,已经能够完美支持2.5G与5G双频了。
这款的外形还不错。淘宝上买了原装官翻的,500块,拿到手的外形很完美,没有划痕。发热量比家里tp-link的要大,不过也只是点点温热。能带动我的移动硬盘。
固件,刷机
在选择固件方面做了点调查,主要可用的有dd-wrt,原版tomato,dualwan tomato。在网上看了一些介绍与使用心得,大体上我的理解是dd-wrt比较老牌,tomato是近来发威流行起来的,稳定性和功能都不逊于dd-wrt。而且已经能完善到在很多路由器上实现直接刷机而不用通过先刷dd的过度方式。出于初学者随大流的考虑,选择了tomato。而至于原版tomato和dualwan tomato相比,由于现在不太在意双wan双拨来提高带宽,所以暂时选择了原版tt入手,怕万一刷砖了就麻烦了。
在刷机过程中,有几个觉得需要知道的基本知识。
ram,flash,nvram,CEF:这四个是一个路由器所有的存储介质。CEF相当于PC的bios;flash相当于PC的硬盘,用来存放操作系统,也就是固件;nvram相当于PC的cmos,保存路由器的一些设置;ram则与PC的ddr内存一样,是运行时系统存储。
当路由器插上电后自动进入CFE,CFE进行类似PC的BIOS那样进行自检,自检通过后就引导存放在flash中的固件,加载到ram里供cpu执行,并会读取nvram的内容完成自我配置。正常情况下最多一分钟路由器的固件就会引导完毕,并且Power灯是常亮的。如果Power灯一闪一闪,那一般是CFE没有引导成功路由器的固件(固件不存在、不正确、已损坏等等)。
通常的刷机都是刷flash,而nvram里的内容都是跟固件相伴而生的,所以刷了新的flash就应该把nvram的内容清空。这就是为什么刷机前,刷机后都要来一遍传说中的“30-30-30”。当然,能够进入shell模式的话,可以通过命令来清nvram。
我用的固件是从
http://tomato.groov.pl
下载的,固件的文件名是
tomato-E3200USB-NVRAM60K-1.28.RT-N5x-MIPSR2-097-AIO.bin
命名规则一般是tomato-(型号)(是否带USB支持)-NVRAM(nvram大小)-(内核版本,1.28是基于linux2.6内核)-N5x-MIPSR2-097-(功能,比如BT,VPN支持,mini表示最简单版本,适合flash小的,AIO应该是all in one的完整包)
直接通过原系统的upgrade页面刷机。前后“30-30-30”,紧张的看着灯在一闪一闪和熄灭间折腾了一会后到常亮状态。
这里提到的“30-30-30”是如下一个过程,用来清nvram,最好刷机前后各一次完整的流程。
时间 30秒 30秒 30秒 之后
reset 按住 按住 按住 放掉
电源 通电 断电 通电 通电
http://www.dualwan.cn
是个不错的网站,
“
常见问题解答”还有“用户手册”页面都非常值得细读。
初尝系统
刷完后简单配置了一下网络,实现基本的家用路由设置,然后把usb支持,nas(network attached storage)以及ftp支持打开。在PC以及ipad上都试了一下,很快就找到了这个共享文件夹,看720p的电影毫无压力,但是1080p的就比较卡了。
当然,在设置网络的时候,无线功率要调一下,tomato默认的是42mW,太小了,会导致信号弱,无线网速慢。我调高到了70mW,已经能够穿墙150mbps了。
接着就打开ssh访问,进入了路由器的shell。
先来看看文件系统吧
root@router:/# ll
drwxr-xr-x 2 root root 564 Oct 21 02:43 bin/
drwxr-xr-x 2 root root 3 Oct 21 02:45 bkp/
drwxr-xr-x 2 root root 3 Oct 21 02:45 cifs1/
drwxr-xr-x 2 root root 3 Oct 21 02:45 cifs2/
drwxrwxrwt 5 root root 1620 Jan 1 1970 dev/
lrwxrwxrwx 1 root root 7 Oct 21 02:45
etc -> tmp/etc/
lrwxrwxrwx 1 root root 8 Oct 21 02:45
home -> tmp/home/
drwxr-xr-x 3 root root 1024 Nov 27 00:46 jffs/
drwxr-xr-x 3 root root 218 Oct 21 02:45 lib/
lrwxrwxrwx 1 root root 7 Oct 21 02:45
mnt -> tmp/mnt/
drwxr-xr-x 2 root root 3 Oct 21 02:45 nas/
drwxr-xr-x 9 root root 1024 Nov 30 22:40 opt/
dr-xr-xr-x 57 root root 0 Jan 1 2000 proc/
drwxr-xr-x 4 root root 32 Oct 21 02:45 rom/
lrwxrwxrwx 1 root root 13 Oct 21 02:45
root -> tmp/home/root/
drwxr-xr-x 2 root root 784 Oct 21 02:45 sbin/
drwxr-xr-x 10 root root 0 Jan 1 2000 sys/
drwxrwxrwx 2 root root 3 Oct 21 02:45 tftpboot/
drwxrwxrwx 10 root root 260 Nov 30 23:34 tmp/
drwxr-xr-x 8 root root 95 Oct 21 02:45 usr/
lrwxrwxrwx 1 root root 7 Oct 21 02:45
var -> tmp/var/
drwxr-xr-x 3 root root 2694 Oct 21 02:45 www/
注意看,etc,home,mnt,root,var都是symbol link到tmp下面的,这与普通的linux系统有些不一样。试验了一下,在tmp下面,以及其子目录下面,是可写的,但是重启后数据全丢失;而在除tmp(以及symbol link到其下的目录)以外,其它目录都没有修改的权限。
可以得出结论,tmp下的数据都只存在ram里面,而其它的目录都是在flash上的。其中,jffs目录对应flash存放固件后剩下的空间,是可用的,但是必须在管理页面打开访问权限后才能使用。
www目录当然存放的就是路由器管理页面的代码了。主要用的asp来做的。
刚刷的系统像vi,sed,awk,wget,ping,netstat等常用工具都有了,实现的方式都是内置的busybox
root@router:/# which ping
/bin/ping
root@router:/# ll bin/ping
lrwxrwxrwx 1 root root 7 Oct 21 02:45 bin/ping -> busybox*
安装软件
能够安装软件是一切扩展功能的开始。但有一系列的问题要解决。
1,装在什么地方?
刚也说了,只有tmp下是可写的,但是重启后就没有了,这软件装在哪里呢?也就是说哪里的存储资源是可用的呢?
jffs:这是第一个救命稻草。刚说了,它实际上是flash上存了固件后剩下来的空间,打开后是可以用的。这也是很多路由器装软件的地方。但是,这确实只是稻草,因为太小了,没几兆,装不了多少东西。
usb:这才是终极解决方案,要多大就有多大。只不过,需要是得ext3的文件格式。于是我小心的用pq magic把移动硬盘挪出几个G的大小格式化成ext3的格式。
有了硬资源后,下面需要一些软件的配置。
软件都是要装到/opt下面的,现在有这个目录存在,但是不可写,也是空的。需用通过mount bind命令来把可用的空间mount到opt目录。
如果使用jffs,则可以用下面的命令
cd /jffs
mkdir opt
mount -o bind /jffs/opt /opt
对于我用移动硬盘,为了跟用jffs看起来一样,故技重施一下,把移动硬盘中的目录先mount到jffs
cd /mnt/linux
mkdir jffs
mount -o bind /mnt/linux/jffs /jffs
然后再接着运行之前的命令,这样我的linux盘下jffs目录中也有了opt目录,而就是实际mount到/opt的位置。
这样的mount命令在重启后就失效了,/opt重新变成空的不可写空间了。所以我把如下脚步通过USB support配置页面加到“
Run after mounting
”,这样每次重启后,只要移动硬盘插着的就会自动完成这一系列步骤
if mount | grep -q /tmp/mnt/linux ; then
mount -o bind /mnt/linux/jffs /jffs
mount -o bind /jffs/opt /opt
fi
2,用什么装软件?
最简单流行的当然是ipkg包了。网上很容易搜到安装方法,举例如下:
- cd /tmp
- wget http://bbs.dualwan.cn/downloads/optware-install.sh -O - | tr -d '\r' > /tmp/optware-install.sh
- chmod 755 optware-install.sh
- sh optware-install.sh
其中,optware-install.sh是一个用来安装ipkg的脚本文件,wget用来从指定url下载这个文件(很多地方都有这个文件,内容相同),由于直接下载下来的这个文件换行符有问题,所以要通过管道执行tr -d '\r'来处理一下。
下载这个文件后,打开看了一下,用的ipkg软件源是http://ipkg.nslu2-linux.org/feeds/optware/ddwrt/cross/stable,在网上也能找到一些别的ipkg源,但是这个是用的最多的,也是从我这测试网速相对最稳定的,虽然也非常慢,而且也丢包。
执行这个脚本的时间比较长,基本上看到的都是wget下载的进度显示,还经常stall,好不容易装完后,ipkg update更加慢,ipkg install更是卡的让我不能忍,甚至怀疑是不是我路由器的问题。我用wget抓了个网易的主页,瞬间完成,然后又比较了一下ping网易和ping ipkg.nslu2-linux.org的速度,总算安心了,我路由器没问题,是这个源的网速问题。
我几乎都没有用ipkg install成功安装过一个软件,总是下到一半就断了,或者文件下载错误了。
无意中在
http://www.dualwan.cn/index.php/download/category/52-tomato-dualwan
找到了一丝灵感,装了完整版本的wget,然后给这个源在本地一次性的做一个镜像。
wget -m http://ipkg.nslu2-linux.org/feeds/optware/ddwrt/cross/stable
把所有的安装包都扒下来后,自己另外建一个http server,把文件夹挂过去,然后把/opt/etc/ipkg.conf中的src改成自己的url,ipkg update一下,再安装软件时就飞一样了。
这个完整版的wget很强大,值得好好研究,把玩一下。实际上,在用上面提到的wget -m命令做镜像的时候,发现下载的index.html文件不完整,缺少部分ipk的链接,导致没有下载这些缺失的ipk文件。另外,发现这个命令不只是抓stable下面的文件,还往上递归了,下了很多不需要的东西。
感觉最好的方式是用wget把http://ipkg.nslu2-linux.org/feeds/optware/ddwrt/cross/stable/index.html文件下载下来,确保其完整性。然后用如下命令来下载里面出现的所有链接的文件。-i表示输入下载文件url列表,-F表示这个输入文件是html格式的,-B指定输入文件中相对路径url的前缀
wget -i index.html -F -B http://ipkg.nslu2-linux.org/feeds/optware/ddwrt/cross/stable/
我下载的时候网速差不多10k以内,有时候半天不动,如果一次下载出问题了,可以kill掉这个进程后再用同样的命令加上-c来断点续传。
正是折腾这个镜像的过程中让我见识了wget的强大。
dualwan的那个页面还有一个好玩的工具openwrt_cpu_bench,路由器的一个跑分工具,show一下我的数据
This is CPU and memory benchmark for OpenWRT v0.6. This will then take some time... (typically 30-60 seconds on a 200MHz computer)
Overhead for getting time: 27us
Time to run memory bench: 2.57[secs]
Time to run computation of pi (2400 digits, 10 times): 6.08[secs]
Time to run computation of e (9009 digits): 5.35[secs]
Time to run float bench: 2.45[secs]
Total time: 16.5s
You can copy/paste the following line in the wiki table at: http://wiki.openwrt.org/HardwarePerformance
|| 2012-12-01 || ''Author'' || 2.6s || 6.1s || 5.4s || 2.5s || v0.6 || ''OS'' || ''DeviceModel'' || ''CPU model'' || ''CPU Frequency'' || ''LinkToHwPage'' ||