编译WSL2编译可运行waydroid的WSL2(ARM)内核

应该也适用于linux下编译可运行waydroid的WSL2(ARM)内核吧…

假设你不想编译直接用的话,我的仓库里面有一份编译好的:
https://github.com/sakuraflows/wsl2-linuxkernel-arm-build/releases

背景介绍:
waydroid可以让linux运行安卓程序,但在运行waydroid必须要对内核进行配置。因此想要在WSL2上运行waydroid,就必须使用自己编译的内核和自己编译内核所对应的模块文件。

linux kernel可以选择不同的发行版系统,我使用的是Ubuntu 24.04.

构建环境:

CPU:高通8cX Gen3
编译系统环境:Windows 11 on Arm 25H2,WSL2,Ubuntu 24.04,kernel ver:6.18.3。
注意:本流程为原生ARM下的非交叉编译流程。

编译内核的版本:WSL2-Linux-Kernel-linux-msft-wsl-6.18.20.1
架构:ARM64

构建流程

注意:以下内容中的命令是以我的环境为例的,在实际使用的时候要视情况改下,比如目录名。

1 准备

配置好基础环境:
克隆此地址下的仓库:https://github.com/microsoft/WSL2-Linux-Kernel

根据微软官方的指导,安装如下依赖:
$ sudo apt install build-essential flex bison dwarves libssl-dev libelf-dev cpio qemu-utils

调整相关配置:
正常编译WSL2的内核是可以跳过这步的,但运行waydroid必须要对内核进行配置。这里可以使用VS Code+wsl插件实现配置文件的可视化编辑。当然,也可以使用nano。(vim对我这个小白来说真是用不了一点。)
我的编译配置文件的路径是:WSL2-Linux-Kernel-linux-msft-wsl-6.18.20.y/Microsoft/config-wsl-arm64,

修改配置及修改后的结果如下:

CONFIG_ANDROID_BINDER_IPC=y
CONFIG_ANDROID_BINDER_DEVICES="binder,hwbinder,vndbinder"
2 构建与编译

执行编译指令:
cd WSL2-Linux-Kernel-linux-msft-wsl-6.18.20.1 # your source code path
make ARCH=arm64 KCONFIG_CONFIG=Microsoft/config-wsl-arm64 -j$(nproc) && make ARCH=arm64 INSTALL_MOD_PATH="$PWD/modules" modules_install

在编译过程中,可能会遇到如下提示:

* Restart config...
*
*
* Android
*
Android Binder IPC Driver (ANDROID_BINDER_IPC) [Y/n/?] y
Android Binderfs filesystem (ANDROID_BINDERFS) [N/y/?] (NEW)

建议选“y”

大约一小时后会编译完成。

在编译完成后,可以根据需要利用源代码中提供的脚本将模块打包为VHDX文件:
sudo ./Microsoft/scripts/gen_modules_vhdx.sh "$PWD/modules" $(make -s kernelrelease) modules.vhdx

3 导出文件

分别将如下两个文件导出

  • arch/arm64/boot/Image
  • modules.vhdx
4 执行清理:

make clean
如果已经确定使用vhdx来加载模块,则可以执行官方指导中的$ make clean & rm -r “$PWD/modules”,否则只执行make clean即可。

使用方法

方法一:
“开始”——“WSL settings”——“开发者”,将自定义内核和自定义内核模块的路径设置为你存放导出的镜像文件和模块文件的路径。
卸载当前的linux子系统分发版,再重装分发版。或直接运行wsl --install -d Ubuntu

方法二:
修改 .wslconfig 文件(或使用 WSL 设置)。

[wsl2]
kernel=<your kernel path>
kernelModules=< your vhdx path>

详见: Waydroid in WSL2 with sound

关于在x64设备上进行交叉编译:

sudo apt install build-essential flex bison dwarves libssl-dev libelf-dev cpio qemu-utils

sudo apt install gcc-aarch64-linux-gnu binutils-aarch64-linux-gnu

(下面一段是一条指令,全部复制进你的终端,然后执行)
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- \
     KCONFIG_CONFIG=Microsoft/config-wsl-arm64 -j$(nproc) && \
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- \
     INSTALL_MOD_PATH="$PWD/modules" modules_install

参考: