OpenWrt/LEDE 的编译与 Mentohust 软件包的添加
首次编译
-
依赖安装
1
2sudo 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 -
代码下载,进入目录
1
2git clone https://github.com/coolsnowwolf/lede
cd lede -
软件包下载、安装
1
2./scripts/feeds update -a
./scripts/feeds install -a -
添加 MentoHUST 软件包
1
2git clone https://github.com/KyleRicardo/MentoHUST-OpenWrt-ipk.git package/mentohust
git clone https://github.com/BoringCat/luci-app-mentohust.git package/luci-app-mentohust -
调整 OpenWrt 系统组件
1
make menuconfig
选择好架构与型号,进入
LuCI
一栏选择插件*
代表编入固件,M
表示编译成模块或者 IPK 包, 留空为不编译详细插件应用说明参见这里
添加 MentoHUST 需勾选以下位置:
- LuCI —> Applications —> luci-app-mentohust
- Network —> Ruijie —> mentohust
-
预下载所需文件
1
make download -j8 V=s
-
开始编译
1
make -j1 V=s
-j1
:使用单线程编译,数字即为所用线程数。初次推荐单线程编译,一是因为玄学问题可能成功率高,二是方便查看错误日志。V=s
:输出详细日志,用于编译失败时方便找出错误。
再次编译
-
进入目录
1
cd lede
更新
短期内再次编译可忽略
-
更新系统软件包
1
2sudo apt update
sudo apt upgrade -y -
更新 OpenWrt 源码
1
git pull
-
更新 feed 源中软件包
1
2
3./scripts/feeds clean
./scripts/feeds update -a
./scripts/feeds install -a./scripts/feeds clean
可选,用于避免 feeds 较大修改后更新无效
文件清理
-
清除旧的编译产物(可选)
1
make clean
在源码有大规模更新或者内核更新后执行,以保证编译质量。此操作会删除
/bin
和/build_dir
目录中的文件。 -
清除旧的编译产物、交叉编译工具及工具链等目录(可选)
1
make dirclean
更换架构编译前必须执行。此操作会删除
/bin
和/build_dir
目录的中的文件 (make clean
) 以及/staging_dir
、/toolchain
、/tmp
和/logs
中的文件。 -
清除 OpenWrt 源码以外的文件(可选)
1
make distclean
除非是做开发,并打算 push 到 GitHub 这样的远程仓库,否则几乎用不到。此操作相当于
make dirclean
外加删除/dl
、/feeds
目录和.config
文件。 -
还原 OpenWrt 源码到初始状态(可选)
1
git clean -xdf
如果把源码改坏了,或者长时间没有进行编译时使用。
-
清除临时文件
1
rm -rf tmp
删除执行
make menuconfig
后产生的一些临时文件,包括一些软件包的检索信息,删除后会重新加载package
目录下的软件包。若不删除会导致一些新加入的软件包不显示。 -
删除编译配置文件
1
rm -f .config
在不删除的情况下如果取消选择某些组件它的依赖组件不会自动取消,所以对于需要调整组件的情况下建议删除。
编译
-
调整 OpenWrt 系统组件
1
make menuconfig
如果不打算调整组件则输入
make defconfig
,它会检测编译环境并根据更新自动调整编译配置文件。 -
预下载编译所需的软件包
1
make download -j8 V=s
-
开始编译
1
make -j$(nproc) || make -j1 || make -j1 V=s
多线程编译失败后自动进入单线程编译,失败则输出详细日志。
-
编译好的固件存放在
lede/bin/targets/
对应架构的文件下,名称为openwrt-xxxx-xxxx-squashfs-sysupgrade.bin
进阶操作
致谢
@P3TERX,博客里的文章对我有很大帮助,本文自他的博客总结而来,亦有很大一部分文字直接复制自它的博客。他亦是上文所提到的 Github Action 云编译 OpenWrt 模板的作者。
恩山论坛,我路由相关知识的启蒙点,感谢各路大神的经验分享。
参考链接
https://github.com/coolsnowwolf/lede
https://p3terx.com/archives/openwrt-compilation-steps-and-commands.html
https://www.right.com.cn/forum/thread-344825-1-1.html
https://www.right.com.cn/forum/thread-1237348-1-1.html