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

WSL2 5.10.102.1加载can模块失败:Invalid Argument问题求助

WSL2 5.10.102.1 加载CAN模块时符号版本不匹配问题解决

问题现象

执行sudo modprobe can时触发错误:

modprobe: ERROR: could not insert 'can': Invalid argument

查看dmesg输出大量符号版本不匹配及未知符号错误,示例片段:

[ 1297.682601] can: disagrees about version of symbol dev_queue_xmit
[ 1297.682603] can: Unknown symbol dev_queue_xmit (err -22)
[ 1297.682605] can: disagrees about version of symbol consume_skb
[ 1297.682606] can: Unknown symbol consume_skb (err -22)
...

根本原因

这类错误核心是编译CAN模块所用的内核源码/配置与当前WSL2运行的内核版本不兼容,常见诱因:

  • 替换自定义内核后未重启WSL,运行的仍是旧内核
  • 内核配置未正确合并,编译用的.config未包含CAN相关规则
  • 编译环境残留旧产物,导致模块与内核版本不匹配

解决步骤

1. 重启WSL加载新内核

替换自定义bzImage后必须重启WSL才能生效:

# 在Windows命令提示符/PowerShell中执行
wsl --shutdown

重新启动WSL终端。

2. 重新生成正确的内核配置

直接修改Microsoft/config-wsl的方式无效,需将CAN配置合并到编译用的.config中:

cd WSL2-Linux-Kernel-linux-msft-wsl-5.10.102.1/
# 清理旧编译残留
make clean && make mrproper
# 导入当前运行内核的基础配置
zcat /proc/config.gz > .config
# 合并WSL专属配置与CAN配置
cat Microsoft/config-wsl >> .config
# 自动生成完整兼容配置
make olddefconfig

3. 重新编译内核与模块

# 全核心编译内核加速
make -j $(nproc)
# 编译并安装模块
make modules_install
# 复制新内核到Windows用户目录(替换<username>为你的Windows用户名)
cp arch/x86/boot/bzImage /mnt/c/Users/<username>/

4. 验证并加载模块

再次重启WSL后,先确认内核版本匹配:

uname -r
# 正常输出应为5.10.102.1

然后加载CAN模块:

sudo modprobe can
# 若需要虚拟CAN接口,额外执行:
sudo modprobe vcan

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 08:40:28