WSL2 Linux自带的默认内核没有socketCAN功能,这个是很多人吐槽的地方,网上教程多是从https://github.com/microsoft/wsl2-linux-kernel下载对应内核源码,然后在内核配置里开启CAN功能并编译重新生成内核镜像或对应的内核模块,这个过程非常繁琐,本人之前也写过一篇类似文章…
而且这个方法有个巨大的坑:如果安装了多个WSL2 Linux,它们是共享同一个内核镜像的,如果其中一个重新编译了内核镜像并安装了相关的内核模块,那么其它的Linux也会使用这个内核镜像,但无法共享内核模块,得一个个拷贝过去或者设置共享才可以…
新方法
最近经过高人指点,发现了一个非常简单的方法,去https://github.com/Nevuly/WSL2-Linux-Kernel-Rolling-LTS,打开release链接,选择当前最新的6.18.36内核,
下载对应的内核镜像和内核模块,这个bzImage-x86_64-addon.vhdx.7z就是所有的内核模块
下载后解压内核模块,如下图,所在路径是F:\WSL\common_kernel_and_modules
最后是在C:\Users下找到自己的用户目录,然后在用户目录里添加**.wslconfig**文件,打开,然后写入以下内容,
[wsl2]kernel=F:\\WSL\\common_kernel_and_modules\\bzImage-x86_64kernelModules=F:\\WSL\\common_kernel_and_modules\\bzImage-x86_64-addon.vhdx
PS:注意是双斜杠
然后重启WSL2 linux就行了
验证
打开WSL2 Linux,输入uname -r,
可以看到内核版本就是我们下载下来的
最后验证一下CAN,
sudo apt install can-utilssudo modprobe vcansudo ip link add dev vcan0 type vcansudo ip link set up vcan0
接着执行ip addr,可以看到vcan0已经开启,
大功告成!
这个作者也写了一个wiki,也可以自行参考
小结
本文讲述如何使用最简单的办法开启socketCAN,同样其它模块也顺带开启了。这个方法的思想就是编译好内核和所有的内核模块,然后由用户自己导入,还是非常方便的。