编译属于自己的OpenWrt固件

2021-08-27 13:38:07 104点赞 893收藏 43评论

创作立场声明:首先感谢各开源项目,此文仅为个人折腾分享,如有不对,欢迎评论区指正,感谢大家的支持!

大家好!

由于本人DDNS、广告屏蔽等需求,需对家里路由固件升级,因此开始了折腾之路。本文只是着重描述了对固件的选择及编译的过程,并总结心得分享此文,希望各位少走弯路。

目录

前言

固件选择

环境搭建

源码下载及配置

编译

总结

前言

编译属于自己的OpenWrt固件

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

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

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

固件选择

原版的固件

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

Lean的固件

Lean大佬根据原版OpenWrt项目,整合了很多插件,并且可根据自己需求进行选择整合成自己的固件。

结论

由于个人只是小白,没得选,必须得跟随Lean大的步伐。

环境搭建

安装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"(如果速度较慢,可通过码云中转方式下载,具体方法自行搜索)

  • 进入目录,输入以下命令"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"

helloWordhelloWord

helloWord

两种方式区别:下载仓库方式只用来编译,添加feeds方式还会把链接放到路由器的"软件包"“软件源”里,建议用下载仓库方式

更新并安装feed

  • 命令行输入以下命令"./scripts/feeds update -a "

更新更新

更新

  • 命令行输入以下命令"./scripts/feeds install -a "

安装安装

安装


OpenWrt Configuration 配置

  • 生成配置界面,命令行输入以下命令"make menuconfig"

生成配置界面命令生成配置界面命令

生成配置界面命令

配置界面配置界面

配置界面

  • 根据路由器的平台和架构,在 Target System(目标系统类型,即路由器CPU架构)、Subtarget(子目标,即路由器芯片型号)、Target Profile(目标文件, 即路由器型号) 中选择相应的选项;本人使用的软路由,所以都为默认x86选项。

平台和架构平台和架构

平台和架构

  • Target Images中勾选需要的固件格式等,个人按默认了并去掉了vmdl格式

Target ImagesTarget Images

Target Images

  • IPv6支持,需要在Extra packages里勾选ipv6helper,自动会把所有ipv6需要的组件都选上的

ipv6ipv6

ipv6

选择插件选择插件

选择插件

  • 配置完成后光标移动到 Save ,回车保存为.config文件。

保存保存

保存

编译

先说结论:我尝试2次本地编译都失败了,所以各位还是优先选择在线编译,因为本地环境中网络,会导致部分dl库下载不成功,并且电脑需开机2~3个小时,而在线编译的话,用的是微软服务器,不存在网络问题,也不会有时间和用电的浪费。

本地编译

  • 下载dl库,输入以下命令"make -j8 download V=s"(需要下载很久)

下载dl库下载dl库

下载dl库

  • 编译固件,输入以下命令"make -j1 V=s",(-j1 后面是线程数。第一次编译推荐用单线程)

编译编译

编译

在线编译

P3TERX大佬编写的Actions-OpenWrt项目,使用 GitHub Actions 云编译 OpenWrt 。可以直接阅读大佬的使用说明,写的很详细。

以下仅作为个人操作记录。

Use this templateUse this template

Use this template

  • 填写仓库名称,然后点击Create repository from template按钮

创建仓库创建仓库

创建仓库

  • 经过几秒钟的等待,页面会跳转到新建的仓库,点击Create new file按钮

新建文件新建文件

新建文件

  • 文件名填写为.config,把配置章节生成的.config 文件的内容复制粘贴到下面的文本框中

.config 文件.config 文件

.config 文件

  • 翻到页面最下方,点击Commit new file按钮

提交文件提交文件

提交文件

  • (在配置章节跳过设置部分插件源的朋友亦可调过此步骤)提前设置插件源等环境,继续以helloword插件为例,打开diy-part1.sh并编辑以下内容,二选一,对应的方式与配置阶段的设置插件源方式保持一致

配置helloword配置helloword

配置helloword

  • 在 Actions 页面选择Build OpenWrt,然后点击Run Workflow按钮,即可开始编译

编译编译

编译

  • 经过2~3小时的在线编译,编译结果为一个压缩包,下载解压后得到固件

编译结果编译结果

编译结果

编译结果编译结果

编译结果

固件固件

固件

总结

至此,OpenWrt的固件篇到此结束了,由衷感受到开源软件的强大,及各大佬的无私分享,给小白用户带来了极大的福利。

展开 收起
43评论

  • 精彩
  • 最新
  • 如果是为了自定义安装软件的话,用imagebuider快得多,重新编译太麻烦了

    校验提示文案

    提交
    🉑,抽空了解一下

    校验提示文案

    提交
    确实用这个省事,除非是不在官方支持的设备

    校验提示文案

    提交
    收起所有回复
  • 刚给老旧的WNDR4300编译了一个openwrt固件,不过没怎么修改,有空再研究。

    校验提示文案

    提交
    感谢支持呀 [皱眉]

    校验提示文案

    提交
    收起所有回复
  • 虽然看不懂,但大佬的文章还是要支持一下

    校验提示文案

    提交
    感谢支持呀 [小眼睛]

    校验提示文案

    提交
    不同架构怎么搞? [大囧] 一头雾水的发问

    校验提示文案

    提交
    还有1条回复
    收起所有回复
  • 我还是比较懒,反正有现成的编译好的,就下了用,直接刷机

    校验提示文案

    提交
    防止人家留后门 [不说话]

    校验提示文案

    提交
    收起所有回复
  • 太硬核了,用大神制作好的不就行了,反正就那些常用的功能插件啥的,为啥还非得自己编译呢?

    校验提示文案

    提交
    主要为了折腾 [皱眉]

    校验提示文案

    提交
    收起所有回复
  • 这玩意需要科学上网才行了吧?

    校验提示文案

    提交
    说的是Github话可以通过码云中转,如果说的dl库可以通过在线编译

    校验提示文案

    提交
    收起所有回复
  • 用P3TERX大神的来编译只是第一次成功,下载后安装了太多对自己没用的ipk,我只想用有ipv6的纯固件,然后再次编译几次都出问题,现在,用VM虚拟机里的win10系统,安装ubuntu子系统来编译,单线程编译真慢 [喜极而泣]

    校验提示文案

    提交
    我也尝试过本地编译,特别是虚拟机里,选的东西一多,编译了一晚上,早上一看还是报错了。 [喜极而泣]

    校验提示文案

    提交
    你本地编译好 将config里面的内容复制到云编译的config文件里,然后运行,不要选SSH连接,不要选SSH连接,不要选SSH连接,这样就可以云编译固件,和本地编译的固件一样 [得意]

    校验提示文案

    提交
    还有4条回复
    收起所有回复
  • 请问一个问题 我软路由当旁路由用的 我看恩山有编译好的openwrt说是旁路由专用的 请问这个有什么区别?主路由旁路由用的openwrt还有区别?

    校验提示文案

    提交
    还有这种说法么,没研究过这种镜像,旁路由不都是配置好接口不就可以了么

    校验提示文案

    提交
    收起所有回复
  • 说实话啊 不会看源码 仅仅是自己编译还不如就用别人的包 因为里面私货不私货 你也不知道 还浪费时间

    校验提示文案

    提交
    个人理解敢于开源的大佬,那肯定不会有私货的;但是后期别人编译的镜像那就难说了

    校验提示文案

    提交
    收起所有回复
  • 一直都提不起勇气

    校验提示文案

    提交
    [抠鼻] 有时间就可以折腾一下

    校验提示文案

    提交
    收起所有回复
  • 近期云编译总是失败,微软是不是开始打击了

    校验提示文案

    提交
    我编译了两次,没问题呀,看看报的什么错吧 [抠鼻]

    校验提示文案

    提交
    您是本地编译还是云编译,云编译进ssh会失败,不进ssh也失败

    校验提示文案

    提交
    收起所有回复
  • 我编译R2S的固件。完了,自定义的插件都没有显示出来是怎么回事

    校验提示文案

    提交
    在线还是本地?

    校验提示文案

    提交
    请问.config在哪里找呀

    校验提示文案

    提交
    收起所有回复
  • 会编译的不用看 不会编译的看不懂….

    校验提示文案

    提交
  • 把配置章节生成的.config 文件的内容复制粘贴到下面的文本框中。。这个.config在哪里呢?

    校验提示文案

    提交
  • 添加部分插件源,例如Helloword,(不需要的可跳过这步)---+-helloexcel

    校验提示文案

    提交
  • 看的有点蒙,这些编译是不是只用原始固件,再通过加入各路大神编译的插件,然后本地/在线生成一个安装包?
    自己编的一是定制性,二是不容易被人塞后门。
    不知道我的理解对不对

    校验提示文案

    提交
  • big东东讲解过不是专业人士的话,耗时耗力....... [邪恶]

    校验提示文案

    提交
  • 专业性太强了,对我等菜鸡没什么参考价值。直接放编好的固件比较稳

    校验提示文案

    提交
  • 两款水星*1200*的路由器路过,一个家用级一个企业级都完美避过了能刷机的机会。

    校验提示文案

    提交
  • 太费劲了,恩山论坛上有现成的能满足需求。就是要花点时间找一找。

    校验提示文案

    提交
提示信息

取消
确认
评论举报

相关文章推荐

更多精彩文章
更多精彩文章
最新文章 热门文章
893
扫一下,分享更方便,购买更轻松