
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 Clone2.2 环境依赖
添加32位架构支持:
|
|
安装依赖库:
|
|
三、固件编译
3.1 克隆lean的OpenWrt源码
-
克隆lean的openwrt源码: lede的Github仓库
-
更新feeds并部署:
|
|
3.2 OpenWrt Configuration
- 编译菜单配置:
|
|
如下图所示:
OpenWrt Config以下为必配置项
Target SystemSubtargetTarget ProfileTarget 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其中,以下几项是编译固件过程中常需修改的:
ApplicationsThemes
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
支付宝
微信