WSL 配置及更新kernel image、编译kernel model

WSL 安装

启用 Windows 功能

管理员身份打开 PowerShell 或 CMD,依次执行:

1
2
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

执行完毕后重启电脑

异常:VirtualMachinePlatform 卡住

参考:Microsoft Q&A - Windows Win11 25H2
如果启用 VirtualMachinePlatform卡住,可以尝试系统自带的修复: 开始设置 → 设置 → 系统 → 恢复 → 使用 Windows 更新修复问题 → 立即重新安装

更新 WSL 内核

1
2
wsl -v
wsl --update --web-download

默认从 Microsoft Store 下载,--web-download 则从 GitHub 下载。GitHub 下载可能较慢,建议开启代理

设置默认版本

1
wsl --set-default-version 2

WSL 配置文件 .wslconfig

在 Windows 用户目录(C:\Users\<用户名>\)下新建 .wslconfig 文件:

1
2
3
4
5
6
7
[wsl2]
# 分配 8GB 内存给 WSL(按需调整)
memory=8GB
# 使用 4 个逻辑处理器(根据 CPU 核心数调整)
processors=4
# 开启镜像网络(解决 VPN 和局域网问题)
networkingMode=mirrored

💡networkingMode=mirrored(镜像网络)可以让 WSL2 与 Windows 共享网络,解决 VPN 冲突、局域网访问等问题。修改后需在 PowerShell 中执行 wsl --shutdown 重启 WSL 生效。

安装 Ubuntu-24.04 发行版

查看可用的在线发行版列表:

1
2
3
wsl --list --online

wsl --install -d Ubuntu-24.04

安装完成后直接输入 wsl 即可进入系统。


更换 apt 源(清华镜像)

Ubuntu 22.04

1
2
3
4
5
6
# 备份原文件
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak

# 替换源地址(archive 与 security 均指向清华镜像)
sudo sed -i 's@//.*archive.ubuntu.com@//mirrors.tuna.tsinghua.edu.cn@g' /etc/apt/sources.list
sudo sed -i 's@//.*security.ubuntu.com@//mirrors.tuna.tsinghua.edu.cn@g' /etc/apt/sources.list

Ubuntu 24.04

24.04 起 apt 源改用新的 ubuntu.sources 格式:

1
2
3
4
5
6
7
8
# 1. 备份原始配置文件
sudo cp /etc/apt/sources.list.d/ubuntu.sources /etc/apt/sources.list.d/ubuntu.sources.bak

# 2. 替换为清华源
sudo sed -i 's|URIs: http://.*/ubuntu/|URIs: http://mirrors.tuna.tsinghua.edu.cn/ubuntu/|' /etc/apt/sources.list.d/ubuntu.sources

# 3. 更新软件包列表
sudo apt update

编译 WSL2 自定义内核

安装编译依赖

1
sudo apt install build-essential flex bison libssl-dev libelf-dev

下载内核源码

wget 的下载地址与当前内核版本相关,脚本会自动提取版本号:

1
2
3
4
5
6
7
mkdir -p kernel-build
cd kernel-build

KERNEL=$(uname -r) && BASE=${KERNEL%-microsoft-standard-WSL2}
wget "https://github.com/microsoft/WSL2-Linux-Kernel/archive/refs/tags/linux-msft-wsl-${BASE}.tar.gz" -O ~/kernel.tar.gz
tar -xzf ~/kernel.tar.gz -C ./
cd WSL2-Linux-Kernel-linux-msft-wsl-${BASE}

配置内核

1
2
# 使用 WSL 官方默认配置
cp Microsoft/config-wsl .config
命令 说明
make defconfig 使用默认配置:第一次编译内核,想快速得到一个“可用”的配置;置到厂商/内核官方推荐的基线
make menuconfig 图形化交互式配:需要精细调整内核功能(如添加驱动、开启/关闭某个子系统)
make oldconfig 基于旧配置增量更新:修改了 Kconfig 文件,需要同步更新 .config
1
2
3
4
5
6
7
8
9
make menuconfig
│ ① 顶层 Makefile 解析,MAKECMDGOALS = "menuconfig"
│ ② 命中 %config 模式规则(Makefile:747)
│ ③ 先构建依赖: outputmakefile、scripts_basic、FORCE
│ ④ 执行配方: make -f scripts/Makefile.build obj=scripts/kconfig menuconfig
│      └─ scripts/Makefile.build 里 include $(kbuild-file)
│           └─ kbuild-file = scripts/kconfig/Makefile(Kbuild.include:65)
│                └─ 里面的 foreach+eval 把 config_rule 展开成 menuconfig 规则
│ ⑤ 执行: scripts/kconfig/mconf Kconfig

编译

1
make -j$(nproc)

📦 一次完整编译的产物体积很大,实测源码目录可达到 14GBdu -sh .

内核编译产物说明

产物名称 所属阶段 文件类型/格式 核心用途
vmlinux 链接完成 ELF 可执行文件(未压缩) 调试:内核崩溃分析(kdump/crash)、GDB 源码级调试;也是 System.map 等的生成源
bzImage 启动映像(x86) 压缩启动映像(含引导头、自解压代码) 启动系统:x86 平台标准内核,GRUB 直接加载
Image(ARM/ARM64) 启动映像(ARM) 纯二进制机器码(objcopy -O binary,无 ELF 头) 启动系统:ARM 平台的基础映像,或作为进一步压缩/打包的输入
zImage(ARM 特有) 启动映像(ARM) 自解压压缩内核映像(由 compressed/vmlinux 生成) 启动系统:ARM 平台常见启动格式(类似 x86 的 bzImage)
Image.gz / .lz4 / .xz 启动映像(ARM) Image 做压缩处理(bz2/gz/lz4/lzma/lzo/xz/zst) 启动系统:嵌入式系统常用,减小存储空间
uImage 启动映像(ARM) mkimage 打包映像(头部含加载地址/校验) 启动系统:ARM 平台 U-Boot 引导格式
System.map 辅助文件 文本符号表(地址 类型 符号 调试辅助:将内存地址翻译为内核符号,解码 panic 日志、配合 addr2line
*.ko 模块 辅助产物 ELF 可重定位目标文件(ET_REL,含 .modinfo 元数据) 动态扩展:硬件驱动、文件系统等,insmod/modprobe 按需加载时重定位
.config 辅助文件 内核配置文本(CONFIG_XXX=y/m/n 记录配置:本次编译所用的全部配置选项
Module.symvers 辅助文件 文本符号版本表 导出符号的 CRC 版本信息,编译外部模块必需
dtbs 编译产物 设备树二进制(DTB) 描述硬件信息,与内核映像配套加载
modules.order / modules.builtin 辅助文件 文本清单 模块构建/安装顺序、内建模块清单

拷贝内核映像

1
cp arch/x86/boot/bzImage /mnt/d/WSL/

安装自定义内核

配置 .wslconfig 指向新内核

1
2
[wsl2]
kernel=D:\\WSL\\bzImage

⚠️ 路径中的反斜杠需要转义,使用 \\;修改后执行 wsl --shutdown 并重新进入 WSL。

验证内核版本

1
2
3
uname -a
# 可检查版本与编译日期
# Linux DESKTOP-K189HCG 6.18.33.2-microsoft-standard-WSL2 #1 SMP PREEMPT_DYNAMIC Mon Aug 24 21:21:13 CST 2026 x86_64 x86_64 x86_64 GNU/Linux

保留内核头文件(供模块编译使用)

1
2
3
4
5
# 清理编译中间产物(保留源码与 .config)
make clean

# 将内核源码移动到标准位置,供外部模块编译引用
sudo mv ~/kernel-build/WSL2-Linux-Kernel-linux-msft-wsl-6.18.33.2 /lib/modules/6.18.33.2-microsoft-standard-WSL2/build

编译可加载内核模块(hello.ko)

1
2
3
hello/
├── hello.c
└── Makefile
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
obj-m := hello.o

PWD := $(shell pwd)
KDIR := /lib/modules/$(shell uname -r)/build

all:
	$(MAKE) -C $(KDIR) M=$(PWD) modules

clean:
	$(MAKE) -C $(KDIR) M=$(PWD) clean
1
2
3
4
make            # 生成 hello.ko
sudo insmod hello.ko   # 加载模块
sudo rmmod hello.ko    # 卸载模块
dmesg | tail           # 查看内核日志

把 WSL 迁移到 D 盘

默认 WSL 安装在 C 盘,空间紧张时可整体迁移:

1
2
3
4
5
6
7
8
9
# 1. 导出镜像(文件名任意,路径不要有中文)
wsl --export Ubuntu-24.04 d:\ubuntu2404_backup.tar

# 2. 注销原 C 盘系统(会删除原发行版,注意先备份)
wsl --unregister Ubuntu-24.04

# 3. 创建新目录并导入
mkdir D:\WSL\Ubuntu2404
wsl --import Ubuntu-24.04 D:\WSL\Ubuntu2404 d:\ubuntu2404_backup.tar

安装 Docker

  • 旧版本(如果有)
1
sudo apt remove docker docker-engine docker.io containerd runc
  • 装依赖
1
2
sudo apt update
sudo apt install -y ca-certificates curl gnupg lsb-release
  • Docker 官方 GPG 密钥
1
2
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
  • 加 Docker 仓库
1
2
3
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
  • 安装 Docker
1
2
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
  • 将当前用户加入 docker 组(避免每次 sudo)
1
2
3
sudo usermod -aG docker $USER
newgrp docker    # 或重新登录使组生效
docker --version
  • 配置镜像加速
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": [
    "https://docker.1ms.run",
    "https://docker.m.daocloud.io"
  ]
}
EOF

sudo systemctl daemon-reload
sudo systemctl restart docker

Node.js 环境(nvm)

  • nvm
1
2
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash
source ~/.bashrc
  • 安装 Node.js
1
2
3
4
5
nvm install --lts
nvm install node
nvm use --lts
node --version
npm --version
  • 配置 npm 镜像源
1
2
npm config set registry https://registry.npmmirror.com
npm config get
  • 全局安装 DeepSeek Harness CLI
1
npm install -g @deepseek-ai/dsh

参考链接 :

Licensed under CC BY-NC-SA 4.0
使用 Hugo 构建
主题 StackJimmy 设计