惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园_首页
Blog — PlanetScale
Blog — PlanetScale
腾讯CDC
aimingoo的专栏
aimingoo的专栏
Microsoft Azure Blog
Microsoft Azure Blog
A
About on SuperTechFans
J
Java Code Geeks
G
Google Developers Blog
N
Netflix TechBlog - Medium
Vercel News
Vercel News
Y
Y Combinator Blog
Recent Announcements
Recent Announcements
I
InfoQ
Stack Overflow Blog
Stack Overflow Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
T
The Blog of Author Tim Ferriss
罗磊的独立博客
GbyAI
GbyAI
小众软件
小众软件
大猫的无限游戏
大猫的无限游戏
WordPress大学
WordPress大学
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More

zStack

Kerberos 认证体系引起的产品系统免密问题 | zStack 通过 strace 追踪 sqlldr 的性能问题 控糖革命 | zStack 单例模式的几种 C++ 实现 | zStack 通过 ChatGPT 协助解决软件安装问题 | zStack 【xv6】Copy on write fork() | zStack 【xv6】trap | zStack 【xv6】system call | zStack 如何用 C 实现协程 | zStack 利用 nginx-upload-module 实现文件上传和重命名 | zStack 如何找到一个适合自己的笔记软件 | zStack 为终端设置 ASCII ART | zStack Qver - 用于练手的服务器程序 | zStack 关于我在宿舍种草的那些事 | zStack
在 WSL2 的 Arch Linux 下编译并替换内核
Noicdi · 2022-01-29 · via zStack

在 WSL2 的 Arch Linux 下编译并替换内核

2022-01-29 07:05:05 #WSL 

闲来无事,想把 WSL2 的 kernel 升级一下。GitHub 中微软官方发布的 WSL2 kernel 最新版本为5.10.74.3,但是 Microsoft Update Catalog 中一直没有相应版本的安装包(截止本文发布)

于是打算自己动手编译一下

编译环境

WSL2 下的 Arch Linux

image-20220129195006232

编译内核

整体编译思路就是利用微软的编译配置文件来编译 Linux kernel,并在相应的 Windows 目录下替换现有的内核

这里放一下 GitHub 中的 WSL2-Linux-Kernel

下载源码

在 GitHub 下载相应版本的 releases

1
wget https://github.com/microsoft/WSL2-Linux-Kernel/archive/refs/tags/linux-msft-wsl-5.10.74.3.tar.gz

下载完成后解压缩并进入目录

1
2
tar zxvf linux-msft-wsl-5.10.74.3.tar.gz
cd WSL2-Linux-Kernel-linux-msft-wsl-5.10.74.3/

为确保内核树绝对干净,进入内核目录并执行make mrproper命令

1
make clean && make mrproper

安装编译工具

微软也在项目里告知了步骤,其中也包括编译工具

image-20220129183105502

这个不能照葫芦画瓢直接复制下来,需要在 ArchWiki 中找一下 Arch Linux 中的包

build-essentialflexbison都集成在 Arch Linux 的base-devel里了,其他两个也有相对应的包

1
sudo pacman -S base-devel openssl libelf pahole xmlto kmod inetutils bc

关于pahole

在多次编译时,最终都会报错

1
2
3
BTF: .tmp_vmlinux.btf: pahole (pahole) is not available
Failed to generate BTF for vmlinux
Try to disable CONFIG_DEBUG_INFO_BTF

一种方法是在Microsoft/config-wsl中对CONFIG_DEBUG_INFO_BTF设置关闭

✨ 另一种方法是下载pahole,此方法取自 Stack Overflow,其他发行版遇到此问题也可以看一下


关于其余四个包:

ArchWiki 推荐


2022-02-08更新:

在最新推出的5.10.93.2版本中,官方修复了关于以上提到的BTF报错,针对 Ubuntu 给出依赖项dwarves

image-20220208151648920

image-20220208151617183


修改编译配置文件

打开Microsoft/config-wsl文件,把内核号修改了一下,改成自己的名字

image-20220129200205133

开始编译

1
make KCONFIG_CONFIG=Microsoft/config-wsl -j

编译开始时会出现编译选项,全部按照默认就可以了

image-20220129200241690

然后就可以等着编译完成了


可以看到编译完成的内核所在的路径为arch/x86/boot/bzImage

image-20220129201037392

image-20220129201122975

这就是编译好的 WSL2 的内核了

替换内核

WSL2 使用的内核是放在 Windows 目录下的C:\WINDOWS\System32\lxss\tools

只需要把编译好的bzImage复制到此路径下,并更名为kernel即可

image-20220129191238317

可以使用文件管理器复制内核

1
explorer.exe .

关闭所有 WSL,并将bzImage复制到C:\WINDOWS\System32\lxss\tools下并更名为kernel

替换内核前需要将所有 WSL 关闭

image-20220129201443082


启动 Arch Linux,并截图

image-20220129201701803

🌈 可以看到内核已经替换为5.10.74.3版本了

目录

  1. 编译环境
  2. 编译内核
    1. 下载源码
    2. 安装编译工具
    3. 修改编译配置文件
    4. 开始编译
  3. 替换内核