编译 openwrt

自动编译 openwrt

请参考 借助 GitHub Actions 的 OpenWrt 在线集成自动编译

手动编译 openwrt

1. 先决条件

使用 Linux, BSD 或 MacOSX 系统来进行编译.

1.1 安装编译所需依赖的软件包

依赖软件包安装官方示例

通用的 Linux 系统
CentOS

# 某些软件包会依赖 EPEL
sudo yum install binutils bzip2 gcc gcc-c++ gawk gettext flex \
ncurses-devel zlib-devel zlib-static make patch unzip openssl-devel \
perl-ExtUtils-MakeMaker glibc glibc-devel glibc-static ncurses-libs \
sed sdcc intltool sharutils bison wget git-core xz

Debian / Ubuntu

sudo apt-get update
sudo apt-get install subversion g++ zlib1g-dev build-essential git \
python python3 python3-distutils libncurses5-dev gawk gettext unzip \
file libssl-dev wget libelf-dev ecj fastjar java-propose-classpath

推荐使用 Ubuntu 18 LTS x64

Ubuntu 18.04 LTS

sudo apt-get install subversion build-essential libncurses5-dev \
zlib1g-dev gawk git ccache gettext libssl-dev xsltproc zip

1.2 需要大约3-4 GB的空余硬盘空间,主要用来存储编译成功的固件

1.3 以非root用户来进行编译操作

1.3.1 新建用户 openwrt ,输入密码,其他信息可不填直接回车,最后输入 Y 确定完成
sudo adduser openwrt
1.3.2 给这个用户授予 sudo 权限
sudo usermod -aG sudo,adm openwrt
1.3.3 以用户 openwrt 重新登入系统

2. 下载 OpenWrt 源代码

2.1 克隆源代码仓库

可参考 使用 gitee 建立 github 仓库镜像加速源码下载

git clone https://gitee.com/cheenbee/openwrt.git

2.2 进入源码目录

cd openwrt

2.3 更新和安装 feeds

可以把 feeds 理解为接口:即可扩展的功能插件

./scripts/feeds update -a
./scripts/feeds install -a
关于 feeds
  • 默认会安装的 feeds 可以通过查看 feeds.conf.default (或 feeds.conf) 文件得知
src-git packages https://git.openwrt.org/feed/packages.git
src-git luci https://git.openwrt.org/project/luci.git
src-git routing https://git.openwrt.org/feed/routing.git
src-git telephony https://git.openwrt.org/feed/telephony.git
src-git freifunk https://github.com/freifunk/openwrt-packages.git
#src-git video https://github.com/openwrt/video.git
#src-git targets https://github.com/openwrt/targets.git
#src-git management https://github.com/openwrt-management/packages.git
#src-git oldpackages http://git.openwrt.org/packages.git
#src-link custom /usr/src/openwrt/custom-feed

以其中的 luci 为例:是一个现代化和模块化的网页界面功能接口,让我们可以通过网络浏览器控制路由设备.如果你想自定义界面显示,定制主题 即可.

  • 使用 sudo ./scripts/feeds -h 可以查看各命令的使用说明

3. 配置编译目标和选项

make menuconfig

这将打开编译 OpenWrt 的配置菜单,用于设置目标系统和选项.

关于 menuconfig 配置选择

menuconfig 拥有一个文本界面,包括处理的目标平台,要编译的软件包,要被包含进固件的软件包和一些内核设置

树莓派4b

我这里以编译树莓派4的固件为例,从 Raspberry Pi 4 Tech Specs 可知架构为 Broadcom BCM2711 64-bit

Target System (目标系统)------> (Broadcom BCM27xx)
Subtarget (子目标)------> (BCM2711 boards (64 bit))
Target Profile (目标档案)------> (Raspberry Pi 4B)
Target Images (目标镜像格式)------> [*] ext4 [*] squashfs [*] GZip images
镜像格式不清楚的请自行搜索或保持默认即可

X86

X86_64为例:

Target System (目标系统)------> (x86)
Subtarget (子目标)------> (x86_64)
Target Profile (目标档案)------> (Generic x86/64)
Target Images (目标镜像格式)------> [*] ext4 [*] squashfs [*] GZip images

4. 预先获取所有依赖包的源文件: 下载 dl 库

在执行最终的make之前,最好先使用make download预先获取所有依赖包的源文件

make -j8 download V=s

下载完成的依赖包源文件存放在 /openwrt/dl 目录下,如果你尝试使用多核编译OpenWrt,而且没有下载所有依赖包的源文件,那么你的编译很可能会失败.

5. 构建编译固件

make -j1 V=s

这个命令会自动执行以下操作:

  • 编译工具链
  • 然后用这个工具链交叉编译源文件
  • 创建 opkg-packages
  • 生成可以进行烧录的固件映像文件

编译完成需要一段时间,短则数个小时,长则数天,编译完成后固件输出路径: /openwrt/bin/targets/bla/bla.

构建选项(可选)

在多核CPU上构建

可通过-j选项启用多个进程以加速构建过程,首次编译推荐使用单进程:

make -j3
  • 使用标准公式 <你的CPU个数 + 1>
  • 构建过程中若产生随机错误,尝试去掉 -j 选项重新构建
显示更多信息
make V=s

Note:

  • *-factory 镜像文件用于在目标机上首次安装OpenWrt
  • *-sysupgrade 镜像文件用于更新现有的OpenWrt安装

6. 清理编译环境

make clean

重新编译

cd openwrt
git pull
./scripts/feeds update -a && ./scripts/feeds install -a
make defconfig
make -j8 download
make -j$(($(nproc) + 1)) V=s

重新配置再编译

cd openwrt
rm -rf ./tmp && rm -rf .config
make menuconfig
make -j$(($(nproc) + 1)) V=s

错误合集

1. you should not run configure as root

sudo make -j $(($(nproc) + 1)) V=s FORCE_UNSAFE_CONFIGURE=1
2. openwrt is not in the sudoers file. This incident will be reported.
sudo usermod -aG sudo,adm openwrt
参考

Quick Image Building Guide

OpenWrt编译 – 说明

中文:如何编译自己需要的 OpenWrt 固件

安装OpenWrt(通用)

编译适用于mt7620a的OpenWrt

  • 3
    点赞
  • 57
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值