当前位置: 首页 > news >正文

WSL2 Debian系统添加支持SocketCAN

本人最近在使用WSL2,Linux系统选择的是Debian,用起来很不错,感觉可以代替VMware Player虚拟机。

但是WSL2 Debian默认不支持SocketCAN,这就有点坑了,由于本人经常要使用SocketCAN功能,所以决定让Debian支持该功能。


一 下载WSL2内核源码

首先在自己的WSL2 linux下查看内核版本,命令是uname -r,本人的是5.10.x,然后打开微软WSL2内核的github网站,https://github.com/microsoft/WSL2-Linux-Kernel

在网页右侧中部,找到以下图示,然后点击红框部分,

在这里插入图片描述
进入后找到5.10.x系列的最新内核,本文写作时最新的版本是5.10.102
在这里插入图片描述
点击红框进行下载,下载完毕后得到WSL2-Linux-Kernel-linux-msft-wsl-5.10.102.1.zip,然后拷贝这个zip文件到Debian下面进行解压,

unzip WSL2-Linux-Kernel-linux-msft-wsl-5.10.102.1.zip

注意:一定要在Linux下解压,在Win下解压会出错。

当然也可以使用git去下载,网上给出的命令如下,

$ git clone https://github.com/microsoft/WSL2-Linux-Kernel
$ cd WSL2-Linux-Kernel
$ git checkout `uname -r`

但是本人使用git在Debian下clone一直失败,不知道怎么回事,就只能手动去下载…


二 编译

编译前要安装一些需要的库,

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

build-essential是GCC编译套件,libncurses5-dev是配置时用到的GUI库。安装时如果提示缺什么库,那就安装什么库,基本网上搜一下都能解决。

下载好之后,cd进入内核源码的目录,

cd WSL2-Linux-Kernel-linux-msft-wsl-5.10.102.1
cat /proc/config.gz | gunzip > .config
make prepare modules_prepare # 这一步执行完后会失败,但是不影响
make menuconfig

弹出界面后,使用上下方向键选中Networking support,然后回车,
在这里插入图片描述
然后使用上下方向键选中CAN bus system support,按空格使其出现M字样,即变成内核模块,

在这里插入图片描述
然后回车进入,把所有的都选择为内核模块,
在这里插入图片描述
接着选中CAN Device Drivers,回车进入,把所有的选项都选中,
在这里插入图片描述
最后按左右方向键选中界面底下的Save,
在这里插入图片描述
然后回车,在弹出的新界面里回车选择OK进行保存,
在这里插入图片描述

保存完毕后回到原先界面,通过左右方向键选中Exit并回车,会回到上一层界面,继续通过左右方向键选中Exit并回车,直到退出menuconfig
在这里插入图片描述
接着是编译内核模块,

make modules -j6

编译完毕后安装内核模块,

sudo make modules_install

最后是编译内核镜像,

make -j6

编译完毕后,可以看到目录下有个vmlinux,这个就是编译好的内核镜像文件,
在这里插入图片描述
最后通过SSH工具(如WinSCP)把内核镜像拷贝到Windows下,可以通过下面命令安装SSH服务并启用,

sudo apt install openssh-server
sudo service sshd start

具体使用办法可以网上搜一下。


三 替换内核镜像

首先关闭WSL2 Debian,

wsl --shutdown

WSL2 Linux内核镜像的默认安装路径是C:\Windows\System32\lxss\tools,打开这个目录,把里面的kernel文件重命名一下,如xx_kernel,然后把vmlinux拷贝到这个目录下,重命名为kernel

然后重新Windows,重启之后再打开WSL2 Debian,输入uname -r,可以看到版本号和下载的内核版本号一致,
图11

PS:如果启动后失败,可以删除kernel文件,然后把xx_kernel改回kernel,这样可以回退回来。


四 测试

先安装CAN工具库,

sudo apt install can-utils

使用下面命令开启vcan0,

sudo modprobe can
sudo modprobe can-raw
sudo modprobe vcan
ip link add dev vcan0 type vcan
ip link set up vcan0

此时,使用ip addr可以看到vcan0
在这里插入图片描述
然后在一个终端下使用candump监测vcan0

candump vcan0

另外一个终端下使用cansend向vcan0发送CAN报文,

cansend vcan0 123#11.22.33.44

最后在监测终端下看到发出的CAN报文,
在这里插入图片描述
说明SocketCAN功能已经支持了。

http://www.lryc.cn/news/289918.html

相关文章:

  • Redis的五种常用数据结构以及其底层实现
  • 防御保护笔记
  • C++笔记之作用域解析符::和命名空间、作用域的关系
  • 回归预测 | MATLAB实现PSO-GRNN粒子群优化广义回归神经网络多输入单输出预测(含优化前后预测可视化)
  • linux安装 黑方容灾备份与恢复系统软件v6.0 代理
  • STM32第一节——初识STM32
  • 多场景建模:美团HiNet
  • 第二百九十三回
  • 【网络协议分析】使用Wireshark分析UDP协议
  • TensorFlow Lite中文本分类在Android上的实践
  • 使用vscode查bug
  • LC 2846. 边权重均等查询
  • RabbitMQ简单模式和工作模式
  • c语言实战之贪吃蛇
  • Midjourney图片生成描述词记录(今天一天)
  • 类和对象 第五部分第四小节:赋值运算符重载
  • Django从入门到精通(一)
  • 数据库分表分库的原则
  • Java技术栈 —— Docker容器
  • Mysql大数据量分页优化
  • QT tcp与udp网络通信以及定时器的使用 (7)
  • web架构师编辑器内容-添加自动保存的功能
  • 【Redis】关于它为什么快?使用场景?以及使用方式?为何引入多线程?
  • SpringBoot之JWT登录
  • 【备战蓝桥杯】——循环结构
  • 【数据分享】1929-2023年全球站点的逐年平均气温数据(Shp\Excel\免费获取)
  • 探索Pyecharts关系图绘制技巧:炫酷效果与创意呈现【第42篇—python:Pyecharts水球图】
  • 蓝桥杯-循环节长度
  • Jython调用openwire库连接activemq转发topic订阅消息到另一个activemq 服务器上 完整代码
  • 面试经典题---30.串联所有单词的子串