Windows下编译Openwrt要么用虚拟机,要么用SSH连接到远程Linux主机,做一点修改比较麻烦。
为什么是WSL2?因为WSL1是转译层,WSL2是轻量级虚拟机,跑的完整Linux内核,出问题的概率比较小。
甚至可以通过Visual Studio Code连接到WSL2,有一个好看又好用的编辑器,虽然WSL2也可以打开GUI程序,但是Linux的GUI问题很多,就像高分辨率下的DPI问题,就算改了配置也看起来也很变扭。
开启WSL2需要几步?也就是开启WSL支持还有windows虚拟机支持,安装wsl的内核升级包然后下载想要的Linux版本就完成了。支持WSL2的windows 10为21H2或者以后的版本,LTSC 2021用户有福啦。虽然我用的windows 11。
开启WSL和Hyper-V
通过两条命令,用管理员身份打开powershell运行:
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
也可以通过UI界面开启:
按下 Win + R 键,然后输入optionalfeatures再点击确定:

就会出现:

然后勾选Hyper-V和适用于Linux的Windows子系统:

点击确定并重启电脑即可。
安装WSL和发行版Linux
重启进入系统后,打开终端,并执行:
wsl --update
wsl --set-default-version 2
powershell会自动下载需要的安装文件,大约200MB,如果速度很慢那可能需要一点魔法手段。
顺便设置默认WSL版本为2。

之后就是从windows自带的商店里安装喜欢的Linux发行版。
编译Openwrt建议使用Ubuntu 20.04,既可以编译Openwrt 21.02,也可以编译Openwrt 24.10。
直接在商店里面安装即可。

打开后,首先会提示创建一个用户,即sudo用户,默认禁止root用户登录:

创建好新用户即可进入Ubuntu终端。
修改PATH环境变量
根据Openwrt的文档,WSL因为包含了Windows下的路径,里面含有空格,会导致openwrt打包镜像的时候报错。解决办法就是排除Windows的路径。在Ubuntu下执行:
sudo tee -a /etc/wsl.conf << EOF > /dev/null
[interop]
appendWindowsPath = false
EOF
这是入侵式永久性修改,因为编译Openwrt的路上还会出很多情况。
之后在Windows终端下执行下面的命令以重启WSL:
wsl --shutdown
即可完成Windows下WSL2的Ubuntu编译环境搭建。