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.mfbz.cn/a/355161.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

菜谱的未来:SpringBoot, Vue与MySQL的智能推荐系统设计

✍✍计算机编程指导师 ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡ Java实战 |…

[Python-贪心算法]

135. 分发糖果 n 个孩子站成一排。给你一个整数数组 ratings 表示每个孩子的评分。 你需要按照以下要求,给这些孩子分发糖果: 每个孩子至少分配到 1 个糖果。 相邻两个孩子评分更高的孩子会获得更多的糖果。 请你给每个孩子分发糖果,计算…

Redis 面试题 | 18.精选Redis高频面试题

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

数学知识第四期 快速幂

前言 快速幂在算法比赛中十分的重要,而且代码简短,清楚易懂,大家应该熟练掌握!!! 一、什么是快速幂? 快速幂是一种高效的算法,用于计算某个数的n次幂。它的基本思想是将原式转换为…

JavaScript DOM属性和方法之element元素对象

在HTML DOM中,elment对象表示HTML与纳素,可以包含的节点类型有元素u节点、文本节点、注释节点。它们有响应的属性和方法,有很多都是我们之前用过的。 一、element对象属性 1、attributes 2、childNodes 3、className 4、clientWidth、of…

【大厂AI课学习笔记】1.1.4 学科和学习路径

一、8大学科 特点是特点 :厚基础、重交叉、宽口径。 八大学科分别是:数学与统计、科学与工程、计算机科学与技术、人工智能核心、认知与神经科学、先进机器人技术、人工智能工具与平台。 每个学科,又向下延伸。 MORE: AI,即人…

【DDD】学习笔记-限界上下文的控制力

引入限界上下文的目的,不在于如何划分,而在于如何控制边界。因此,我们就需要将对限界上下文的关注转移到对控制边界的理解。显然,对应于统一语言,限界上下文是语言的边界,对于领域模型,限界上下…

muduo网络库剖析——事件循环线程池EventLoopThreadPool类

muduo网络库剖析——线程Thread类 前情从muduo到my_muduo 概要框架与细节成员函数使用方法 源码结尾 前情 从muduo到my_muduo 作为一个宏大的、功能健全的muduo库,考虑的肯定是众多情况是否可以高效满足;而作为学习者,我们需要抽取其中的精…

Spring结合工厂模式

学习设计模式,不要进入一个误区生搬硬套,它是一种编程思想,结合实际使用,往往设计模式是混合使用的 工厂模式 核心本质:使用工厂统一管理对象的创建,将调用者跟实现类解耦 我这里使用Spring容器的支持&am…

latent-diffusion model环境配置--我转载的

latent-diffusion model环境配置,这可能是你能够找到的最细的博客了_latent diffusion model 训练 autoencoder-CSDN博客 前言 最近在研究diffusion模型,并对目前最火的stable-diffusion模型很感兴趣,又因为stable-diffusion是一种latent-di…

【QT+QGIS跨平台编译】之十五:【libTiff+Qt跨平台编译】(一套代码、一套框架,跨平台编译)

文章目录 一、libTiff介绍二、文件下载三、文件分析四、pro文件五、编译实践一、libTiff介绍 libTiff是一个用于处理TIFF图像文件格式的开源软件库。 TIFF(Tagged Image File Format)是一种灵活且广泛支持的图像文件格式,常用于存储照片和其他高质量图像。libTiff提供了一套…

Qt QPlainTextEdit高亮显示当前行

Qt QPlainTextEdit高亮显示当前行 文章目录 Qt QPlainTextEdit高亮显示当前行摘要错误的代码正确的代码QTextEdit::ExtraSelection 关键字: Qt、 QPlainTextEdit、 QTextBlock、 ExtraSelection、 GPT 摘要 今天要在说一下GPT,当下如果你还不会用G…

STM32读取MPU6050数据并通过角度值控制舵机运动(STM32、GY-521 MPU6050、SG90舵机、MG946舵机)

通过STM32F103C8T6读取MPU6050数据控制舵机运动(STM32、GY-521 MPU6050、SG90舵机、MG946舵机) 最终现象一、MPU6050数据读取二、舵机控制原理①什么是PWM?②STM32F103C8T6如何生成PWM?③控制舵机需要什么样的PWM波? 三…

qemu调试kernel启动(从第一行汇编开始)

一、背景 大部分qemu调试kernel 都是讲解从start_kernel开始设置断点,然后开启调试; 但是我们熟悉linux启动流程的伙伴肯定知道,在start_kernel之前还有一段汇编,包括初始化页表及mmu等操作, 这部分如何调试呢&#x…

cocos添加节点事件的3种方式

我们以button为例来说明一下cocos怎样为节点添加事件: 直接通过cocos熟悉检查器绑定 添加事件脚本 import { _decorator, Component, Node, input, Input, Button, EventKeyboard } from cc; const { ccclass, property } _decorator;ccclass(Attack) export cla…

【vue】图片加载骨架

一、前言 在网速较低或者网站的服务器宽带只有几MB的情况下,网页中的图片加载时,要么空白,要么像打印机一样一行一行地“扫描”出来,为了提升用户体验,可以给图片标签外加一层骨架。 无骨架 有骨架 二、详细设计 每张…

无人机在三维空间中的转动问题

前提 这篇博客是对最近一个有关无人机拍摄图像项目中所学到的新知识的一个总结,比较杂乱,没有固定的写作顺序。 无人机坐标系旋转问题 上图是无人机坐标系,绕x轴是翻滚(Roll),绕y轴是俯仰(Pitch),绕z轴是偏航(Yaw)。…

sqli-labs第一关

1.判断是否存在注入,注入是字符型还是数字型? ?id1 and 11 ?id1 and 12 因为输入and 11与and 12 回显正常,所以该地方不是数字型。 ?id1 ?id1-- 输入单引号后报错,在单引号后添加--恢复正常,说明存在字符注入 2.猜解SQL查…

Spark Exchange节点和Partitioning

​Exchange 在explain时,常看到Exchange节点,这个节点其实就是发生了数据交换 此图片来自于网络截取 BroadcastExchangeExec 主要是用来广播的 ShuffleExchangeExec 里面决定了数据分布的方式和采用哪种shuffle 在这里可以看到好几种不同的分区器 shuf…

Windows11搭建GPU版本PyTorch环境详细过程

Anaconda安装 https://www.anaconda.com/ Anaconda: 中文大蟒蛇,是一个开源的Python发行版本,其包含了conda、Python等180多个科学包及其依赖项。从官网下载Setup:点击安装,之后勾选上可以方便在普通命令行cmd和PowerShell中使用…
最新文章