编译属于自己的OpenWrt固件(以K2P为例)

最近k2p的热度明显不如当初,红米ac2100也完全接手了当初k2p的辉煌。但是,k2p也确实是个不错的路由,没理由如此消沉下去。恩山lean大也一直热心更新openwrt全套源码,包括很多平台,其中之一就是k2p。群里有很多小伙伴都根据lean大的源码提示,自己编译了需要的固件。

目录

前言

固件选择

环境搭建

源码下载及配置

添加部分插件源

更新并安装feed

OpenWrt Configuration 配置

编译

本地编译

在线编译

总结

前言

OpenWrt项目是一个针对嵌入式设备的Linux操作系统。OpenWrt不是一个单一且不可更改的固件,而是提供了具有软件包管理功能的完全可写的文件系统。这使您可以从供应商提供的应用范围和配置中解脱出来,并且让您通过使用适配任何应用的软件包来定制设备。对于开发人员来说,OpenWrt是一个无需围绕它构建完整固件就能开发应用程序的框架; 对于普通用户来说,这意味着拥有了完全定制的能力,能以意想不到的方式使用该设备。

以往路由器固件都是厂家维护,主要完成了路由功能,其他功能聊胜于无,并且更新很慢。因此OpenWrt项目的出现,给这个自由的时代又添上了美好的一笔。

正因为OpenWrt项目有着非常丰富的插件应用,可根据需求自行选择,极大符合着我开头描述的需求,也减少了我后期需求变更带来的折腾。

固件选择

原版的固件

原版固件里件很多插件是不含的,需要自己去网上找,然后自己集成进去。如果编译报错的话,需要自己debug。

Lean的固件

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.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/

(0)

相关推荐