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.mzph.cn/news/653197.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Axolotl:一款极简的大模型微调(Finetune)开源框架

今天给大家分享一款工具,Axolotl[1] 是一个旨在简化各种AI模型的微调过程的工具,支持多种配置和架构。 特点: 可训练各种 Huggingface 模型,如 llama、pythia、falcon、mpt支持 fullfinetune、lora、qlora、relora 和 gptq使用简…

Maven入门及其使用

目录 一、Maven入门 1.1 初识Maven 1.2 Maven的作用 1.2.1 依赖管理 1.2.2 统一项目结构 1.2.3 项目构建 1.3 Maven坐标 1.4 Maven仓库 1.4.1 Maven仓库概述 二、Maven的下载与安装 2.1 安装步骤 2.1.1 解压安装(建议解压到没有中文、特殊字符的路径下。&#xff09…

数据湖技术之应用场景篇

数据湖技术有较多的应用场景,本篇文章是针对一些典型的痛点场景做了一些介绍和说明。比如说在线数据抽取场景原有模式对线上库表产生较大压力,flink多流join维护的大状态导致的稳定性问题等等,具体场景如下图所示: 场景1:在线数据…

【极数系列】Flink详细入门教程 知识体系 学习路线(01)

文章目录 01 引言02 Flink是什么2.1 Flink简介2.2 Flink架构2.3 Flink应用场景2.4 Flink运维 03 Flink环境搭建3.1 Flink服务端环境搭建3.2 Flink部署模式3.3 Flink开发环境搭建 04 Flink数据类型以及序列化4.1 数据类型4.2 数据序列化 05 Flink DataStream API5.1 执行模式5.2…

车载电子电器架构 —— 多核处理器刷写策略

车载电子电器架构 —— 多核处理器刷写策略 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消…

嵌入式Linux系统引导过程详解

大家好,今天给大家介绍嵌入式Linux系统引导过程详解,文章末尾附有分享大家一个资料包,差不多150多G。里面学习内容、面经、项目都比较新也比较全!可进群免费领取。 嵌入式Linux系统引导过程是系统启动的关键环节,它涉及…

代码随想录刷题笔记-Day10

1. 用栈实现队列 232.用栈实现队列https://leetcode.cn/problems/implement-queue-using-stacks/description/ 请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty): 实现 MyQueue 类&#xf…

ID Mapping技术解析:从Redis到Spark GraphX的演进与应用

目录 一、ID Mapping的背景 二、ID Mapping的重要性 三、ID Mapping的方案 3.1 基于Redis的ID Mapping(效率不行)

Java基础数据结构之反射

一.定义 Java的反射机制是在运行状态中的,对于任意一个类都能知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法及属性。既然能拿到,我们就可以修改部分类型信息。这种动态获取信息以及动态调用对象方法的功能…

Django笔记(七):JWT认证

首 前后端分离的项目更多使用JWT认证——Json Web Token。本文记录djangorestframework-simplejwt的使用方式。文档 安装 pip install djangorestframework-simplejwt 配置settings.py: INSTALLED_APPS [rest_framework_simplejwt, ]REST_FRAMEWORK {DEFAULT_AUTHENTICA…

第一讲_JavaScript概述及三种使用方式

JavaScript概述及三种使用方式 1. JavaScript概述1.1 JavaScript 的作用 2 JavaScript使用方式2.1 行内使用2.2 内部使用2.3 外部使用 1. JavaScript概述 JavaScript主页由三部分组成: ECMAScript:规定 JavaScript 核心,定义了语言的基本语…

系统架构设计师教程(十九)大数据架构设计理论与实践

大数据架构设计理论与实践 19.1 传统数据处理系统存在的问题19.2 大数据处理系统架构分析19.2.1 大数据处理系统面临挑战19.2.2 大数据处理系统架构特征19.3 Lambda架构19.3.1 Lambda架构对大数据处理系统的理解19.3.2 Lambda架构应用场景19.3.3 Lambda架构介绍19.3.4 Lambda架…

【ASP.NET Core 基础知识】--身份验证和授权--用户认证的基本概念

用户认证在网络安全中起着至关重要的作用。首先,它可以确保只有经过授权的用户才能访问特定的资源或服务,从而保护了系统和数据的安全。其次,用户认证可以帮助追踪和记录用户的活动,如果出现安全问题,可以追踪到具体的…

无人机调试开源软件

无人机调试开源软件有以下几个: MissionPlanner:一款功能丰富的开源软件,支持多种无人机,包括固定翼、多旋翼和直升机。它提供了实时的飞行数据监控、地图导航、任务规划以及详细的参数调整选项。APMPlanner2.0:专为A…

CSS--Emmet 语法

Emmet语法的前身是Zen coding,它使用缩写,来提高html/css的编写速度, Vscode内部已经集成该语法. 目录 1. 快速生成HTML结构语法 1.1 快速生成HTML结构语法 2. 快速生成CSS样式语法 2.1 快速生成CSS样式语法 1. 快速生成HTML结构语法 1.1 快速生成HTML结构语法 1. 生成标…

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

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

【Java】Java类动态替换Class

Java类动态替换Class 通过Java的Class对象,可以实现动态替换Class。 预习几个知识点 getClassLoader Java提供的ClassLoader可用于动态加载的Java类,可以通过多种形式获取ClassLoader。比如通过Class类获取 // 通过Class获取 ClassLoader classLoade…

springIoc以及注解的使用

注解 注解的定义 注解(Annotation)是一种在 Java 程序中以元数据的形式对代码进行标记和说明的机制。它可以被添加到类、方法、字段、参数等程序元素上,用于提供额外的信息和指示。 也就是说注解是一种标记 注解怎么生效呢? 通…

网络相关知识

关于作者:CSDN内容合伙人、技术专家, 从零开始做日活千万级APP。 专注于分享各领域原创系列文章 ,擅长java后端、移动开发、商业变现、人工智能等,希望大家多多支持。 目录 一、导读二、概览三、相关工具3.1 network profiler/ In…

WebSocket实现私信功能

&#xff37;ebSocket实现私信功能 引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId></dependency>配置文件 WebSocketConfig package com.example.common;im…