Loading

如何让WSL2使用自己编译的内核

最近有一个摄像头的项目,想着为什么不直接使用wsl呢。查阅了网络上大量的资料,修改了WSL2内核来支持UVC

wsl基本介绍 以及 安装

wsl(windows subsystem for linux)是windows自带的linux 环境,和NT共同运行在hypervisor,两者通过网络访问。

wsl2 安装方法参考微软官网 wsl安装

编译内核

下面开始linux内核编译过程

下载linux源码

源码版本选择
在wsl执行命令 uname -a 查看当前的linux版本

我的Linux版本是5.15 进入微软 WSL2-Linux-Kernel 项目,下载对应内核版本的源码。

首先安装依赖,创建下载源码的文件夹,下载linux内核源码,解压到当前文件夹

微软目前最新的内核是 6.1,不过我还是使用5.15来编译,编译过程都一样

sudo apt install build-essential flex bison dwarves libssl-dev libelf-dev libncurses5-dev
mkdir kernel
wget https://github.com/microsoft/WSL2-Linux-Kernel/archive/refs/tags/linux-msft-wsl-5.15.150.1.tar.gz
tar -vxf linux-msft-wsl-5.15.150.1.tar.gz
cd linux-msft-wsl-5.15.150.1

内核中目录的结构长这样

使用wsl内核配置

wsl2和常规的linux不同,所以我们要根据微软的配置文件来配置内核。

之前配置失败就是因为 直接使用 Microsoft/config-wsl 文件没有给没有给make menuconfig 传递正确的参数,指定文件可以使用make menuconfig KCONFIG_CONFIG=Microsoft/config-wsl,不过为了增加容错,这里直接使用复制到根目录的方法了

微软的配置在源码根目录下的Microsoft目录下,将他复制到源码根目录下。

cp Microsoft/config-wsl .config

添加uvc内核驱动

配置linux内核, 进入配置页面

make menuconfig

在内核配置页面按下 / 搜索 uvc,找到uvc相关的内核配置

将上面所有非 y 的配置为 y。我这是已经配置好的界面

配置好后,保存退出

编译内核

到这里,内核已经配置成功

如果想要修改内核版本号可以修改makefile文件

vim Makefile

修改内核名 在 .config中

General setup  --->
    (-kuraxii-bulid) Local version - append to kernel release

编译内核

make -j4

编译完成后,可以看到最后有输出路径。这就是编译成功的内核镜像了

切换wsl内核

将内核文件复制到windows任意一个目录。我将它放在C:\Windows\System32\lxss\tools。这是wsl默认的内核存放目录

转到 %USERPROFILE%目录修改.wslconfig文件,没有就创建文件

添加配置

[wsl2]
kernel=C:\\Windows\\System32\\lxss\\tools\\bzImage

重启内核

启动windows 终端,关闭wsl。等待8秒后重新启动wsl

wsl --shutdown

现在,查看linux内核版本发行版,可以看到内核已经换成我们编译的内核

uname -a

posted @ 2024-04-11 12:06  kuraxii  阅读(2932)  评论(1)    收藏  举报