wndr3700刷openwrt固件

本来给wndr3700刷dd-wrt固件,是为了可以部署autoddvpn。可惜autoddvpn同时需要vpn和jffs 的支持,然而,由于这俩居然有冲突,从dd-wrt v24 sp1里已经把jffs给去掉了。而wndr3700能用的BrainSlayer版本固件,却对autoddvpn支持不好——这都神马事啊。

此外,在wndr3700上dd-wrt还有些瑕疵,比如5G Hz的灯总是闪蓝光,很烦人;另外不支持802.11N。

后来,才发现原来和wndr3700最搭配的是openwrt固件,编译的时候直接就有for wndr3700的编译选项,并且最新的openwrt加上luci管理界面编译出来才3.2MB,不到dd-wrt固件的一半大小。此外,openwrt使用和debian apt非常类似的opkg管理软件包;它的配置文件也比dd-wrt更接近正常linux的风格;它的文档非常健全规整。

由于wndr3700有多个型号,flash大小不同,如果你不确定wndr3700的型号,可以使用如下命令查看flash大小:

$ dmesg | grep m25p80

在编译自己的openwrt固件之前,需要先安装编译环境(Ubuntu环境):

$ sudo apt-get install subversion g++ ncurses-term zlib1g-dev gawk flex patch openssh-server tftp

checkout最新的源代码,或者使用其他分支

$ svn co svn://svn.openwrt.org/openwrt/trunk/ openwrt

checkout软件包,我一般用到openvpn、ntpclient、luci、luci-app-wol、luci-app-qos、luci-app-ddns等包:

$ cd openwrt
$ ./scripts/feeds update -a
$ ./scripts/feeds install -a

现在,可以选择合适的编译选项进行编译了:

$ make menuconfig

所有选中的包都应该选为build-in(*),而不是(M):

  • Target System → Atheros AR71xx/AR7240/AR913x
  • Target Profile → NETGEAR WNDR3700
  • Kernel Modules → LED Modules → kmod-leds-wndr3700-usb = YES
  • Kernel Modules → Wireless Drivers → kmod-ath → Force Atheros drivers to respect the user’s regdomain settings = YES
  • Network → crda = YES

如果需要fxxk gfw,需要这样一些软件:

  • Network → VPN → openvpn = YES
  • Network → Web Servers/Proxies → obfsproxy = YES
  • Network → Web Servers/Proxies → pdnsd = YES

如果希望接个USB声卡,把路由器变成airplay音乐播放器(就像airport express)。这里需要把shairport这个软件,但它不在openwrt默认的软件包里,需要如下方法加入:

$ cp feeds.conf.default feeds.conf
$ echo "src-git mikejuni git://github.com/mikejuni/OpenWRT-ShairPort.git;master" >> feeds.conf

然后,重新checkout软件包,这样就可以添加shairport了:

  • Sound → shairport = YES
  • Utilities → alsa-utils = YES
  • Kernel Modules → Sound Support = SELECT ALL YES

如果希望接个U盘,在上边安装更多的软件,则需要增加FAT、EXT2文件系统,以及USB相关的工具:

  • Base system → block mount = YES
  • Base system → busybox → Linux system utilities → mount → support specifying devices by label or uuid = YES
  • Base system → busybox → Linux system utilities → Filesystem/Volume identification → fat filesystem = YES
  • Kernel modules → Filesystems → kmod-fs-ext4, kmod-fs-msdos, kmod-fs-vfat = YES
  • Kernel modules → USB support → kmod-usb-storage, kmod-usb-uhci = YES
  • Utilities → Filesystem → e2fsprogs = YES

最后,建议安装一个管理界面luci或者webif:

  • LuCI → Collections → luci = YES

开始编译:

$ make

可以使用 -j 参数,推荐CPU核数增一。如果编译出错,可以使用 V=s 参数查看更多编译日志。

最终会在 bin/ar71xx/ 目录下生成目标固件,一般只需要关注这三个:

openwrt-ar71xx-generic-wndr3700-jffs2-factory.img
openwrt-ar71xx-generic-wndr3700-squashfs-factory.img
openwrt-ar71xx-generic-wndr3700-squashfs-sysupgrade.bin

其中,.img 固件用于从路由器的recovery模式下使用tftp刷机,.bin 固件用于已经装完openwrt之后的升级。此外,squashfs固件刷完后,固件仅以只读方式mount在 /rom 目录下,整个根目录还是以jffs文件系统格式mount的,jffs格式的特点是不怕掉电。

关于无线中继

家庭布网若要使用无线中继,推荐主路由刷openwrt,然后中继路由器使用 tp-link wr700n 这样的mini路由。wr700n做无线中继 非常方便,主路由无需配置任何WDS相关东东。