OpenWrt编译

OpenWrt

OpenWrt WiKi

OpenWrt 官网

LEDE WiKi

编译准备

国内请尽量全局科学上网

安装工具依赖

需要以下工具来编译OpenWrt,软件包名称在发行版之间有所不同。 Build system setup中找到不同发行版上软件包的列表。

# Arch / Manjaro
yay -S packages/openwrt-devel

# CentOS / Fedora
sudo dnf --setopt install_weak_deps=False --skip-broken install \
bash-completion bzip2 gcc gcc-c++ git make ncurses-devel patch \
rsync tar unzip wget which diffutils python2 python3 perl-base \
perl-Data-Dumper perl-File-Compare perl-File-Copy perl-FindBin \
perl-Thread-Queue

# Debian / Ubuntu
## OpenWrt master、22.03和21.02分支不再需要python2.7,Ubuntu 22.04 已默认安装 Python3
sudo apt update
sudo apt install build-essential clang flex bison g++ gawk gcc-multilib g++-multilib \
gettext git libncurses5-dev libssl-dev python3-distutils rsync unzip zlib1g-dev \
file wget

## 旧的建议
sudo apt update
sudo apt install build-essential ccache ecj fastjar file g++ gawk \
gettext git java-propose-classpath libelf-dev libncurses5-dev \
libncursesw5-dev libssl-dev python python2.7-dev python3 unzip wget \
python3-distutils python3-setuptools python3-dev rsync subversion \
swig time xsltproc zlib1g-dev

# openSUSE
sudo zypper install --no-recommends asciidoc bash bc binutils bzip2 \
fastjar flex gawk gcc gcc-c++ gettext-tools git git-core intltool \
libopenssl-devel libxslt-tools make mercurial ncurses-devel patch \
perl-ExtUtils-MakeMaker python-devel rsync sdcc unzip util-linux \
wget zlib-devel

获取源码

原生 OpenWrt:

git clone https://github.com/openwrt/openwrt.git

lean OpenWrt(LEDE):

git clone https://github.com/coolsnowwolf/lede.git

编译

运行 feeds 获取所有的预定义软件包并且安装

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

配置编译,详细参考下一节

make menuconfig

下载 dl 库(国内请尽量全局科学上网)

make -j8 download V=s

开始编译
-j1 是线程数。第一次编译推荐用单线程

make -j1 V=s

首次编译时,容易报错:bash: po2lmo: command not found 这应该是因为编译XXXXXXX 需要把 luci-base 先编译出来,但是目前顺序可能是先编译了 hello world 导致出现问题,此时使用 make package/feeds/luci/luci-base/compile V=99 编译出 luci-base 后再编译就不会报错。 这个问题虽然出现的频率不高,但是也不低,

编译完成后输出路径: bin/targets

二次编译(更新)

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

若需要重新配置

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

配置参考

方向建上下操作纵列,左右操作横列,空格选择,回车进入子菜单,* 代表编入固件,M 表示编译成模块或者IPK包, 不编译

Target System : 系统架构,根据CPU选择,例: MediaTek Ralink MIPS
Subtarget : 处理器型号,例: MT7621 based boards
Target Profile : 路由器型号,例: Xiaomi Mi Router AC2100

LuCI ---> 3. Applications ---> : 插件
LuCI ---> 4. Themes ---> : 主题,例: <*> luci-theme-argon

**配置好后使用左右键选中 < Save > 回车将配置保存到 .config 中,使用 ESC 键退出 **

自选插件

插件列表

OpenWrt 编译 LuCI -> Applications 添加插件应用说明

添加源码库中未包含的插件

使用插件集合库

修改文件 feeds.conf.default

# kenzok8仓库
sed -i '$a src-git kenzo https://github.com/kenzok8/openwrt-packages' feeds.conf.default
sed -i '$a src-git small https://github.com/kenzok8/small-package' feeds.conf.default

# liuran001仓库
sed -i '$a src-git liuran001_packages https://github.com/liuran001/openwrt-packages' feeds.conf.default

执行命令获取并安装

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

单独添加需要的插件

在 github 搜索 luci-app 找到需要的插件,如:rufengsuixing/luci-app-adguardhome

将插件源码 clonepackage 下新建的一个目录中,然后在配置中勾选编译,也可使用插件作者编译完成的在路由器管理界面进行安装,也可通过 ssh 使用 opkg install xxxx 安装,使用 opkg remove xxxx 卸载。

Github Action自动编译

借助 GitHub Actions 的 OpenWrt 在线集成自动编译,可以不要求自己的硬件或系统达到要求即可进行编译。

P3TERX/Actions-OpenWrt

KFERMercer/OpenWrt-CI

编译前自定义IP

修改 package/base-files/files/bin/config_generate 中的 192.168.1.1 的后两位即可