前几天看到cyberspace版用路由器运行mytunet的截图,突然很感兴趣,于是购得La Fonera无线路由器一台。昨天拿到机器,经过一番折腾终于成功登陆了tunet. 在这里简单记录一下。
La Fonera是西班牙的FON 的第一款无线路由器,原本是为了用来构建FON独创的wifi共享社区而提供的。它使用一个基于openwrt的专用固件,加电运行时,会自动向FON的服务器注册。
因为FON的最终目的是wifi共享网络,这款路由器以很低廉的价格出售,在很多地区甚至曾经免费赠送。我在淘宝的买价是140包邮。卖家必然赚了不少。
(图转不上来了....)
La Fonera体积只有烟盒大小,硬件也非常精简:板上主要元件只有Atheros AR2315和一颗16M SDRAM,接口是1个WAN口(也可以用做LAN)加一根天线。但处理能力还算可以,有183MHz MIPS 4K的CPU,8M Flash和16M RAM. Atheros AR2315可谓SoC的典范,集成了CPU、Wifi RF、802.11 MAC/baseband、以太网口、Flash ROM、SDRAM控制器、UART等等。
***************************************************************
过程如下:
1. 刷写dd-wrt固件。基本按dd-wrt wiki 上的指示
i) 首先要破解原版固件的限制,否则不能SSH登录或升级非官方固件。因为机器比较老,固件版本是0.7.1 r1. 用这里 的方法,通过路由的web管理界面直接注入代码就可以启动SSH服务器dropbear,登陆之后再将其设为自动启动。更高版本的固件需要用kolofonium 方法破解,操作实际上更简单,但需要一个能直连国际网的有线连接...
ii) mtd hack: 下载openwrt-ar531x-2.4-vmlinux-CAMICIA.lzma和out.hex两个文件,因为我不能直连外网,把它们放在了本机的web server上(windows下,用的是EasyWebServer),再通过无线wget到路由器。依次
mtd -e vmlinux.bin.l7 write openwrt-ar531x-2.4-vmlinux-CAMICIA.lzma vmlinux.bin.l7
mtd -e "RedBoot config" write out.hex "RedBoot config"
之后就可以用RedBoot刷机了。
iii) 现在路由器的启动过程会停在RedBoot,因此无线不可用。用一根普通网线连接PC和路由,PC的IP设为192.168.1.xxx. 路由的默认设置是自动IP 192.168.1.254,上电10秒内可以telnet到9000端口。登陆后进入RedBoot界面,把准备好的dd-wrt v24 sp1固件(linux.bin)传到路由器上刷机。默认的传输方法是TFTP,但正好有个web server,就改用了web方式:
fis init (格式化)
load -r -b 0x80041000 linux.bin -m HTTP -h 192.168.1.xxx (载入固件到RAM)
fis create linux (刷写)
最后一步大约需要15分钟,过程中telnet不会响应。第一次刷的时候不小心多按了一下回车,结果telnet连接断开,等了一小时重启后发现没有成功刷写。可能是断线后尝试重连telnet干扰了刷写过程?
iv) 仍在RedBoot下,运行fconfig,改写启动脚本为
fis load -l linux
exec
重启后就是dd-wrt的系统了~~~
2. 启用jffs
dd-wrt v24sp1 for La Fonera体积不小,不过8M的Flash安装后尚有1.87M可用空间。文件系统中/etc、/usr等均为只读;/tmp可写,但实际是位于RAM. 启用jffs即可利用Flash的富余存储:在路由的web管理界面找到jffs选项,选中“启用”和“清除”并apply;重启后取消选择“清除”,确定即可。出现一个可写、非易失的目录/jffs. 文件系统占用300多K,实际可用约1.45M。
3. 尝试运行mytunet
在新水木LinuxApp版和旧水THUNet版分别找到了两个for MIPS的mytunet build。运行后出现下面的错误:
root@DD-WRT:/jffs/bin# uname -a
Linux DD-WRT 2.6.23.17 #5158 Sat Jul 26 03:47:50 CEST 2008 mips unknown
root@DD-WRT:/jffs/bin# ./mytunet
./mytunet: line 1: syntax error: "(" unexpected
一番搜索之后得知是MIPS的endianness问题,big endian的"mips"和little endian的"mipsel"并非二进制兼容。多数路由器都是mipsel,然而AR 2315的处理器恰恰是big endian. 看起来只有自己编译mytunet一条途径了。
4. 编译mytunet
mytunet的源码已开放,可从Google code下载。之后要建立交叉编译工具链:从uclibc.org 下载buildroot的snapshot,“make menuconfig”去掉不用的部件,“make”即生成工具链(在线下载源码编译,比较费时)。用buildroot/build_mips/staging_dir/usr/bin下的mips-linux-uclibc-gcc编译链接:
cd mytunetsrc/src/
mips-linux-uclibc-gcc -c -D_LINUX *.c mytunet-console/console/main.c
mips-linux-uclibc-gcc -D_LINUX -o mytunet *.o -lpthread
5. 重新编译mytunet
得到的文件可以在路由上运行,但mytunet set的配置不能保存。为此,修改mytunetsvc.c将配置保存位置由/etc/mytunet.conf改到/jffs/etc/mytunet.conf,重新编译。
配置得以成功保存。配置好eth0的IP后尝试用mytunet登录,却发现802.1x验证请求发送之后就没有了回应。尝试用别的办法来解决802.1x...
6. 尝试wpa_supplicant
我用的dd-wrt版本自带一个wpa_supplicant 0.6.2,但它仅有“madwifi”也就是用于Atheros的无线网卡的驱动,而登录校园网需要“wired”驱动。最初找到的几个wpa_supplicant版本或是mipsel的,或是同样没有“wired”驱动;几经周折,在OpenWrt的Atheros repo 里找到了wpa-supplicant_0.6.6-1_mips.ipk,终于可以满足要求。
(OpenWrt提供一个精简的包管理系统opkg,早期半杯叫ipkg;.ipk文件是ipkg/opkg的软件包。dd-wrt也有ipkg,可以使用很多为OpenWrt编译的包,但并不是全部,例如screen就无法正确运行。)
建立如下的/jffs/etc/wpa_supplicant.conf:
ap_scan=0
network={
key_mgmt=IEEE8021X
eap=MD5
identity="xxxxxxx"
password="yyyyyyy"
eapol_flags=0
}
其中identity和password处填入用windows版mytunet附带的Win802.1x.exe求出的值。
运行:
/jffs/usr/sbin/wpa_supplicant -Dwired -ieth0 -c/jffs/etc/wpa_supplicant.conf -B
成功通过802.1x认证!
7. mytunet登录
再次mytunet set,取消其802.1x认证。运行mytunet即告成功。
********************************************************
TODO:
1. 教育网直通车的自动连接
2. 用作维持网络连接的daemon脚本
3. OpenWrt
转载.清华电子电气工程专业一个娃子的..
1. 让路由器自动联学校的网
2. 折腾
2是主要目的...