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
|
执行完毕后重启电脑。
参考: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
|
编译
📦 一次完整编译的产物体积很大,实测源码目录可达到 14GB(du -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
|
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
|
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
|
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)
1
2
|
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash
source ~/.bashrc
|
1
2
3
4
5
|
nvm install --lts
nvm install node
nvm use --lts
node --version
npm --version
|
1
2
|
npm config set registry https://registry.npmmirror.com
npm config get
|
- 全局安装 DeepSeek Harness CLI
1
|
npm install -g @deepseek-ai/dsh
|
参考链接 :