OpenWrt是一个高度模块化的嵌入式Linux发行版,专为路由器等嵌入式设备设计。通过编译自己的OpenWrt固件,您可以获得完全定制化的路由器系统,满足特定需求。本文将详细介绍从零开始编译OpenWrt固件的完整流程。
一、编译环境准备
编译OpenWrt需要Linux环境,推荐使用Ubuntu系统(建议使用16.04或18.04版本,某些新版本可能导致编译问题)。如果您使用Windows系统,可以通过虚拟机(如VirtualBox)安装Ubuntu。
1. 安装必要的依赖包
在Ubuntu终端中执行以下命令安装编译所需的工具和库:
sudo apt-get update
sudo apt-get install -y build-essential libncurses5-dev zlib1g-dev gawk git ccache gettext libssl-dev xsltproc subversion bison flex unzip wget python vim
对于64位系统,还需要额外安装32位兼容库:
sudo dpkg --add-architecture i386
sudo apt-get update
sudo apt-get install libc6:i386 libncurses5:i386 libstdc++6:i386
二、获取OpenWrt源代码
OpenWrt源码有两种获取方式:通过git或svn。推荐使用git方式,因为其feeds更新链接更稳定。
1. 克隆源代码
git clone https://github.com/openwrt/openwrt.git
cd openwrt
或者使用lede分支(一个流行的OpenWrt分支):
git clone https://github.com/coolsnowwolf/lede
cd lede
2. 更新feeds(软件包源)
./scripts/feeds update -a
./scripts/feeds install -a
如果遇到feeds更新失败的问题,可能是因为某些链接被屏蔽,可以尝试修改feeds.conf.default
文件中的链接或更换网络环境。
三、配置编译选项
OpenWrt提供了交互式配置界面,可以定制固件的各项功能:
make menuconfig
配置界面中需要关注几个关键选项:
- Target System:选择路由器的CPU架构(如Atheros AR7xxx/AR9xxx、Ralink RT288x/RT3xxx等)
- Subtarget:选择具体的芯片型号(如MT7620n based boards)
- Target Profile:选择具体的路由器型号(如TP-LINK TL-WR703N v1)
- LuCI:OpenWrt的Web管理界面
- 在Collections中选中
luci
- 在Modules→Translations中选中
Chinese (zh-cn)
添加中文支持
- 在Collections中选中
配置完成后保存退出,生成.config
文件。
四、开始编译
1. 预下载所需软件包(可选但推荐)
make download -j8
此步骤会预先下载编译所需的软件包,可以避免后续编译过程中因网络问题中断。
2. 正式编译
首次编译建议使用单线程,避免潜在问题:
make V=s
如果编译环境稳定,可以使用多线程加速编译(n为CPU核心数+1):
make -j$(($(nproc)+1)) V=s
编译过程可能需要1-3小时,取决于硬件性能和网络速度。编译过程中请保持网络连接,因为系统会实时下载一些依赖包。
五、处理常见编译错误
- 下载失败:某些软件包可能因网络问题无法下载。可以手动下载后放入
dl/
目录,或更换网络环境重试。 - 依赖缺失:根据错误提示安装缺少的依赖包。
- 固件过大:如果固件超过设备Flash容量,需要返回
make menuconfig
移除一些非必要组件。
六、获取编译成果
编译完成后,固件通常位于bin/targets/[架构]/[子型号]
目录下,有两种类型的固件:
*-factory.bin
:用于从原厂固件刷入OpenWrt*-sysupgrade.bin
:用于从旧版OpenWrt升级
例如,TP-Link WR703N的固件可能位于bin/targets/ar71xx/tiny/
目录下。
七、刷入固件
刷机方法因路由器型号而异,常见方式包括:
- Web界面刷机:在原厂固件或现有OpenWrt的Web界面中上传固件
- TFTP刷机:通过TFTP协议刷入(适用于某些品牌的路由器)
- 编程器刷机:使用编程器直接写入Flash芯片(适用于硬改设备)
刷机前请务必备份原厂固件,特别是ART(无线校准数据)部分。
八、后续维护
- 更新源代码:定期执行
git pull
获取最新代码 - 清理编译环境:
make clean
清理中间文件,make dirclean
彻底清理 - 重新编译:更新代码后建议执行
make clean
再重新编译
进阶技巧
- 添加自定义软件包:在
package/
目录下创建自定义软件包 - 修改内核配置:
make kernel_menuconfig
- 使用编译缓存:设置
ccache
可以显著加快后续编译速度
通过以上步骤,您就可以编译出专为自己路由器定制的OpenWrt固件了。OpenWrt的强大之处在于其高度可定制性,您可以根据需要添加各种功能,如VPN、NAS、广告过滤等,打造专属的智能路由器系统。
原创文章,作者:OXIDA,如若转载,请注明出处:https://www.lifeto.fun/archives/219