打破常规思维
自由 开放 平等 互助

编译OpenWrt微系统

前言

最近家里的软路由不稳定,经常出现因断流、DNS异常导致的网页无法访问 或断网等一系列问题,一直在强忍着使用,懒得再去折腾。直到某天在v2ex看到一篇文章:https://v2ex.com/t/698444 大概内容是“koolshare lede系统不开源”“koolshare lede老掉牙了”“koolshare lede不稳定”“koolshare 论坛不够友善”等一系列问题…于是现在打算换成官方的OpenWrt系统。

OpenWrt项目是针对嵌入式设备的Linux操作系统。OpenWrt不会尝试创建单个静态固件,而是提供具有包管理功能的完全可写文件系统。这使您从供应商提供的应用程序选择和配置中解放出来,并允许您通过使用软件包来定制设备以适合任何应用程序。对于开发人员而言,OpenWrt是构建应用程序的框架,而无需围绕它构建完整的固件。对于用户来说,这意味着可以完全自定义的能力,可以以从未想到的方式使用设备。

  • 项目官方:https://openwrt.org
  • Github开源地址 https://github.com/openwrt/openwrt

编译OpenWrt

编译环境:CentOS 7.9系统 至强双核 4G内存 100mbps带宽

一、服务器上创建新用户 警告:千万不要使用root账户编译

# 创建账户
adduser enzo

# 设置账户密码
passwd enzo

# 切换至该账户
su enzo

二、克隆代码

# 用户目录内创建个新文件夹出来
cd ~ && mkdir OpenWrt && cd OpenWrt

# 克隆Git代码 并切换至最新的稳定分支
git clone https://github.com/openwrt/openwrt.git
cd ./openwrt
git checkout -b v19.07.5

三、安装后面交叉编译所需要的包

sudo yum install epel-release subversion binutils bzip2 gcc gcc-c++ gawk gettext flex ncurses-devel zlib-devel zlib-static make patch unzip perl-ExtUtils-MakeMaker glibc glibc-devel glibc-static quilt ncurses-libs sed sdcc intltool sharutils bison wget git-core openssl-devel xz

四、更新并安装feeds包(feeds是扩展的软件包,独立于Open­Wrt源码之外,需要单独进行拉取和更新)

./scripts/feeds update -a
./scripts/feeds install -a

五、调整OpenWrt系统组件

make menuconfig

对弹出的窗口,前三项分别设置为:

  • x86
  • x86_64
  • Generic

TIPS1:这里可以根据自己的路由器或者软路由进行选择!我这里是软路由,选择了x86_64的架构

TIPS2:保存的时候让你输入配置文件名,默认是.config无需输入任何,直接点击OK,再去选择exit退出就可以保存上了

六、开始编译 (机器性能不同而导致编译时间不同,我这台机器大概需要60~90分钟完成)

make -j$(nproc) || make -j1 || make -j1 V=s

剩下的就是等待编译完成了,编译结束后 可以在 ./bin/targets/x86/64 目录下找到相关的镜像

OpenWrt编译完成后各个文件说明 点我跳转文章查看(可以不看这个)

通常我们使用openwrt-x86-64-combined-ext4.img.gz这个常规镜像就可以了,尽量少整点幺蛾子出来

TIPS:短期内如果要再次编译,请删除OpenWrt根目录下的tmp目录和.config文件,从第五个步骤开始,继续往下执行。

七、环境修复、文件清理、错误处理相关

  • 清理旧的编译产物(可选)
make clean

在源码有大规模更新或者内核更新后执行,以保证编译质量。此操作会删除/bin和/build_dir目录中的文件。

  • 清除旧的编译产物、交叉编译工具及工具链等目录(可选)
make dirclean

更换架构编译前必须执行。此操作会删除/bin和/build_dir目录的中的文件(make clean)以及/staging_dir、/toolchain、/tmp和/logs中的文件。

  • 清除 Open­Wrt 源码以外的文件(可选)
make distclean

除非是做开发,并打算 push 到 GitHub 这样的远程仓库,否则几乎用不到。此操作相当于make dirclean外加删除/dl、/feeds目录和.config文件。

  • 还原 Open­Wrt 源码到初始状态(可选)
git clean -xdf

如果把源码改坏了,或者长时间没有进行编译时使用。

  • 清除临时文件
rm -rf tmp

删除执行make menuconfig后产生的一些临时文件,包括一些软件包的检索信息,删除后会重新加载package目录下的软件包。若不删除会导致一些新加入的软件包不显示。

  • 删除编译配置文件
rm -f .config

在不删除的情况下如果取消选择某些组件它的依赖组件不会自动取消,所以对于需要调整组件的情况下建议删除。

编译过程中可能会出错,下面直接摆出错误和解决方案:

 

 

参考文章:

https://openwrt.org/docs/guide-developer/build-system/install-buildsystem

https://imkira.com/CentOS-OpenWrt/

https://www.jianshu.com/p/26c29711f3e2

 

赞(0) 打赏
未经允许不得转载:时光日记 » 编译OpenWrt微系统

评论 抢沙发

评论前必须登录!

 

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏