WSL2-Linux-Kernel README

The project's README from github.com/microsoft/WSL2-Linux-Kernel. As one markdown file: README.md.

Introduction

The WSL2-Linux-Kernel repo contains the kernel source code and configuration files for the WSL2 kernel.

Reporting Bugs

If you discover an issue relating to WSL or the WSL2 kernel, please report it on the WSL GitHub project. It is not possible to report issues on the WSL2-Linux-Kernel project.

If you're able to determine that the bug is present in the upstream Linux kernel, you may want to work directly with the upstream developers. Please note that there are separate processes for reporting a normal bug and a security bug.

Feature Requests

Is there a missing feature that you'd like to see? Please request it on the WSL GitHub project.

If you're able and interested in contributing kernel code for your feature request, we encourage you to submit the change upstream.

Build Instructions

Instructions for building an x86_64 WSL2 kernel with an Ubuntu distribution using bash are as follows:

  1. Install the build dependencies:
    sudo apt install build-essential flex bison dwarves libssl-dev libelf-dev cpio qemu-utils rsync

  2. Modify WSL2 kernel configs (optional):
    make menuconfig KCONFIG_CONFIG=Microsoft/config-wsl

  3. Build the kernel using the WSL2 kernel configuration and put the modules in a modules folder under the current working directory:
    make KCONFIG_CONFIG=Microsoft/config-wsl && make INSTALL_MOD_PATH="$PWD/modules" modules_install

    You may wish to include -j$(nproc) on the first make command to build in parallel.

  4. Install the kernel's UAPI headers into a headers folder:
    make headers_install INSTALL_HDR_PATH="$PWD/headers"

  5. Build the perf tooling into a perf folder:
    make -C tools/perf NO_JEVENTS=1 NO_JVMTI=1 NO_LIBTRACEEVENT=1 install DESTDIR="$PWD/perf" prefix=/

Then, you can use a provided script to create a VHDX containing the modules, headers, and perf tooling: ./Microsoft/scripts/gen_artifacts_vhdx.sh "$PWD/modules" "$PWD/headers" "$PWD/perf" $(make -s kernelrelease) modules.vhdx

To save space, you can now delete the compilation artifacts: make clean && rm -r "$PWD/modules" "$PWD/headers" "$PWD/perf"

If you prefer, you can also build the VHDX manually as follows. WSL expects the artifacts laid out under <kernelrelease>/{modules,linux-headers,perf}, so first assemble a staging directory:

  1. Stage the modules, headers, and perf tooling under the kernel release directory:

    release=$(make -s kernelrelease)
    mkdir -p "$PWD/staging/$release/linux-headers"
    cp -r "$PWD/modules/lib/modules/$release" "$PWD/staging/$release/modules"
    rm -f "$PWD/staging/$release/modules/build" "$PWD/staging/$release/modules/source"
    cp -r "$PWD/headers/." "$PWD/staging/$release/linux-headers"
    cp -r "$PWD/perf" "$PWD/staging/$release/perf"
    
  2. Calculate the image size (plus 256MiB for slack): image_size=$(du -bs "$PWD/staging" | awk '{print $1;}'); image_size=$((image_size + (256 * (1<<20))));

  3. Build a populated ext4 image: mke2fs -L '' -d "$PWD/staging" -N $(( $(find "$PWD/staging" | wc -l) + 4096 )) -b 1024 -t ext4 "$PWD/modules.img" $((image_size / 1024))

  4. Convert the img to VHDX: qemu-img convert -O vhdx "$PWD/modules.img" "$PWD/modules.vhdx"

  5. Clean up: rm "$PWD/modules.img" # optionally the $PWD/staging, $PWD/modules, $PWD/headers, and $PWD/perf dirs too

Install Instructions

Please see the documentation on the .wslconfig configuration file for information on using a custom built kernel.

WSL2-Linux-Kernel (microsoft/WSL2-Linux-Kernel)

Searching Database…

这是什么?这是驱动 WSL2(Windows 的 Linux 子系统 2)的 Linux 内核官方源码仓库,包含微软所使用的内核源代码和配置文件。
这是拿来就能用的应用,还是只是内核源代码?它是原始的内核源代码和构建配置,不是可安装的应用。如果你需要自定义的 WSL2 内核而非微软默认自带的版本,就要自己编译。
怎么用它构建自定义 WSL2 内核?安装构建依赖,运行“make menuconfig KCONFIGCONFIG=Microsoft/config-wsl”调整配置,再用“make KCONFIGCONFIG=Microsoft/config-wsl”构建并安装模块,接着构建头文件和 perf 工具,最后用提供的脚本把所有内容打包成 VHDX。
构建之前需要装好什么?需要一个 Linux 构建环境(例如 Ubuntu),并装有 build-essential、flex、bison、dwarves、libssl-dev、libelf-dev、cpio、qemu-utils 和 rsync。
谁才真正需要自己构建它?主要是高级 WSL 用户或内核开发者,他们需要微软默认内核未包含的自定义内核模块、驱动或配置选项。
构建出的内核用在哪里?构建好的内核/VHDX 由 Windows 上的 WSL2 通过 .wslconfig 文件加载,替换 WSL2 中 Linux 发行版使用的默认内核。
怎么实际使用我自己构建的内核?按照 Install Instructions 部分的说明,在 .wslconfig 配置文件中通过自定义内核设置把 WSL 指向它。
内核功能改动应该提交到这个仓库吗?如果你的功能与上游 Linux 相关,建议直接向上游提交补丁,而不是只改动这个仓库的分支。
构建说明针对什么目标架构?文档中的构建步骤专门针对在基于 Ubuntu 的 bash 环境中构建 x86_64 的 WSL2 内核。
Creator
microsoft
Size
2.9 GB
Stars
10.6K
Age
7y
Commits · 90 Days