首先OpenWrt系统的编译构建可以在Linux、BSD或MacOS上运行,但是需要区分大小写的文件系统。
建议您使用Linux发行版(例如Debian)编译构建,可以是独立安装,也可以在虚拟环境(Virtualbox、VMware、Hyper-V或Qemu)中运行。
本人选择的是在虚拟机中安装Ubuntu 18.4,如果你是Windows 10用户建议在Windows Linux子系统(WSL)上编译免去安装虚拟机等操作,建议编译环境有10GB以上的可用磁盘空间和2GB以上的内存。

一、安装编译所需的依赖软件

sudo apt-get install subversion build-essential libncurses5-dev zlib1g-dev gawk git ccache gettext libssl-dev xsltproc zip

二、从官方Git镜像仓库克隆源代码

git clone https://git.openwrt.org/openwrt/openwrt.git

如果要指定的分支(branch_name替换成自己需要的分支名称)

git clone https://www.github.com/openwrt/openwrt -b branch_name

三、进入工作目录,检查编译环境,主要检查是否安装所需软件包,如果缺少安装相应依赖软件。

cd openwrt
make prereq

四、更新安装feeds(第三方包)

./scripts/feeds update -a
./scripts/feeds install -a

五、初始化配置文件(不是必须操作)

make defconfig

六、运行固件配置器并进行配置

make menuconfig

*表示将软件包编译进固件,M表示软件包会被编译,但不会编译进固件。

七、下载所有依赖项的源代码(不是必须操作)

make download V=s

八、开始编译

make V=s

其他说明:

编译后固件存放位置:bin/targets/系列名/
V=s表示输出日志 -JX表示最多可以使用X个内核编译(首次编译请勿使用该参数)
例如:使用8个内核编译

make -j9 V=s

如果我们编译出错时可以运行先下面例子,将错误输出到build.log并在屏幕上显示错误

make V=s 2>&1 | tee build.log | grep -i '[^_-"a-z]error[^_-.a-z]' 

清除上次编译文件(bin目录)

make clean

清除交叉编译工具及工具链目录

make dirclean

清除所有相关的东西,包括下载的软件包,配置文件,feed内容等

make distclean

当我们第二次编译时这样操作

git pull #更新源代码
./scripts/feeds update -a #更新feeds
./scripts/feeds install -a #安装feeds
make clean #清除上次编译的object文件(后缀".o")及可执行文件
rm -rf ./tmp #清除编译缓存
rm -rf .config #清除编译配置 如果想保留上次编译配置不执行
make menuconfig #进入配置固件菜单

如果网络慢可以开启代理
设置git代理

git config --global http.proxy socks5://192.168.199.228:1080
git config --global https.proxy socks5://192.168.199.228:1080

查看git代理

git config --global --get http.proxy
git config --global --get https.proxy

取消git代理

git config --global --unset http.proxy
git config --global --unset https.proxy

设置系统代理

export http_proxy="http://192.168.199.228:1080"
export https_proxy="http://192.168.199.228:1080"

取消系统代理

export http_proxy=""
export https_proxy=""