OpenWrt编译
OpenWrt
编译准备
国内请尽量全局科学上网
安装工具依赖
需要以下工具来编译OpenWrt,软件包名称在发行版之间有所不同。 在Build system setup中找到不同发行版上软件包的列表。
binutils
bzip2
diff
find
flex
gawk
gcc-6+
getopt
grep
libc-dev
libz-dev
make4.1+
perl
python3.6+
rsync
subversion
unzip
which
# 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 。
将插件源码 clone
到 package
下新建的一个目录中,然后在配置中勾选编译,也可使用插件作者编译完成的在路由器管理界面进行安装,也可通过 ssh 使用 opkg install xxxx
安装,使用 opkg remove xxxx
卸载。
Github Action自动编译
借助 GitHub Actions 的 OpenWrt 在线集成自动编译,可以不要求自己的硬件或系统达到要求即可进行编译。
编译前自定义IP
修改 package/base-files/files/bin/config_generate
中的 192.168.1.1
的后两位即可