目录
前言
固件选择
环境搭建
源码下载及配置
添加部分插件源
更新并安装feed
OpenWrt Configuration 配置
编译
本地编译
在线编译
总结
前言
OpenWrt项目是一个针对嵌入式设备的Linux操作系统。OpenWrt不是一个单一且不可更改的固件,而是提供了具有软件包管理功能的完全可写的文件系统。这使您可以从供应商提供的应用范围和配置中解脱出来,并且让您通过使用适配任何应用的软件包来定制设备。对于开发人员来说,OpenWrt是一个无需围绕它构建完整固件就能开发应用程序的框架; 对于普通用户来说,这意味着拥有了完全定制的能力,能以意想不到的方式使用该设备。
以往路由器固件都是厂家维护,主要完成了路由功能,其他功能聊胜于无,并且更新很慢。因此OpenWrt项目的出现,给这个自由的时代又添上了美好的一笔。
正因为OpenWrt项目有着非常丰富的插件应用,可根据需求自行选择,极大符合着我开头描述的需求,也减少了我后期需求变更带来的折腾。
固件选择
原版固件里件很多插件是不含的,需要自己去网上找,然后自己集成进去。如果编译报错的话,需要自己debug。
Lean大佬根据原版OpenWrt项目,整合了很多插件,并且可根据自己需求进行选择整合成自己的固件。
结论
由于个人只是小白,没得选,必须得跟随Lean大的步伐。
环境搭建
环境搭建有三种方式
1.安装Ubuntu 20.04 LTS x64系统
2.在虚拟机下来运行Ubuntu 20.04 LTS x64
3.在windows下运行Ubuntu 20.04 LTS x64子系统。
根据自己情况,选择方便的。同样的设备,上面三种方式的速度是递减的。
进入系统,更新软件包列表,命令行输入以下命令"sudo apt-get update " ;
安装编译软件环境,
命令行输入以下命令" sudo apt-get -y install build-essential asciidoc binutils bzip2 gawk gettext git libncurses5-dev libz-dev patch python3 python2.7 unzip zlib1g-dev lib32gcc1 libc6-dev-i386 subversion flex uglifyjs git-core gcc-multilib p7zip p7zip-full msmtp libssl-dev texinfo libglib2.0-dev xmlto qemu-utils upx libelf-dev autoconf automake libtool autopoint device-tree-compiler g++-multilib antlr3 gperf wget curl swig rsync"
源码下载及配置
下载
下载源代码,输入以下命令"git clone https://github.com/coolsnowwolf/lede"
如果速度较慢,可通过码云中转方式下载,具体方法:https://www./article/6039902828/ 可以直接去码云的镜像站点https:///mirrors,搜索一下lede,找一个lede镜像站点来使用就可以。直接地址替换就可以。可是实测发现,下载源码可以从镜像站,但是更新并安装feed还是走的github,不知道这个是不是没有多大意义。
进入目录,输入以下命令"cd lede";
添加部分插件源,例如Helloword,(不需要的可跳过这步)
以下方式二选一
下载仓库方式:命令行输入以下命令"git clone https://github.com/fw876/helloworld.git package/lean/luci-app-ssr-plus"
添加feeds方式:命令行输入以下命令"echo 'src-git helloworld https://github.com/fw876/helloworld' >>feeds.conf.default"
两种方式区别:下载仓库方式只用来编译,添加feeds方式还会把链接放到路由器的"软件包"“软件源”里,建议用下载仓库方式
更新并安装feed
OpenWrt Configuration 配置
配置界面
根据路由器的平台和架构,在 Target System(目标系统类型,即路由器CPU架构)、Subtarget(子目标,即路由器芯片型号)、Target Profile(目标文件, 即路由器型号) 中选择相应的选项。
--进入后空格用来确定选择,*是选中编译进固件, M是编译但是不安装进固件里,连续esc esc是返回到上一菜单
我的是K2P,按以下选择:
Target System 选择 MediaTek Ralink MIPS
Subtarget 选择 MT7621 based boards
Target Profile 选择 Phicomm K2P
下面三项,在开始编译可以按默认的来,等熟悉后再根据需要选择。
Target Images中勾选需要的固件格式等,个人按默认了并去掉了vmdl格式
IPv6支持,需要在Extra packages里勾选ipv6helper,默认会把所有ipv6需要的组件都选上的
最重要的插件部分,进入 Luci - Applications 选择需要的插件,这里由于种种原因,各位可参考恩山大佬整理的插件列表进行选择性安装,地址:https://www./forum/thread-344825-1-1.html
'*’ 代表编入固件,'M’ 表示编译成模块或者IPK包, '空’不编译
配置完成后光标移动到 Save ,回车保存为.config文件。
在windows子系统下,.config文件默认保存路径为:C:\Users\用户\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu18.04onWindows_79rhkp1fndgsc\LocalState\rootfs\home\用户\lede
编译
先说结论:我尝试2次本地编译都失败了,所以各位还是优先选择在线编译,因为本地环境中网络,会导致部分dl库下载不成功,并且电脑需开机2~3个小时,而在线编译的话,用的是微软的服务器,不存在网络问题,也不会有时间和用电的浪费。
本地编译
编译固件,输入以下命令"make -j1 V=s",(-j1 后面是线程数。第一次编译推荐用单线程)
第二次编译:
cd lede # 进入LEDE目录
git pull # 同步更新L大源码
./scripts/feeds update -a && ./scripts/feeds install -a # 更新Feeds
rm -rf ./tmp && rm -rf .config # 清除编译配置和缓存
make menuconfig # 进入编译配置菜单
make -jn V=99 # 开始编译 n=线程数+1,例如4线程的I5填-j5
编译丰富插件时,建议修改下面两项默认大小,留足插件空间。(x86/64)!!!
Target Images ---> (16) Kernel partition size (in MB) #默认是 (16) 建议修改 (256)
Target Images ---> (160) Root filesystem partition size (in MB) #默认是 (160) 建议修改 (512)
在线编译
P3TERX大佬编写的Actions-OpenWrt项目,使用 GitHub Actions 云编译 OpenWrt 。可以直接阅读大佬的使用说明,写的很详细。https:///archives/build-openwrt-with-github-actions.html
以下仅作为个人操作记录。
总结
至此,OpenWrt的固件篇到此结束了,由衷感受到开源软件的强大,及各大佬的无私分享,给小白用户带来了极大的福利。
虽然都是整理自网上大神的教程,但是在整理和实践过程中,本人也是逐渐掌握了lede的编译方法,也基本理解了每一步代码的含义。
更多可以参考:
为k2p编译最新的openwrt固件,lean大源码:https://www./forum/thread-4039245-1-1.html
【韩风Talk】Openwrt编译难么?不太难,主要是细节!:https://www.bilibili.com/video/BV1Dv411B7MQ
编译属于自己的OpenWrt固件:https://post.smzdm.com/p/ad27vkgn/