前言
恩山论坛上有很多用户编译好的现成固件,自己编译固件最大的优势是可以根据需求更好的自定义,建议没有特别需求的用户还是直接选用现成的固件即可。编译固件也是一种乐趣,整个过程大约1-3小时左右,需要耐心等待。
环境要求
- 系统版本
Debian 11 或者 Ubuntu LTS
网络要求
最好是境外主机或者能够访问国际网络,大陆网络环境编译失败率较高,配置推荐 2H4G 以上
编译依赖
# 升级 sudo apt update -y sudo apt full-upgrade -y # 安装依赖 sudo apt install -y ack antlr3 aria2 asciidoc autoconf automake autopoint binutils bison build-essential \ bzip2 ccache cmake cpio curl device-tree-compiler fastjar flex gawk gettext gcc-multilib g++-multilib \ git gperf haveged help2man intltool libc6-dev-i386 libelf-dev libglib2.0-dev libgmp3-dev libltdl-dev \ libmpc-dev libmpfr-dev libncurses5-dev libncursesw5-dev libreadline-dev libssl-dev libtool lrzsz \ mkisofs msmtp nano ninja-build p7zip p7zip-full patch pkgconf python2.7 python3 python3-pip libpython3-dev qemu-utils \ rsync scons squashfs-tools subversion swig texinfo uglifyjs upx-ucl unzip vim wget xmlto xxd zlib1g-dev # 清理 sudo apt autoremove --purge sudo apt clean
开始编译
- 新建一个用户,用于编译固件
useradd -m openwrt # 新建一个名为 openwrt 的用户 # 修改用户默认的 Shell apt install -y sudo usermod -s /bin/bash openwrt # 切换用户 su openwrt cd ~
- 拉取源码,这里用的是 Lean 大佬的 LEDE 分支源码
git clone https://github.com/coolsnowwolf/lede cd lede
- 添加软件源,L大源码里默认有四个软件源里面包含了大部分常用插件,如果要添加其他没有的插件则需要自行添加软件源至
feeds.conf.default
文件,当然也可以单独添加某个插件vim feeds.conf.default # 添加软件源(打开下方仓库链接可以查看包含的插件列表,一般选前两个源就行) src-git kenzo https://github.com/kenzok8/openwrt-packages src-git small https://github.com/kenzok8/small src-git haibo https://github.com/haiibo/openwrt-packages src-git liuran001 https://github.com/liuran001/openwrt-packages # 单独添加(在更新并安装插件之前执行) ## 插件 git clone https://github.com/esirplayground/luci-app-poweroff.git package/luci-app-poweroff # 更新并安装插件 ./scripts/feeds clean ./scripts/feeds update -a ./scripts/feeds install -a
自定义配置
# 修改默认IP为 10.0.0.2 sed -i 's/192.168.1.1/10.0.0.2/g' package/base-files/files/bin/config_generate # 修改默认主机名 sed -i '/uci commit system/i\uci set system.@system[0].hostname='Soft_Router'' package/lean/default-settings/files/zzz-default-settings # 加入编译者信息 sed -i "s/OpenWrt /Kinoko build $(TZ=UTC-8 date "+%Y.%m.%d") @ OpenWrt /g" package/lean/default-settings/files/zzz-default-settings # 修改默认主题 sed -i "s/luci-theme-bootstrap/luci-theme-argon/g" feeds/luci/collections/luci/Makefile
- 执行
make menuconfig
命令进入编译菜单菜单选项简要说明:
# 选择 CPU 类型 Target System (x86) --> # 软路由选择 x86,硬路由根据型号厂家自行选择 Subtarget (x86_64) --> # CPU 子选项 Target Profile (Generic x86/64) --> # 厂家具体型号 # 设置镜像编译的格式(squashfs,ext4) Target Images --> # 默认 squashfs # 添加较多插件时,为了避免空间不足,建议修改下面两项默认大小(x86/64) Target Images --> (16) Kernel partition size (in MB) # 默认是16,建议修改为256 Target Images --> (400) Root filesystem partition size (in MB) # 默认是400,建议修改为1024 # 开启 IPv6 支持 Extra packages --> ipv6helper(选定这个后,下面几项会自动选择) Network --> odhcp6c Network --> odhcpd-ipv6only LuCI --> Protocols --> luci-proto-ipv6 LuCI --> Protocols --> luci-proto-ppp # 开启适用于 VMware 的 VMware Tools Utilities --> open-vm-tools Utilities --> open-vm-tools-fuse # 选择插件 LuCI --> Applications # 根据需要选择,* 代表编入固件,M 表示编译成模块或者IPK包,为空表示不编译 # 选择主题 LuCI --> Themes # 选择喜欢的主题,可以选多个 # 其他选项一般不需要调整,如感兴趣可以自行了解
插件中文说明对照表:https://www.right.com.cn/forum/thread-3682029-1-1.html
配置完成后使用编译菜单底部的
Save
保存,然后退出菜单Exit
,开始下载软件包# 预下载编译所需的软件包 make download -j8 # 检查文件完整性 find dl -size -1024c -exec ls -l {} \; # 检查文件完整性命令可以列出下载不完整的文件,小于1k的文件属于下载不完整,如果存在则用下面的命令删除,然后重新下载编译所需的软件包,再次检查 # 确认所有文件完整可大大提高编译成功率,避免浪费时间 find dl -size -1024c -exec rm -f {} \;
- 最后编译固件,编译完成后输出路径是
bin/targets
,默认密码是password
# 编译固件(-j 后面是线程数,首次编译推荐用单线程) make V=s -j1
二次编译
- 拉取最新 OpenWrt 源码和更新 feeds 源中的软件包源码
cd lede git pull ./scripts/feeds update -a ./scripts/feeds install -a
- 清除旧的编译产物和目录(可选)
make clean # 源码有大规模更新或者内核更新后执行,以保证编译质量 # 此操作会删除 /bin 和 /build_dir 目录中的文件 make dirclean # 更换架构编译前必须执行 # 此操作会删除 /bin 和 /build_dir 目录的中的文件(make clean),以及 /staging_dir、/toolchain、/tmp 和 /logs 中的文件
- 同首次编译,多线程编译失败后自动进入单线程编译,失败则输出详细日志
make defconfig make download -j8 find dl -size -1024c -exec ls -l {} \; make -j$(nproc) || make -j1 || make -j1 V=s # 如果需要重新配置 rm -rf ./tmp && rm -rf .config # 清除临时文件和编译配置文件 make menuconfig make download -j8 find dl -size -1024c -exec ls -l {} \; make -j$(nproc) || make -j1 || make -j1 V=s
Comments | 1 条评论
博主 猫哥
感谢佬的文档