WSL2-Linux-Kernel在Windows Subsystem for Linux 2(WSL 2)中扮演着至关重要的角色,它作为WSL 2架构的核心组成部分,为用户在Windows环境下提供了一个完整的Linux内核环境。
什么是WSL2-Linux-Kernel
通过下图我们可以看到它的核心地位。
作用
-
支持Linux二进制文件执行
系统调用兼容性:WSL2-Linux-Kernel提供了完整的系统调用兼容性,这使得用户可以在Windows上直接运行ELF64 Linux二进制文件。这些文件能够利用Linux内核的系统调用来执行多种功能,如文件访问、内存请求和进程创建等。
应用兼容性增强:由于WSL 2使用真实的Linux内核,许多在WSL 1中因系统调用兼容性问题而无法运行的应用程序,现在可以在WSL 2中顺利运行。例如,Linux版本的Docker等应用程序就可以在WSL 2中运行。 -
提升文件系统性能
优化文件存储:在WSL 2中,用户可以将Linux应用中经常访问的文件存储在Linux根文件系统中,从而享受更快的文件系统访问能力。这种优化避免了WSL 1中文件必须存储在C盘的限制,提高了文件访问的效率和灵活性。
Windows与Linux文件互访:WSL 2还允许Windows应用直接访问Linux根文件系统,例如通过文件资源管理器进行文件操作。这种互访能力进一步增强了Windows和Linux之间的集成度。 -
改进网络支持
虚拟机内运行:WSL 2通过虚拟化技术在虚拟机中运行Linux内核,这为用户提供了更加稳定和隔离的运行环境。然而,这也导致网络支持方面需要一些特殊的配置。
网络应用访问:在WSL 2中,用户需要使用虚拟机的IP地址从Windows访问Linux网络应用,同时需要使用Windows主机的IP地址从Linux访问Windows网络应用。微软正在努力改进这一点,以便用户能够更方便地使用localhost访问网络应用。 -
提供定制化和灵活性
内核更新与自定义:用户可以根据需要更新WSL2-Linux-Kernel的版本,甚至编译自定义的内核模块。这为高级用户和开发者提供了更多的定制化和灵活性。
命令行工具:WSL 2还提供了一系列命令行工具来帮助用户控制和查看WSL版本和相关信息,如wsl --set-version
、wsl --set-default-version
等。
定制
我们通过《Windows Subsystem for Linux——安装多个相同的操作系统》中介绍的方法导出一台实例。
wsl --import Ubuntu-24.04-New-WSL-Kernel .\Ubuntu-24.04-New-WSL-Kernel .\Ubuntu-24.04-Base
然后登录
wsl -d Ubuntu-24.04-New-WSL-Kernel -u fangliang
更新系统
sudo apt update
sudo apt -y upgrade
查看当前系统,以和之后进行对比
cd ~
uname -r
下载代码并解压
wget https://github.com/microsoft/WSL2-Linux-Kernel/archive/refs/heads/linux-msft-wsl-6.6.y.zip .
sudo apt install unzip
unzip linux-msft-wsl-6.6.y.zip
安装依赖
sudo apt install build-essential flex bison dwarves libssl-dev libelf-dev pkg-config libncurses-dev cpio
编译
cd WSL2-Linux-Kernel-linux-msft-wsl-6.6.y/
make -j$(nproc) KCONFIG_CONFIG=Microsoft/config-wsl
安装
sudo make modules_install headers_install
cp arch/x86/boot/bzImage /mnt/c/
启用
到Windows系统中,用户目录下创建一个叫.wslconfig的文件(%USERPROFILE%.wslconfig)
填入以下内容,kernel所指向的就是上一步编译结果在Windows上的副本
[wsl2]
kernel=C:\\bzImage
然后在Powershell中关闭WSL
wsl --shutdown
验证
再次登录系统
wsl -d Ubuntu-24.04-New-WSL-Kernel -u fangliang
使用下面命令查看kernel版本,可以看到内核已经升级上来了。