编译自己的 OpenWrt 固件
编译环境:Ubuntu 14.04.2 64-Bit
路由器型号:TP-LINK TL-WR703N v1, 改过硬件:16M Flash / 64M Memory
固件也可以去官方下载:https://downloads.openwrt.org/
例如 TP-LINK TL-WR703N v1 的最新固件下载地址为:
- factory: https://downloads.openwrt.org/chaos_calmer/15.05/ar71xx/generic/openwrt-15.05-ar71xx-generic-tl-wr703n-v1-squashfs-factory.bin
- sysupgrade: https://downloads.openwrt.org/chaos_calmer/15.05/ar71xx/generic/openwrt-15.05-ar71xx-generic-tl-wr703n-v1-squashfs-sysupgrade.bin
优点是方便,缺点是不能自己定制,如果你是改过 Flash 大小的,那么也必须自己编译
可参考官方文档关于编译的章节:http://wiki.openwrt.org/doc/start#building_openwrt
以下是我对改过硬件的 TL-WR703N 编译适合的固件的步骤:
按以下步骤编译好的固件下载地址(如果你不想自己编译的话):
factory: https://www.dropbox.com/s/aqe1957l4swpw9w/openwrt-15.05-ar71xx-generic-tl-wr703n-v1-squashfs-factory.bin?dl=0
sysupgrade: https://www.dropbox.com/s/os5sz47ljfgt4i6/openwrt-15.05-ar71xx-generic-tl-wr703n-v1-squashfs-sysupgrade.bin?dl=0
-
获取最新源码,如何获取源码可查看:https://dev.openwrt.org/wiki/GetSource
git clone git://git.openwrt.org/openwrt.git
也可以获取特定分支的源码,例如我们获取 15.05 branch (Chaos Calmer) 这个分支
以下步骤都使用的这份源码git clone git://git.openwrt.org/15.05/openwrt.git
-
修改源码,使其适用于 16M Flash
参考的这篇文章:http://wiki.openwrt.org/toh/tp-link/tl-wr703n#mb_flash_mod进入源码目录
cd openwrt
-
打开 target/linux/ar71xx/image/Makefile 这个文件
将如下内容define Device/tl-wr703n-v1 $(Device/tplink-4mlzma) BOARDNAME := TL-WR703N DEVICE_PROFILE := TLWR703 TPLINK_HWID := 0x07030101 CONSOLE := ttyATH0,115200 endef
改为:
define Device/tl-wr703n-v1 $(Device/tplink-16mlzma) BOARDNAME := TL-WR703N DEVICE_PROFILE := TLWR703 TPLINK_HWID := 0x07030101 CONSOLE := ttyATH0,115200 endef
-
打开 tools/firmware-utils/src/mktplinkfw.c 这个文件
将如下内容:.id = "TL-WR703Nv1", .hw_id = HWID_TL_WR703N_V1, .hw_rev = 1, .layout_id = "4Mlzma",
改为:
.id = "TL-WR703Nv1", .hw_id = HWID_TL_WR703N_V1, .hw_rev = 1, .layout_id = "16Mlzma",
-
-
(可选)下载和安装所有可用的 Feeds, 如果不清楚 Feeds 是什么,可查看:http://wiki.openwrt.org/doc/devel/feeds
./scripts/feeds update -a ./scripts/feeds install -a
-
输入以下命令,检查哪些需要的包还没有安装:
make defconfig make prereq make menuconfig
例如在我这提示:
Build dependency: Please install ncurses. (Missing libncurses.so or ncurses.h) Build dependency: Please install zlib. (Missing libz.so or zlib.h) Build dependency: Please install the openssl library (with development headers) Build dependency: Please install GNU 'awk' Build dependency: Please install the Subversion client
安装缺少的包:
sudo apt-get install subversion libncurses5-dev zlib1g-dev libssl-dev gawk subversion
你或许还需要安装 build-essential 这个包,我是以前就安好了
-
配置编译详情
make menuconfig
输入以上命令之后,会进入一个命令行图形界面,界面最上面是用法
以下是我的一些配置,你可以选择性的参考
我的配置非常简单,如果需要额外的功能可以通过 opkg 来安装,所以固件简单点就好,反正之后还可以安装-
选择 CPU 型号
Target System 选为 Atheros ARM7xxx/ARM9xxx -
选择你的路由器型号
Target Profile 选为 TP-LINK TP-WR703N -
启用 Web 管理界面 LuCI
LuCI → Collections → 选中 luci -
添加 LuCI 中文支持
LuCI → Modules → Translations → 选中 Chinese (zh-cn)
-
-
生成构建的配置文件,检查依赖等
make defconfig
-
编译,可加上
V=99
参数输出所有调试信息make
在虚拟机中大概编译了一个半到二个小时,大多数时间都在下载,所以要保持网络通畅
编译好了之后可在 bin/ar71xx 目录找到生成的固件
openwrt-ar71xx-generic-tl-wr703n-v1-squashfs-factory.bin 和 openwrt-ar71xx-generic-tl-wr703n-v1-squashfs-sysupgrade.bin
已经安装了 OpenWrt 那么可用 sysupgrade 固件进行升级,会保留用户数据(也可选不保留)
factory 固件在第一次刷机的时候使用 -
刷机
我所使用的 U-Boot 是这个:https://github.com/pepe2k/u-boot_mod
步骤如下:-
将电脑 IP 设置为 192.168.1.2, 子网掩码设置为 255.255.255.0
-
断开路由器的电源,用网线连接好电脑和路由器
-
按住路由器的 Reset 按钮,插上电源,
待路由器灯闪四次后放开,放开后,路由器灯会快闪一次,代表进入了恢复模式 -
用电脑浏览器打开 http://192.168.1.1/index.html, 打开后,上传固件。如打不开可重复以上几步
-
上传完固件后,等一段时间,待机器自动重启
此时可将电脑 IP 设置为正常
-
-
配置系统
配置成网口 PPPoE 上网,电脑连接无线上网
因为系统初始是不开启无线连接的,所以你需要用网线将电脑和路由器连起来
-
电脑浏览器打开 192.168.1.1 进入 Web 管理界面
不用输入密码直接登录,登录之后去设置一个新密码 -
更改系统语言
Syatem → Language 修改为 Chinese, 点击 Save & Apply -
点击,网络 → 无线,设置好 SSID, 密码点击「保存&应用」,最后点击「启用」
现在可以通过无线连接到路由器进行配置了 -
配置网络还是修改配置文件比较方便,也比较好讲解
修改之前先备份配置文件cp /etc/config/network /etc/config/network.old
然后编辑配置文件vim /etc/config/network
-
修改 lan 配置,修改成如下样子
config interface 'lan' # 去掉这个,表示只有无线应用到 lan # option ifname 'eth0' option force_link '1' # 去掉这个,因为只有无线应用到 lan, 所以不需要桥接 # option type 'bridge' option proto 'static' option ipaddr '192.168.1.1' option netmask '255.255.255.0' option ip6assign '60'
-
增加 wan 配置,PPPoE 方式上网
config interface 'wan' option ifname 'eth0' option proto 'pppoe' option username 'USERNAME' option password 'PASSWORD'
最后使用如下命令重启网络服务:
/etc/init.d/network restart
-
以后配置路由器请使用无线连接方式,有线连接用于 PPPoE 上网
-