Openwrt自编译教程
本文最后更新于:2024年9月5日 下午
Openwrt自编译教程
安装编译环境
安装依赖
1 |
|
下载源码
1 |
|
常见文件说明
feeds.conf.default文件
此文件记录了插件包所在的源,我们可以在里面加入自己的源。
网上有很多朋友整理了一些常用插件包,可以在此处直接添加,也可以根据自己的需求,自己建立一下git仓库,里面存放自己用到的插件包。
例如,我们可以使用以下命令添加常用软件包
1 |
|
常见配置说明
使用make menuconfig
可进入图形界面版本的配置管理器。
下面我们详细介绍一下各个配置选项:
Target System
选择处理器架构。该配置对应
target/linux
下的各个目录,目录名称对应cpu架构。Subtarget
平台子选项
Target Profile
选择具体路由器型号,该配置对应
target/linux
下的各个目录下不同系列cou对应芯片的.dtsi
和对应的.dts
文件,但也可以通过增加或修改dts
文件增加或修改选项。Target Images
固件包打包格式
Base System
blocd
自动挂载块设备,通常选上,挂载磁盘用。
Luci
插件配置基本上都在此,正常情况下进入应该有很多个选项。
如果出现出现只有一项子选项情况,那是可能因为没有更新软包,执行以下命令更新软件包即可。
1
2./scripts/feeds update -a
./scripts/feeds install -aCollections
默认选择
luci
,其他可根据自己需要选择。Modules
Translations
:选择页面语言
Applications
插件选项,通常我们添加的插件都在此目录,选择自己需要的插件即可。
Themes
luci
主题选项
首次编译
make -j8 download V=s
下载dl库(国内请尽量做好软件源加速)find dl -size -1024c -exec ls -l {} \;
此命令可以列出下载不完整的文件得出小于1k的文件属于下载不完整),如果存在这样的文件可以使用find dl -size -1024c -exec rm -f {} \;
命令将它们删除,然后重新执行make download
下载并反复检查,确认所有文件完整可大大提高编译成功率,避免浪费时间。输入
make -j1 V=s
(-j1
后面数字1
是线程数。第一次编译推荐用单线程)进行编译你要的固件。编译完成后固件保存在
./bin/targets/
文件夹内。
1 |
|
二次编译
更新本地编译环境
1 |
|
清除旧的编译产物
1 |
|
在源码有大规模更新或者内核更新后执行,以保证编译质量。此操作会删除
/bin
和/build_dir
目录中的文件。
清除旧的编译产物、交叉编译工具及工具链等目录
1 |
|
更换架构编译前必须执行。此操作会删除
/staging_dir
、/toolchain
、/tmp
和/logs
中的文件。
清除临时文件
1 |
|
删除执行
make menuconfig
后产生的一些临时文件,包括一些软件包的检索信息,删除后会重新加载package
目录下的软件包。若不删除会导致一些新加入的软件包不显示。
如果要更换架构,建议执行以下命令先深度清理 /bin
和 /build_dir
目录的中的文件 (make clean
) 以及 /staging_dir
、/toolchain
、/tmp
和 /logs
中的文件,然后更换架构。
1 |
|
二次编译
第一次编译时间较长,后面编译可以用多线程,速度就快很多了。
1 |
|
当然为了防止多线程编译出错,可以使用以下命令,优先使用多线程,报错会自动使用单线程,仍然报错会单线程执行编译并输出详细日志。
1 |
|
文件清理
编译文件清理是根据.config
文件配置的,即不同架构配置文件只清理当前配置下的数据,因此需要更换架构时,需要首先执行清理操作,否则可能清理不干净。
清理 /bin
和 /build_dir
目录的中的文件
1 |
|
清理/staging_dir
、/toolchain
、/tmp
和 /logs
中的文件,然后更换架构。
1 |
|
除非是做开发,并打算 push 到 GitHub 这样的远程仓库,否则几乎用不到。此操作相当于
make dirclean
外加删除/dl
、/feeds
目录和.config
文件。
还原 OpenWrt 源码到初始状态
1 |
|
如果把源码改坏了,或者长时间没有进行编译时使用。
清除临时文件
1 |
|
删除执行
make menuconfig
后产生的一些临时文件,包括一些软件包的检索信息,删除后会重新加载package
目录下的软件包。若不删除会导致一些新加入的软件包不显示。
如果要更换架构,建议执行以下命令先深度清理 /bin
和 /build_dir
目录的中的文件 (make clean
) 以及 /staging_dir
、/toolchain
、/tmp
和 /logs
中的文件,然后更换架构。
1 |
|
独立编译插件
进入
LuCi
–Themes
选项找到需要编译的插件,配置选项为M
,M 表示选中插件但不编译进固件,保存并退出。获取交叉编译链
1
2make tools/install V=s -j$(grep processor /proc/cpuinfo | wc -l)
make toolchain/install V=s -j$(grep processor /proc/cpuinfo | wc -l)单独编译
1
2make package/luci-lib-docker/compile V=99
make package/luci-app-dockerman/compile V=99编译完成ipk插件包默认存放路径
1
/bin/packages/x86_64/base
可选:
更换golang版本
编译新版 Sing-box 和 hysteria,需 golang 版本 1.20 或者以上版本.
若自带的版本过低,可用下面命令换成 openwrt 官方 golang 版本
1 |
|