自行编译Openwrt(Lede)
近十年电信宽带用户,电信最近良心大发,家中宽带免费升级到了1000M,古董路由器难堪大任,多方比较下选择了RAX3000M。此等路由器,怎能局限于原厂没什么功能的系统! 恩山寻觅多方,各成品系统体验始终不尽如我意,遂上网学习后自行编译Lede分支的Openwrt固件。书此帖以作记录。
1.准备Ubuntu22.04操作系统。使用非root用户登录终端。我用的是VMWare+Ubuntu22.04。安装过程不加赘述。
2.配置代理。编译过程涉及从国外网站下载大量内容,如无代理,则编译龟速且极易失败。如果你有境外服务器,则可直接进入下一步。
3.更新系统,安装依赖。
sudo apt update -y
sudo apt full-upgrade -y
sudo apt install -y ack antlr3 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
4.下载Lede源码
git clone https://github.com/coolsnowwolf/lede
cd lede
5.添加额外的插件仓库。Lede源码自带插件中没有代理上网工具,如OpenClash,Passwall。故需额外添加。
使用ls -a
命令可以查看下载内容,包括单文件与文件夹,其中feeds.conf.default
文件内即为插件库,使用sudo nano feeds.conf.default
命令以进行编辑,向其中加入
src-git kenzo https://github.com/kenzok8/openwrt-packages
src-git small https://github.com/kenzok8/small
然后按Ctrl+O
,Enter
以保存更改,按Ctrl+X
退出编辑。
6.更新feeds
./scripts/feeds update -a
./scripts/feeds install -a
7.自定义配置
# 修改默认IP为 192.168.8.1
sed -i 's/192.168.1.1/192.168.8.1/g' package/base-files/files/bin/config_generate
# 修改默认主机名为MiyaWrt
sed -i '/uci commit system/i\uci set system.@system[0].hostname='MiyaWrt'' package/lean/default-settings/files/zzz-default-settings
# 加入编译者信息
sed -i "s/OpenWrt /Miyalian 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
8.配置编译选项
make menuconfig
各选项解释
- Target System:选择你的设备所使用的处理器架构。
- Subtarget:根据设备的详细型号,选择相应的子目标。
- Target Profile:选择你的设备型号。这会自动设置与设备兼容的预设选项。
- Target Images:选择生成的固件类型,例如:
squashfs
、ext4
等。 - Global build settings:配置全局编译设置,例如:启用/禁用软件包的签名检查、IPv6支持等。
- Base system:选择基本系统组件,例如:网络配置、系统日志、防火墙等。
- Extra packages:选择额外的软件包,如:文件系统支持、VPN、代理等。
- Kernel modules:选择内核模块,如:支持的硬件设备、文件系统、网络协议等。
- LuCI:选择Web界面组件,包括主题、应用、协议支持等。
- Languages:选择系统支持的语言包。
- Libraries:选择编译时需要的库文件,如:加密库、数据库库等。
- Utilities:选择实用工具,如:文件管理器、终端模拟器、脚本语言支持等。
9.下载dl库,编译固件
make download -j8
此步骤要确保没有Error报告,如有,则重新执行make download -j8
命令。
开始编译
make V=s -j1
其中的数字代表编译线程数,首次编译建议1线程,不易出错,但是速度非常慢。
编译输出路径lede/bin/targets
二次编译
1.拉取最新 OpenWrt 源码和更新 feeds 源中的软件包源码
cd lede
git pull
./scripts/feeds update -a
./scripts/feeds install -a
2.清除旧的编译产物和目录(可选)
make clean
源码有大规模更新或者内核更新后执行,以保证编译质量
此操作会删除 /bin 和 /build_dir 目录中的文件
make dirclean
更换架构编译前必须执行
此操作会删除 /bin 和 /build_dir 目录的中的文件(make clean),以及/staging_dir、 /toolchain、/tmp 和 /logs 中的文件
3.同首次编译,多线程编译失败后自动进入单线程编译,失败则输出详细日志
make defconfig
make download -j8
make V=s -j$(nproc)
如果需要重新配置
rm -rf ./tmp && rm -rf .config
make menuconfig
make V=s -j$(nproc)