编译属于自己的OpenWrt固件(以K2P为例)
最近k2p的热度明显不如当初,红米ac2100也完全接手了当初k2p的辉煌。但是,k2p也确实是个不错的路由,没理由如此消沉下去。恩山lean大也一直热心更新openwrt全套源码,包括很多平台,其中之一就是k2p。群里有很多小伙伴都根据lean大的源码提示,自己编译了需要的固件。
目录
前言
固件选择
环境搭建
源码下载及配置
添加部分插件源
更新并安装feed
OpenWrt Configuration 配置
编译
本地编译
在线编译
总结
前言
OpenWrt项目是一个针对嵌入式设备的Linux操作系统。OpenWrt不是一个单一且不可更改的固件,而是提供了具有软件包管理功能的完全可写的文件系统。这使您可以从供应商提供的应用范围和配置中解脱出来,并且让您通过使用适配任何应用的软件包来定制设备。对于开发人员来说,OpenWrt是一个无需围绕它构建完整固件就能开发应用程序的框架; 对于普通用户来说,这意味着拥有了完全定制的能力,能以意想不到的方式使用该设备。
以往路由器固件都是厂家维护,主要完成了路由功能,其他功能聊胜于无,并且更新很慢。因此OpenWrt项目的出现,给这个自由的时代又添上了美好的一笔。
正因为OpenWrt项目有着非常丰富的插件应用,可根据需求自行选择,极大符合着我开头描述的需求,也减少了我后期需求变更带来的折腾。
固件选择
原版的固件
原版固件里件很多插件是不含的,需要自己去网上找,然后自己集成进去。如果编译报错的话,需要自己debug。
Lean的固件
Lean大佬根据原版OpenWrt项目,整合了很多插件,并且可根据自己需求进行选择整合成自己的固件。
结论
由于个人只是小白,没得选,必须得跟随Lean大的步伐。
环境搭建
源码下载及配置
下载
下载源代码,输入以下命令"git clone https://github.com/coolsnowwolf/lede"
如果速度较慢,可通过码云中转方式下载,具体方法:https://www.pianshen.com/article/6039902828/ 可以直接去码云的镜像站点https://gitee.com/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
命令行输入以下命令"./scripts/feeds update -a "
命令行输入以下命令"./scripts/feeds install -a "
OpenWrt Configuration 配置
生成配置界面,命令行输入以下命令"make menuconfig"
配置界面
根据路由器的平台和架构,在 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.right.com.cn/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个小时,而在线编译的话,用的是微软的服务器,不存在网络问题,也不会有时间和用电的浪费。
本地编译
下载dl库,输入以下命令"make -j8 download V=s"(需要下载很久)
编译固件,输入以下命令"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://p3terx.com/archives/build-openwrt-with-github-actions.html
以下仅作为个人操作记录。
进入 P3TERX/Actions-OpenWrt 项目页面:https://github.com/P3TERX/Actions-OpenWrt,点击页面中的 Use this template 按钮。https://github.com/P3TERX/Actions-OpenWrt/generate
填写仓库名称,然后点击Create repository from template按钮
经过几秒钟的等待,页面会跳转到新建的仓库,点击Create new file按钮
文件名填写为.config,把配置章节生成的.config 文件的内容复制粘贴到下面的文本框中
翻到页面最下方,点击Commit new file按钮
(在配置章节跳过设置部分插件源的朋友亦可调过此步骤)提前设置插件源等环境,继续以helloword插件为例,打开diy-part1.sh并编辑以下内容,二选一,对应的方式与配置阶段的设置插件源方式保持一致
在 Actions 页面选择Build OpenWrt,然后点击Run Workflow按钮,即可开始编译
经过2~3小时的在线编译,编译结果为一个压缩包,下载解压后得到固件
总结
至此,OpenWrt的固件篇到此结束了,由衷感受到开源软件的强大,及各大佬的无私分享,给小白用户带来了极大的福利。
虽然都是整理自网上大神的教程,但是在整理和实践过程中,本人也是逐渐掌握了lede的编译方法,也基本理解了每一步代码的含义。
更多可以参考:
为k2p编译最新的openwrt固件,lean大源码:https://www.right.com.cn/forum/thread-4039245-1-1.html
【韩风Talk】Openwrt编译难么?不太难,主要是细节!:https://www.bilibili.com/video/BV1Dv411B7MQ
编译属于自己的OpenWrt固件:https://post.smzdm.com/p/ad27vkgn/