You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WSL2下编译含Linux头文件的内核模块报错求助

WSL2下编译Linux内核模块报错解决

问题背景

尝试在Debian WSL2中编译简单内核模块,代码如下:

#include <linux/module.h>
#include <linux/printk.h>

int init_module(void) {
    printk(KERN_INFO "Hello World");
    return (0);
}

使用的Makefile内容:

obj-m += hello-1.c

all:
    make -C /lib/modules/$(shell uname -r)/build=$(PWD) modules

clean:
    make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean

执行编译后出现错误:

make -C /lib/modules/5.15.90.1-microsoft-standard-WSL2/build=/home/vers modules
make[1]: *** /lib/modules/5.15.90.1-microsoft-standard-WSL2/build=/home/vers: No such file or directory.  Stop.
make: *** [Makefile:4: all] Error 2

已执行sudo apt-get install linux-headers-generic但问题未解决,后续切换到Ubuntu 20.04 WSL2后出现新错误:

make -C /home/vers/gcc/WSL2-Linux-Kernel M=/home/vers/gcc modules
make[1]: *** /home/vers/gcc/WSL2-Linux-Kernel: No such file or directory.  Stop.
make: *** [Makefile:4: all] Error 2

解决方案

1. 修复Makefile语法错误

原Makefile的all目标中,-C参数后的路径写法错误,需先指定内核头文件/源码路径,再用M=$(PWD)指定模块源码目录。同时obj-m后应使用.o文件(规范写法),修改后的Makefile:

obj-m += hello-1.o

all:
    make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules

clean:
    make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean

2. 安装WSL2对应版本的内核头文件

WSL2使用微软定制内核,不能直接用通用头文件包,需安装对应版本的头文件:

  • 执行以下命令安装适配当前内核的头文件:
    sudo apt update
    sudo apt install linux-headers-$(uname -r)
    
  • 若提示找不到包,需手动克隆对应版本的WSL内核源码:
    1. 查看当前内核版本:uname -r
    2. 克隆对应分支的内核源码:
      git clone --depth 1 --branch linux-msft-wsl-$(uname -r | cut -d'-' -f3-4) https://github.com/microsoft/WSL2-Linux-Kernel.git
      
    3. 进入源码目录完成预配置:
      cd WSL2-Linux-Kernel
      zcat /proc/config.gz > .config
      make prepare
      make modules_prepare
      
    4. 修改Makefile中-C后的路径为克隆的内核源码目录,例如:
      all:
          make -C /home/vers/WSL2-Linux-Kernel M=$(PWD) modules
      

3. 验证并修复路径关联

执行ls /lib/modules/$(uname -r)/build,若显示路径不存在,手动创建软链接指向内核源码目录:

sudo ln -s /home/vers/WSL2-Linux-Kernel /lib/modules/$(uname -r)/build

编译验证

修改完成后执行make,若无报错会生成hello-1.ko文件,可通过以下命令加载并查看输出:

sudo insmod hello-1.ko
dmesg | tail -10

内容的提问来源于stack exchange,提问作者Senna Thongthao5

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 01:43:25