本文参考P3TERX大佬博客

前言

本文详细介绍了如何在Windows下使用Windows Subsystem for Linux (WSL)编译OpenWrt固件。通过本文的指南,你将了解到如何在Windows下安装和配置WSL,以及如何克隆OpenWrt的源代码并使用WSL进行编译。此外,本文还介绍了一些常见问题的解决方法,帮助你更加顺利地进行OpenWrt的编译工作。

安装WSL

管理员身份运行Pow­er­Shell ,执行以下命令并重启。

Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux

重启后在应用商店下载Ubuntu 20.04LTS,并配置登录账户。

配置编译环境

设置代理

echo "export ALL_PROXY=\"socks5://127.0.0.1:1080\"" >> ~/.bashrc
echo "export all_proxy=\"socks5://127.0.0.1:1080\"" >> ~/.bashrc
sudo tee -a /etc/apt/apt.conf <<< 'Acquire::http::Proxy "http://127.0.0.1:1080";' > /dev/null
sudo tee -a /etc/apt/apt.conf <<< 'Acquire::https::Proxy "http://127.0.0.1:1080";' > /dev/null

根据实际情况修改上述IP地址及端口

然后执行以下命令:

source ~/.bashrc

验证命令:

sudo apt update && curl ip.sb

无报错并显示代理IP则为成功。

安装编译依赖安装包

首次编译

  1. 更新软件包:
sudo apt-get update
  1. 安装编译需要使用的软件包:
sudo apt-get -y install build-essential asciidoc binutils bzip2 gawk gettext git libncurses5-dev libz-dev patch python3 python2.7 unzip zlib1g-dev lib32gcc1 libc6-dev-i386 subversion flex uglifyjs git-core gcc-multilib p7zip p7zip-full msmtp libssl-dev texinfo libglib2.0-dev xmlto qemu-utils upx libelf-dev autoconf automake libtool autopoint device-tree-compiler g++-multilib antlr3 gperf wget curl swig rsync

p3terx大佬建议执行两次,以最大程度保证安装完整。

安装完成会提示0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

  1. 拉取lean大佬的openwrt源码
git clone https://github.com/coolsnowwolf/lede openwrt
  1. 进入目录
cd openwrt
  1. 根据实际情况添加软件源(可选)
echo 'src-git helloworld https://github.com/fw876/helloworld' >>feeds.conf.default
echo 'src-git passwall https://github.com/xiaorouji/openwrt-passwall' >>feeds.conf.default
  1. 下载feeds中的软件包源码并安装
./scripts/feeds update -a
./scripts/feeds install -a
  1. 配置其他选项或软件包(可选)
#修改默认IP 将下面192.168.66.1修改为你想要的IP地址
sed -i 's/192.168.1.1/192.168.66.1/g' package/base-files/files/bin/config_generate

# 修改系统名
#sed -i 's/OpenWrt/OpenWrt/g' package/base-files/files/bin/config_generate

# 自定义版本号
sed -i "s/OpenWrt /Ryan build $(TZ=UTC-8 date "+%Y.%m.%d") @ OpenWrt /g" package/lean/default-settings/files/zzz-default-settings

#添加温度显示
sed -i 's/or "1"%>/or "1"%> ( <%=luci.sys.exec("expr `cat \/sys\/class\/thermal\/thermal_zone0\/temp` \/ 1000") or "?"%> \&#8451; ) /g' feeds/luci/modules/luci-mod-admin-full/luasrc/view/admin_status/index.htm

# 修改连接数
#sed -i 's/net.netfilter.nf_conntrack_max=.*/net.netfilter.nf_conntrack_max=65535/g' package/kernel/linux/files/sysctl-nf-conntrack.conf
#修正连接数(by ベ七秒鱼ベ)
sed -i '/customized in this file/a net.netfilter.nf_conntrack_max=65535' package/base-files/files/etc/sysctl.conf

# 添加主题
git clone https://github.com/xiaoqingfengATGH/luci-theme-infinityfreedom package/luci-theme-infinityfreedom
git clone https://github.com/Leo-Jo-My/luci-theme-opentomcat.git package/luci-theme-opentomcat
git clone https://github.com/openwrt-develop/luci-theme-atmaterial.git package/luci-theme-atmaterial

# 添加额外非必须软件包
git clone https://github.com/rufengsuixing/luci-app-adguardhome.git package/luci-app-adguardhome
git clone https://github.com/vernesong/OpenClash.git package/OpenClash
git clone https://github.com/destan19/OpenAppFilter.git package/OpenAppFilter
git clone https://github.com/zzsj0928/luci-app-pushbot.git package/luci-app-pushbot
git clone https://github.com/jerrykuku/luci-app-argon-config.git package/luci-theme-argon-config

# 添加smartdns
git clone https://github.com/pymumu/openwrt-smartdns package/smartdns
git clone -b lede https://github.com/pymumu/luci-app-smartdns.git package/luci-app-smartdns
  1. 替换lean大佬的argon主题源码为jerrykuku大佬开源版本,更好看(可选)
cd openwrt/package/lean  
rm -rf luci-theme-argon  
git clone -b 18.06 https://github.com/jerrykuku/luci-theme-argon.git
  1. 调整OpenWrt系统组件
make menuconfig
  1. 预下载编译所需的软件包
make download -j8 V=s
  1. 检查文件完整性
find dl -size -1024c -exec ls -l {} \;
find dl -size -1024c -exec rm -f {} \;

p3terx大佬建议使用第二条命令将小于1k的文件删除,然后重新执行make download,可大大提高编译成功率

  1. 开始编译
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin make -j1 V=s

上面命令为Lean大佬建议的在WSL上编译时使用的命令,非WSL使用make -j1 V=s即可

-j1 后面是线程数。第一次编译推荐用单线程

二次编译

  1. 更新系统软件包
sudo apt-get update
  1. 进入源码目录
cd openwrt
  1. 更新源码
git pull
  1. 更新系统软件包
./scripts/feeds update -a && ./scripts/feeds install -a
  1. 更新其他软件包
cd package/luci-app-pushbot && git pull

根据实际情况更新源码

  1. 配置Openwrt

如果不需要更新配置:

make defconfig 

如果需要更新配置:

rm -rf ./tmp && rm -rf .config
make menuconfig
  1. 预下载编译所需的软件包
make -j8 download
  1. 开始编译
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin make -j$(($(nproc) + 1)) V=s

上面命令为Lean大佬建议的在WSL上编译时使用的命令,非WSL使用make -j$(($(nproc) + 1)) V=s即可

找到编译的固件

编译成功后,在资源管理器输入\\wsl$访问WSL下的文件,固件路径为:

\\wsl$\WSL名称\home\用户名\openwrt\bin\targets\x86\64