编译OpenWrt for WR720N

OpenWrt 12.09 正式版貌似出来了,但仍旧没有支持 WR720N,只好自己编译了,幸亏有硬件类似的 WR703N,再参考这篇文章总算解决了问题。

官方编译教程提到有可能在 BSD 或 OS X 里编译,OS X 下必须用区分大小写的分区格式里进行,当然不用新建一个分区那么麻烦,创建一个dmg再挂载:

hdiutil create -type SPARSE -fs 'Case-sensitive Journaled HFS+' -size 40g ~/openwrt.dmg

Debian可以选择不安装图形界面,通过SSH连接。

###1.下载源码

先把源码下载下来,并更新:

git clone git://git.openwrt.org/12.09/openwrt.git
./scripts/feeds update -a
./scripts/feeds install -a

###2.替换字符串

更新完后,需要把各种文件里关于WR703N的字符串改成WR720N,这里用grep命令:

grep -i 703n ./openwrt/* -r -l

会列出大约十多个文件,理论上可以用sed来修改,但我还没熟练掌握sed的用法,为了避免改错还是人肉修改吧。此外,还需要把关于路由的文件头信息改了,将WR703相关的07030101改成07200103,以及070300改成072001,同样是先用grep查找。最后将文件./target/linux/ar71xx/files/arch/mips/ath79/mach-tl-wr703n.c改名。

###3.添加网口

修改./target/linux/ar71xx/base-files/etc/uci-defaults/network来添加一个网口,找到WR720N相关的这一行:

ucidef_set_interface_lan “eth0″

改成:

ucidef_set_interfaces_lan_wan "eth1" "eth0"

修改./target/linux/ar71xx/files/arch/mips/ath79/mach-tl-wr720n.c,即刚才改名的文件,添加刚才增加的网口信息,把最后一段改成如下内容:

ath79_register_usb();
ath79_init_mac(ath79_eth0_data.mac_addr, mac, 1);
ath79_init_mac(ath79_eth1_data.mac_addr, mac, 2);
ath79_register_mdio(0, 0×0);
ath79_register_eth(0);
ath79_register_eth(1);
ath79_register_wmac(ee, mac);

###4.添加模式切换开关

路由器上的AP/3G/Route开关实际是包含两个按钮,三个状态。编辑./target/linux/ar71xx/files/arch/mips/ath79/mach-tl-wr720n.c,添加两行:

#define TL_WR720N_GPIO_BTN_SW1    18
#define TL_WR720N_GPIO_BTN_SW2    20

后边有个函数是定义Reset按钮的,在函数里边接着添加:

,
{
    .desc = "sw1",
    .type = EV_KEY,
    .code = BTN_0,
    .debounce_interval = TL_WR720N_KEYS_DEBOUNCE_INTERVAL,
    .gpio = TL_WR720N_GPIO_BTN_SW1,
    .active_low = 0,
},
{
    .desc = "sw2",
    .type = EV_KEY,
    .code = BTN_1,
    .debounce_interval = TL_WR720N_KEYS_DEBOUNCE_INTERVAL,
    .gpio = TL_WR720N_GPIO_BTN_SW2,
    .active_low = 0,
}

注意,这只是让编译后的固件支持切换开关,具体要让它实现什么功能可以参照官方WiKi的Button页面的方法。

###5.编译

现在可以编译了,注意不能使用root账户编译。make menuconfig会检查缺少的包,依次安装既可。Linux下不同发行版的相同软件包名字可能不一样,这是个蛋疼的问题,比如提示缺少ncurses,Debian下需要安装libncurses5-dev而Fedora里是ncurses-devel。编译前会下载各种包,请保持网络通畅。每次编译都要花半个多小时,在虚拟机里我都把4个内核用上了,不知道如果不采用虚拟机时间会不会有明显缩短。

需要挂载U盘的话,得手工添上kmod-usb-storage、kmod-usb-storage-extras、kmod-fs-ext4、kmod-fs-vfat、block-mount等包,不建议是用ntfs格式。

如果要使用Wallproxy,需要自己编译python-gevent,幸亏已经有人把Makefile写好了,下载后放到./package/的自定义文件夹中,软件包可以单独编译:

make package/greenlet/compile V=99
make package/gevent/compile V=99

当然,也可以下载我编译好的ar71xx版的gevent

###6.一些问题

menuconfig里选择添加哪些包非常不容易,看似为了方便给你分类好了,但分类的方式非常奇葩,还不如按名称排列别分类了。

另外,我编译好之后版本号写的是Attitude Adjustment 12.09-rc1,默认的软件源也是用官方12.09-rc1,可是安装的时候总提示内核版本不对,还得自己把所有的包编译好……话说WR720N的patch早在几个月前就有人提交,到现在还没进展,效率啊。

注意刷机有风险,尽量在保修期内猛刷吧。