为你的WSL 2编译一个最新的Linux内核吧!

前言

本文原载于我的博客,地址:https://blog.guoziyang.top/archives/54/

随着Win 10 2004版本的正式推送,很多人也都用上了最新的WSL 2,这使得Win 10成了最好的Linux发行版(雾)。WSL 2相比WSL 1,最大的改变就是使用了真正的Linux内核,而不仅仅是一个适配层。我们可以通过命令uname -r查看这个内核的版本,通过正式推送获得的WSL 2的内核版本应当是4.19.84。这本没有什么问题,可是我在最近的操作系统实验过程中注意到,Microsoft可能对这个内核动过什么手脚,导致该内核无法支持minix文件系统(Bochs虚拟机挂载的虚拟硬盘就是该文件系统),而Linux内核的官方文档表示,Linux内核是原生支持该文件系统的……估计是微软在编译内核的时候把这个功能去掉了吧。或者,即使你不使用minix文件系统,仅仅是想体验最新版的内核,也可以尝试一下。

本次我们编译https://www.kernel.org/上面最新的5.7版本的内核。

前置工作

首先,我们需要一个可用的Linux环境,Ubuntu就很不错,我使用的是刚刚发布的20.04,作为内核编译的平台。

我们需要安装编译内核所必要的依赖:

sudo apt install g++ make flex bison libssl-dev libelf-dev bc

接着我们需要将内核源码下载下来,直接去https://www.kernel.org/上下载即可,我下载的是5.7.0版本,地址如下:

https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.7.tar.xz

接着我们使用如下的命令解压该压缩文件:

tar xvf linux-5.7.tar.xz
cd linux-5.7

接着,我们需要配置文件,否则在编译是就需要填写大量的选项,麻烦又无聊。我们可以使用微软官方的配置文件,但是官方配置比较老(4.19.84)。好在,有叶欣仁为我们整理了适合Linux 5.7的WSL 2的配置文件,文件在下方:

https://github.com/xieyubo/WSL2-Linux-Kernel/blob/wsl-xyb-port-5.7.y/Microsoft/config-wsl

下载该文件后,在linux-5.7文件夹下新建一个叫Microsoft的文件夹,将配置文件改名为config-wsl放入其中即可。

当然,由于是微软的配置文件,我们需要做一些修改,我主要就做了两处修改。

其一,由于我需要minix文件系统支持,就打开了CONFIG_MINIX_FS,即:

CONFIG_MINIX_FS=y

其二,是一个可有可无的选项:CONFIG_LOCALVERSION字段,你可以在这个字段下写一些个性化的东西,例如自己的名字,这样在新系统中使用uname -r查看内核版本时就会出现自己的名字。

开始编译

编译内核是在linux-5.7文件夹下进行的,在该文件夹下执行命令:

make KCONFIG_CONFIG=Microsoft/config-wsl

就开始了内核的编译工作,如果想要发挥多核心处理器的优势,可以命令后面加上-j n的参数,即可使用n个核心进行编译。

我使用四核心进行编译大概需要十分钟。

编译完成后的内核镜像存放为arch/x86/boot/bzImage文件,将其重命名为kernel,并拷贝到win 10中。

替换WSL内核

在替换内核之前,首先需要关闭正在运行的WSL实例,在CMD中使用如下命令即可:

wsl --shutdown

接着进入Win 10中的C:\Windows\System32\lxss\tools文件夹下,将kernel文件替换为刚刚编译的那个即可(当然最好把旧的那个备份下)。重启Windows 10。

再次进入WSL 2后,使用uname -r命令,就可以看到内核已经变成5.7版本的内核了,如果编译时加上了个性化信息的话,也会出现在内核版本的后面。

Done!

你可能感兴趣的:(操作系统)