编译属于自己的理想Openwrt固件
编译属于自己的理想Openwrt固件
编译属于自己的理想Openwrt固件
本文详细介绍了如何编译Openwrt固件,包括编译环境的选择、依赖安装、源码下载及配置、编译过程等步骤,并提供了具体的命令行操作示例。
前言
近年来,Openwrt因其强大的功能和灵活性而受到越来越多用户的青睐。许多用户选择使用Openwrt来实现旁路由等特殊功能。在使用过程中,一些用户可能会发现现成的固件要么过于精简,要么功能过多,因此选择自己编译固件以满足特定需求。本文将详细介绍如何编译Openwrt固件,适合有一定技术基础的用户参考。
一、编译环境
在开始编译之前,需要确定编译环境。目前主要有两种编译环境可供选择:
1. 云编译
云编译是一种便捷的编译方式,可以使用P3TERX大佬编写的Actions-OpenWrt项目,在GitHub Actions上进行云编译。这种方法不需要搭建本地编译环境,适合对编译环境搭建不熟悉的用户。
2. Debian或Ubuntu编译
对于熟悉Linux环境的用户,可以选择在Debian或Ubuntu系统上进行编译。这种方法需要搭建本地编译环境,但可以更好地控制编译过程。可以选择在物理机或虚拟机上搭建编译环境,本文将以VMware+Ubuntu为例进行说明。
二、Openwrt编译
安装编译依赖
在开始编译之前,需要安装一些必要的依赖包。以下是具体的安装命令:
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 libfuse-dev libglib2.0-dev libgmp3-dev libltdl-dev libmpc-dev libmpfr-dev libncurses5-dev libncursesw5-dev libpython3-dev libreadline-dev libssl-dev libtool lrzsz ninja-build p7zip p7zip-full patch pkgconf python2.7 python3 python3-pyelftools python3-setuptools qemu-utils rsync scons squashfs-tools subversion swig texinfo uglifyjs upx-ucl unzip vim wget xmlto xxd zlib1g-dev
源码下载及配置
1. 首次编译
从GitHub仓库获取编译文件:
git clone https://github.com/coolsnowwolf/lede
cd lede
接下来需要设置插件源。有两种方法可以设置下载仓库:
使用命令行添加下载仓库:
git clone https://github.com/fw876/helloworld.git package/lean/luci-app-ssr-plus echo 'src-git helloworld https://github.com/fw876/helloworld' >> feeds.conf.default
这种方式在编译后会出现在Openwrt的“软件包”、“软件源”中。
直接修改
feeds.conf.default
文件:这种方式同样会在编译后出现在Openwrt的“软件包”、“软件源”中。
更新并安装feeds:
./scripts/feeds update -a
./scripts/feeds install -a
配置OpenWrt Configuration:
make menuconfig
在这里根据路由器的平台和架构,选择相应的选项。例如,如果是x86架构,选择x86选项。其他选项包括无线支持、IPv6支持以及需要的插件。
下载dl库并编译固件:
make download -j8
检查文件完整性:
find dl -size -1024c -exec ls -l {} ;
find dl -size -1024c -exec rm -f {} ;
make download
编译固件:
make V=s -j1
2. 二次编译
二次编译时,需要先更新代码和feeds:
cd lede
git pull
./scripts/feeds update -a && ./scripts/feeds install -af
make defconfig
清理旧文件:
make clean
make dirclean
make distclean
rm -rf ./tmp && rm -rf .config
重新配置插件:
make menuconfig
make download -j8 V=s
make -j$(nproc) || make -j1 V=s
编译完成后,固件输出路径为bin/targets
。
总结
在VMware+Ubuntu的编译环境下,可能会遇到编译成功和失败的情况。根据一些用户的反馈,这可能与本地网络环境有关。如果编译失败,可以尝试检查dl库的完整性或更换编译环境。虽然云编译是一种更便捷的选择,但在本地编译可以帮助用户更好地理解整个编译过程,从而在遇到问题时能够更快地定位和解决。