WSL 2(Ubuntu18.04)编译Linux内核(5.7.9)并替换掉WSL 2原有内核

准备工作

配置库

  由于编译过程中需要很多库,因此需要提前进行配置。如果编译过程中遇到的报错均在下文的报错信息中记录。准备安装的库的命令为:

sudo apt-get install libncurses5-dev libncursesw5-dev
sudo apt-get install bison flex
sudo apt-get install libelf-dev libssl-dev

准备Linux内核

  在https://www.kernel.org下载想要编译的Linux内核,为适应下述配置文件,笔者下载的是5.7.9版本。

  将压缩包移至~目录后,对文件进行解压,具体为:

xz -d linux-5.7.9.tar.xz
tar -xf linux-5.7.9.tar

下载WSL 2配置文件

  由于是Linux内核针对WSL 2的编译替换过程,因此直接对内核进行编译将不能适应WSL 2的体系,导致不能正常启动,该直接编译内核的方法在文末也进行了记录。因此去下载相关配置文件,由于官方文件较老旧,因此去GitHub下载较新版本的,地址链接,该配置文件适应5.7.x内核。

  将该文件命名为config-wsl。在linux-5.7.9文件夹下创建新的文件夹Microsoft,并将config-wsl移入文件夹Microsoft中。

  上述过程如下图:

WSL 2(Ubuntu18.04)编译Linux内核(5.7.9)并替换掉WSL 2原有内核_第1张图片
  可以对该config-wsl文件进行一定的修改,比如更改内核版本名后缀为-microsoft-wsl-lyg-port,已完成个性化标记信息,如下图。但需要注意的是,该后缀不能过长,否则可能导致内核无法正常启动;同时该后缀中不能含有(){},否则编译将会报错。

在这里插入图片描述

编译

  在linux-5.7.9文件夹下使用命令如下进行编译,大约5~10mins完成编译。

sudo make KCONFIG_CONFIG=Microsoft/config-wsl -j4

  如下图:

WSL 2(Ubuntu18.04)编译Linux内核(5.7.9)并替换掉WSL 2原有内核_第2张图片

在这里插入图片描述

替换内核

  首先查看原有内核信息,为:

在这里插入图片描述

  接下来进行内核的替换。由“编译结果图”可知编译后的内核文件被存放在了~/linux-5.7.9/arch/x86/boot/bzImage中,因此将该文件复制到E://盘,如下:

在这里插入图片描述

  关闭WSL(需要使用Power Shell用命令wsl --shutdown,否则不能完成替换)。将该文件重命名为kernel后复制到WSL所在路径C:\Windows\System32\lxss\tools中,替换掉原有内核,如下:

WSL 2(Ubuntu18.04)编译Linux内核(5.7.9)并替换掉WSL 2原有内核_第3张图片

  最后,重新启动WSL,并查看内核版本信息和创建时间,如下:

在这里插入图片描述

  WSL成功运行并输出新版本信息,成功替换。

相关报错

NO.1

make menuconfig过程中需要libncurses5-dev和libncursesw5-dev库的支持

sudo apt-get install libncurses5-dev libncursesw5-dev

NO.2

/bin/sh: 1: flex: not found
scripts/Makefile.host:9: recipe for target ‘scripts/kconfig/lexer.lex.c’ failed

sudo apt-get install bison
sudo apt-get install flex

NO.3

“CANNOT GENERATE ORC METADATA FOR CONFIG_UNWINDER_ORC=Y, PLEASE INSTALL LIBELF-DEV, LIBELF-DEVEL OR ELFUTILS-LIBELF-DEVEL”. STOP.

sudo apt install libelf-dev
sudo apt install libssl-dev

NO.4

scripts/kconfig/Makefile:71: recipe for target ‘syncconfig’ failed
make[2]: *** [syncconfig] Error 1
Makefile:588: recipe for target ‘syncconfig’ failed
make[1]: *** [syncconfig] Error 2
Makefile:695: recipe for target ‘include/config/auto.conf.cmd’ failed
make: *** [include/config/auto.conf.cmd] Error 2

直接提升权限使用sudo即可,具体为:

sudo make KCONFIG_CONFIG=Microsoft/config-wsl

题外话:WSL直接编译Linux内核

  下载Linux内核,解压后进入目录中执行命令make menuconfig,如下:

WSL 2(Ubuntu18.04)编译Linux内核(5.7.9)并替换掉WSL 2原有内核_第4张图片

  随后进入图形化界面,配置信息直接按照默认设置即可,故直接退出即可,如下:

WSL 2(Ubuntu18.04)编译Linux内核(5.7.9)并替换掉WSL 2原有内核_第5张图片

  接着对内核进行编译,依次使用命令如下:

sudo make -j4
sudo make modules_install
sudo make install

WSL 2(Ubuntu18.04)编译Linux内核(5.7.9)并替换掉WSL 2原有内核_第6张图片

WSL 2(Ubuntu18.04)编译Linux内核(5.7.9)并替换掉WSL 2原有内核_第7张图片

WSL 2(Ubuntu18.04)编译Linux内核(5.7.9)并替换掉WSL 2原有内核_第8张图片

WSL 2(Ubuntu18.04)编译Linux内核(5.7.9)并替换掉WSL 2原有内核_第9张图片

  至此,完成内核编译。编译时间大约5mins。


参考资料

https://blog.csdn.net/qq_40856284/article/details/106535962
https://blog.csdn.net/ibless/article/details/82349507
https://github.com/xieyubo/WSL2-Linux-Kernel/blob/wsl-xyb-port-5.7.y/Microsoft/config-wsl
https://www.kernel.org/

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