记录一下 WSL2 更换内核的过程

记录一下 WSL2 更换内核的过程

2023年2月13日 · 约 4 分钟 记录一下 WSL2 更换内核的过程 WSLcheatsheetKernel 最近准备开始看 Kernel Pwn 了,但是 wsl2 的内核似乎并不是原版的,所以进行一个替换。

前置条件

确保你使用了 WSL2 而不是 WSL,且 Windows 版本符合 Windows 内部版本 19041 及更高版本

确认内核版本

首先先确认一下自己的内核版本。

我安装过 neofetch 所以直接用 neofetch 了,也可以使用 cat /proc/version 或者 uname -a 这些指令来查看。

原本的内核是 5.15.79.1 版本的。

选择内核版本

我安装 wsl2 的时候 Ubuntu 版本是 22.04.1 LTS ,截至目前 2023/02/13 的最新内核版本是 6.1.9,两者兼容,所以就直接上最新版了。

如果存在不兼容的问题:例如想要给 Ubuntu16 安装 6.X 版本内核,那么你就需要先升级 Ubuntu 版本了,否则直接打不开 ww

在 The Linux Kernel Archives 下载内核,我用的是 镜像站

Terminal window# Replace the filename and the folder name accroding to your cases!curl -LO https://mirrors.edge.kernel.org//pub/linux/kernel/v6.x/linux-6.1.9.tar.gztar xf linux-6.1.9.tar.gzcd linux-6.1.9

使用 WSL2-Linux-Kernel 配置文件

这个 .config 文件针对 wsl2 做出了调整与优化。尽管直到我安装时,它的分支仍然是 linux-msft-wsl-5.15.y,也就是针对 5.15 内核的编译选项,但是仍然适用于我所安装的 6.1.9 版本内核。

Terminal windowcurl https://raw.githubusercontent.com/microsoft/WSL2-Linux-Kernel/linux-msft-wsl-5.15.y/Microsoft/config-wsl >> .config

(可选) 调整配置文件

我修改了 .config 文件里的 CONFIG_LOCALVERSION 字段,以表明内核特点,你也可以在里面修改更多。

编译内核

因为我们已经有了 .config 文件,所以直接 make 一把梭就好了。

在这之前,确认你已安装了所有的依赖项。你可以通过以下指令来安装。

Terminal windowsudo apt install build-essential flex bison dwarves libssl-dev libelf-dev# Go https://github.com/microsoft/WSL2-Linux-Kernel#build-instructions to see the latest build dependencies

在这里,请按照你自己的配置修改 jobs 的数量。

我的 CPU i7-12700F 拥有 12 核 20 线程,所以我可以使用 -j20 选项

Terminal windowsudo make -j20 && sudo make modules -j20 && sudo make modules_install -j20 && sudo make install -j20

在编译前,它会有很多配置项(即在 .config 内没有指定的新内核的配置项)要你指定,没有特殊需求的话一路回车即可。

耐心等待安装完成后,可以在标准输出内找到类似字段。 Kernel: 后的路径即为内核路径。

Terminal windowKernel: arch/x86/boot/bzImage is ready (#2) DESCEND objtool DESCEND bpf/resolve_btfids CALL scripts/checksyscalls.sh DEPMOD /lib/modules/6.1.9-linux-standard-WSL2 INSTALL /boot

修改内核

将其复制到你想要的位置。在我的案例中,我将其复制到了 E:\Ubuntu-2204LTS\linux_kernel_6.1.9

注意这个位置应该存在于你的主硬盘而不是 wsl 中

Terminal windowcp arch/x86/boot/bzImage /mnt/E/Ubuntu-2204LTS/linux_kernel_6.1.9

打开你的用户目录,修改 .wslconfig 文件,在 [wsl2] 标签中添加 kernel 字段,它的值为带有转义反斜杠的 Windows 路径。

例如,在我的案例中, .wslconfig 文件长这个样子。

Terminal window[wsl2]kernelCommandLine = vsyscall=emulatekernel=E:\\Ubuntu-2204LTS\\linux_kernel_6.1.9

[user]default=root

你可以通过 Win+R 输入 %USERPROFILE 打开用户目录,通常,它位于 C:\Users\\ 下。

如果不存在 .wslconfig 文件,那就创建它。

如果不存在 [wsl2] 标签,那就创建它。

重启 wsl

现在,重启你的 wsl2,重新查看内核版本。

如果不出意外,你的内核应该已经修改成功了。

Terminal windowwsl --shutdownwsl

相关推荐

在线教育怎么做?从业者必须知道的十件事
英国投注网站365

在线教育怎么做?从业者必须知道的十件事

⌛ 06-17 👁️ 191
《阴阳师》凤凰火哪里多 凤凰火悬赏封印位置
bt365体育投注3

《阴阳师》凤凰火哪里多 凤凰火悬赏封印位置

⌛ 07-20 👁️ 5344
原神三星成就巴拉奇科达成攻略
英国投注网站365

原神三星成就巴拉奇科达成攻略

⌛ 09-20 👁️ 5175