自编译OpenWrt固件
环境搭建
基础环境
1、VMware虚拟机
2、Ubuntu 22.04.2 LTS
Ubuntu官网下载
Ubuntu系统更新
1 | sudo apt update -y |
安装编译依赖
1 | sudo apt install build-essential clang flex g++ gawk gcc-multilib gettext git libncurses5-dev libssl-dev python3-distutils rsync unzip zlib1g-dev file wget |
首次编译
编译在普通用户模式下编译,在root模式下会有蜜汁问题
OpenWrt源码有不同的分支,它们都有属于自己的特色,具体差异不在这赘述
1.OpenWrt官方
2.LEDE
3.Lienol
4.immortalwrt
这里以LEDE源码为例
拉取LEDE 源码
1 | git clone https://github.com/coolsnowwolf/lede |
进入lede
1 | cd lede |
添加插件源
之所以选lede是因为大佬默认已经集成了很多常用插件,但是如果有小众需求可以自己将插件源添加进来,在lede根目录执行
1 | vim feeds.conf.default |
将需要启用的插件源去掉“#”即可,也可自行加入第三方的插件源
插件更新与安装
1 | ./scripts/feeds clean |
个性化配置(可选,非必要)
1.修改默认IP为 10.1.1.1
1 | sed -i 's/192.168.1.1/10.1.1.1/g' package/base-files/files/bin/config_generate |
2.修改默认主机名为 ABCD
1 | sed -i '/uci commit system/i\uci set system.@system[0].hostname='ABCD'' package/lean/default-settings/files/zzz-default-settings |
3.修改默认主题
1 | sed -i "s/luci-theme-bootstrap/luci-theme-argon/g" feeds/luci/collections/luci/Makefile |
生成配置
在lede根目录执行make menuconfig进入编译菜单
1 | make menuconfig |
常用菜单说明
1.选择 CPU 类型
Target System (x86) --> # 软路由选择 x86,硬路由根据型号厂家自行选择
Subtarget (x86_64) --> # CPU 子选项
Target Profile (Generic x86/64) --> # 厂家具体型号
2.设置镜像编译的格式(squashfs,ext4)
Target Images --> # 默认 squashfs
3.添加较多插件时,为了避免空间不足,建议修改下面两项默认大小(x86/64)
Target Images --> (16) Kernel partition size (in MB) # 默认是16,建议修改为256
Target Images --> (400) Root filesystem partition size (in MB) # 默认是400,建议修改为512
4.开启 IPv6 支持
Extra packages --> ipv6helper(选定这个后,下面几项会自动选择)
Network --> odhcp6c
Network --> odhcpd-ipv6only
LuCI --> Protocols --> luci-proto-ipv6
LuCI --> Protocols --> luci-proto-ppp
5.开启适用于 VMware 的 VMware Tools
Utilities --> open-vm-tools
Utilities --> open-vm-tools-fuse
6.选择插件
LuCI --> Applications # 根据需要选择,* 代表编入固件,M 表示编译成模块或者IPK包,为空表示不编译
7.选择主题
LuCI --> Themes # 选择喜欢的主题,可以选多个
插件说明
下载编译所需插件
1 | make download -j8 |
检查文件完整性
1.查找文件小于1k的文件
1 | find dl -size -1024c -exec ls -l {} \; |
2.删除小于1k的文件
1 | find dl -size -1024c -exec rm -f {} \; |
3.继续下载、检查步骤
编译
1 | make V=s -j1 |
V=s表示开启详情,-j1表示编译线程,可根据实际调整
编译完成默认的编译输出路径为bin/targets,默认密码是password
再次编译
拉取最新lede源码
1 | cd lede |
更新 feeds 源中的插件
1 | ./scripts/feeds update -a |
清除上一次编译文件和目录(可选,非必要)
1.源码较大更新,删除 /bin 和 /build_dir 目录中的文件
1 | make clean |
2.更换架构,删除 /bin 和 /build_dir 目录的中的文件(make clean),以及 /staging_dir、/toolchain、/tmp 和 /logs 中的文件
1 | make dirclean |
3.完全清理,回到刚git clone初始状态
1 | make distclean |
如果需要重生成新配置
1.清除临时文件和编译配置文件
1 | rm -rf ./tmp && rm -rf .config |
2.重复执行2.7-2.9节内容
至此教程结束~