
OpenWrt固件编译
基于lean的OpenWrt源码编译路由固件
基于lean的OpenWrt源码编译路由器固件
一、OpenWrt
1.1 OpenWrt简介
OpenWrt
是一个嵌入式设备上的Linux发行版。目前主流路由器固件有OpenWrt
、Padavan
、华硕梅林
等。
二、环境说明
一
由于国内网络环境问题,openwrt在编译过程中很多依赖网络获取的包会下载失败,进而导致编译失败。
故openwrt源码编译过程中,最好要保持全局代理
!
二
若使用Linux系统进行源码编译,一定不能在root用户下进行!
2.1 华为云ECS实例
购买一台公网在海外的CPU计算型服务器,这里以墨西哥实例为例。

Ping Google
可以极低延迟访问Google。
实测Github源码下载速率30+MB/s
:
Github Clone
2.2 环境依赖
添加32位架构支持
:
|
|
安装依赖库
:
|
|
三、固件编译
3.1 克隆lean的OpenWrt源码
-
克隆lean的openwrt源码: lede的Github仓库
-
更新feeds并部署:
|
|
3.2 OpenWrt Configuration
- 编译菜单配置:
|
|
如下图所示:

OpenWrt Config
以下为必配置项
Target System
Subtarget
Target Profile
Target Images
如何操作选择项可参照Configuration标题栏提示
手头的这个路由处理器是MTK的MIPS架构,故Target System
选择的是MediaTek Ralink MIPS。不清楚路由器CPU架构可以先上网搜索路由器型号的配置参数,然后搜索其处理器架构,便能悉知。
SubTarget
选择CPU型号
Target Profile
选择Openwrt预设的对应路由器型号的编译参数
Target Images
选择输出镜像的格式
剩余的选项中,基本上除了LuCI
以外的都无需改动。其中Build the OpenWrt SDK
为仅编译出openwrt开发工具包,当后续想要编译单个ipk包的时候,就可以仅选择此项,而不配置LuCI
。
3.3LuCI
定制
LuCI
配置如下图所示:

LuCI
其中,以下几项是编译固件过程中常需修改的:
Applications
Themes
3.3.1 Application应用包
Application
中按需选择固件中预置的APP包,需结合Flash容量限制,选择过多包会导致性能下降或者编译故障
(编译输出中会打印xxx.bin is to big !
,即编译出的.bin超过路由器flash的大小)。
3.3.2 Themes主题
默认主题修改
编辑feeds/luci/collections/luci/Makefile
|
|
其内容如下:
|
|
将其中的luci-theme-bootstrap
改为目标主题,例如luci-theme-argon
。
Save
保存操作!3.4 编译
3.4.1 dl依赖包获取
执行此步骤是为了在加快编译速度,即在正式编译开始前,提前准备好当前配置下的编译依赖文件,即此步骤可理解为预编译步骤。
|
|
其中,-j
选项为线程数,即以16线程下载预编译的dl依赖文件。
3.4.2 编译固件
|
|
其中,V=
选项为打印日志级别,V=99
代表打印所有输出日志。
网上诸多论坛均表示(包括作者lean
),“第一次编译建议-j=1,即以单线程编译”。个人认为并不需要这么操作,因为多线程编译时主要是很多日志不会打印出来,因此若编译出错就不好根据日志调错。但是不得不说lean
的这套代码还是很强大,除了编译环境
、flash容量限制
这两个问题外,一般不会出错,故首次编译鄙人认为无需强制单线程,先多线程编译,若编译出错再换单线程编译,因为单线程真的编译非常慢。
3.4.3 二次编译(扩展)
上述步骤为正常编译OpenWrt的一般步骤,以下内容为补充说明部分。
重复编译前最好删除临时缓存文件及配置信息,因为在编译过一次后,再取消选择Configuration
中的选项,之后的编译过程并不会取消编译某个选项。倘若配置信息过于复杂,且只需取消少量选项,那么可以通过手动编辑.config
文件,注释掉选择行即可。(可以先通过cat
、grep
及管道
的组合,打印某个选项的所在行及行号,以便快速确认该选项在.config
文件中的位置,.config
文件有几千行。然后通过vim
编辑文件,:set number
开启行号显示)。
删除./tmp
及.config
:
|
|
3.5 添加其他LuCI包依赖
以kenzok8
整理的openwrt-packages为例:
|
|
4 歌华链Ghl-001固件预览

Login界面

VPN-passwall

