如果要玩转OpenWrt系统,就应该自己去学会编译OpenWrt固件,甚至学会增加自己的小功能在OpenWrt系统中。
很多人都遇到过自己编译的OpenWrt固件没有web界面的情况,于是开始尝试各种方法找问题。
对于新手来说就直接重启试试,对于高手的话可能要一些列操作,ping lan口、清缓存、ssh进后台等。可能有经验的一看浏览器响应状态就知道这是缺失了luci管理页面。下面介绍下如何编译带luci的OpenWrt固件,这次的重点是在luci下载、安装和配置上,前提是需要掌握最基本编译常识。
- 源码获取
我们采用OpenWrt原生的源码,分支为openwrt-18.06
git下载地址:
https://github.com/openwrt/openwrt.git
目前国内用lean的openwrt源码分支的比较多,仓库地址为
https://github.com/coolsnowwolf/lede
该仓库基于老一点的版本,luci采用luci1.0,可以安装更多好玩的插件,openwrt主线代码已经采用了luci 2.0,目前兼容的插件不多。所以根据自身情况选择源码,编译的过程都是类似的。
通过git命令下载

下载后为openwrt主分支的代码,我们还需要切换到指定分支
查看分支列表(git branch -a)

切换到openwrt-18.06分支

原始的目录结构如下

通过上图可以看出,刚下载的代码目录非常少,只有基本的系统框架,主要包含了package的配置,很多目录是编译过程中生成的。
很多人下载基本源码后就直接开始执行make进行编译,这样编译出来的固件是默认profile的固件,并且不带luci界面。所以在编译前我们还需要下载和配置luci包。
2. 集成第三方包(Luci)
openwrt基本框架中只包含了基本的package,还有很多第三方的package需要加入到系统中,比如luci。
openwrt通过feeds脚本来下载第三方包
默认配置为feeds.conf.default,配置文件中包含了package下载地址,类似于ubuntu系统的source文件。
配置如下:

现在我们开始执行命令下载和安装第三方package
下载
./scripts/feeds update -a
下载后的文件在根目录的feeds目录中
安装
./scripts/feeds install -a
通过install后feeds目录中的package就集成到了openwrt系统中,集成的过程是通过软链接,
如luci包目录为package/feeds/luci/

luci的各种包都是软链接到了根目录的对应目录
当然除了通过以上两条命令外,还有一种方式更新feeds,那就是
make package/symlinks
可能很多人不理解symlinks的作用
symlinks是makefile的一个target,定义在include/toplevel.mk文件中

通过上图的代码我们可以看到,make package/symlinks命令最终执行了update和install命令,所以两种方式的效果是一样的。
当然你也可以通过执行make package/symlinks-clean卸载feeds package
3. make menuconfig选择luci
当我们完成luci包的安装后,我们还需要选择luci进行编译,make menuconfig命令是用于编译包选择的命令,可以用于控制openwrt固件中需要集成哪些包。
执行make menuconfig后,我们可以看到luci配置选项

选择luci后进入以下界面

选择Collections然后开启luci,这样就选择了luci模块,编译时就会将luci集成到系统中。

除了选择luci模块外,还可以对luci进行其他配置,比如多语言、菜单配置、界面主题等
选择多语言支持

选择luci模块
luci支持界面定制化,可以根据配置动态生成页面

当配置好后,直接选择yes保存退出即可

4. 编译固件
注意事项
- 编译时首先确保是非root用户,否则报错
- 编译过程中会下载必要的压缩包到dl目录中,速度可能比较慢,对于有些package可能需要准备梯子
- 如果编译最新源码建议采用ubuntu18.04以上的版本,编译前请确保安装了基础的ubuntu库,当然如果出现库错误会有提示,一步步安装即可
- 编译整个系统时间会比较长,普通机器一般1-2小时
编译完成后固件在bin对应目录,如7621平台固件对应目录为
bin/targets/ramips/mt7621/
未经允许不得转载:FROS路由技术分享 » 如何编译OpenWrt路由器固件