【DRONECAN】(三)WSL2 及 ubuntu20.04 CAN 驱动安装

【DRONECAN】(三)WSL2 及 ubuntu20.04 CAN 驱动安装

前言

这一篇文章主要介绍一下 WSL2 及 ubuntu20.04 CAN 驱动的安装,首先说一下介绍本文的目的。

大家肯定都接触过 ubuntu 系统,但是我们常用的操作系统都是 Windows,想要切换到 ubuntu 系统要么装虚拟机,要么装双系统。双系统必然是麻烦的,而且得两个系统来回切换,而虚拟机的代表就是 vmware,简单的使用还行,但是涉及到三维仿真就会比较卡顿了,而且占用资源也是比较大的。WSL2(Windows Subsystem for Linux 2)是 Windows 10 操作系统中的一个功能,用于在 Windows 系统中运行 Linux 环境,以便用户可以在 Windows 系统中使用 Linux 的命令行工具和应用程序。它是一种虚拟化技术,通过在 Windows 系统上运行一个轻量级的 Linux 内核来实现。注意,相比较于 WSL 1 使用翻译层将 Linux 系统调用转化成 Windows 系统调用,WSL2 是有一个 Linux 内核,只不过微软做了一些裁剪。
因此,WSL2 更适合做 Linux 开发。所以,目前我也沉迷用 WSL2 做 Linux 开发,例如在 WSL2 做 Ardupilot 开发、GAZEBO 仿真等等,都是基于 WSL2 有一个 Linux 的内核。

安装 WSL2

WSL2 安装就很容易,网上也有很多教程,总结一下就是:

1、检查更新 win10 版本

在 cmd 中使用 winver 命令来检查当前 win 的版本,如果版本太低,可以在 设置 - 更新和安全 - Windows 更新中更新。但是有时候会没有提示能更新到最新的版本,那就可以使用微软提供的更新助手。

2、启用虚拟功能

在 powerShell 中以管理员身份运行下面命令以确保开启适用于 Linux 的 Windows 子系统和虚拟机平台配置项。

dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

3、下载 Linux 内核更新程序包

下载地址:
https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi

下载安装即可。

4、安装Linux分发版本

在微软商店搜索 Ubuntu20.04,在列表中选择最新的长期支持版本 20.04 LTS 并安装启动

5、确保 WSL 的版本为2.0

使用wsl -l -v命令查看安装版本是否正确(VERSION为2)
如果显示当前不是 WSL 2 版本,可以通过以下命令设置 WSL 的默认版本:

wsl --set-version Ubuntu-20.04 2

WSL2 Ubuntu20.04配置

安装完成后,我们首先需要把源替换为国内镜像,当然有代理的话也可以不换源

1、备份源列表

sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak

2、命令行打开sources.list文件

sudo vim /etc/apt/sources.list

3、将源文件内容全部注释,并添加以下任意源

阿里云源

deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiversedeb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiversedeb http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiversedeb http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiversedeb http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse

清华源

deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal universe
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates universe
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security universe
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security multiverse

4、更新源

sudo apt-get update
sudo apt-get upgrade

5、WSL2代理配置

参考:
https://blog.csdn.net/m0_46680603/article/details/128769706

WSL2 安装 CAN 驱动

WSL2 Ubuntu发行版默认是不支持socketCAN的,这意味着使用WSL2无法正常进行硬件CAN调试工作。由于WSL2支持完整的linux内核,因此可以通过自行编译并替换linux内核的方式,实现WSL2对CAN的支持。

下载wsl内核源码

首先查看内核版本

uname -r

输出内核版本,如我是5.15.90.3-microsoft-standard-WSL2

这里我们要去下载Linux内核源码,再把CAN驱动编译进去。

git clone https://github.com/microsoft/WSL2-Linux-Kernel.git
cd WSL2-Linux-Kernel
git checkout linux-msft-wsl-5.15.90.3

修改配置文件

安装依赖:

sudo apt update
sudo apt install build-essential flex bison libssl-dev libelf-dev libncurses-dev autoconf libudev-dev libtool
cp Microsoft/config-wsl .config
sudo make menuconfig

在Networking support—>CAN BUS subsystem support下面,按M把他们和他们下面的选项都变成module,把能选的全选了,按M没反应变不成module的就按y让它变成build-in的,类似这样,注意每一级都要选,别漏掉了

然后最下面save,命名为.config。可以手动改一下文件里面的:CONFIG_LOCALVERSION="-microsoft-standard-WSL2"选项,改成别的名字,这里我改成了“5.15.90.3-microsoft-standard-WSL2-CAN”

编译安装

编译:

sudo make -j12 #有几个核就写几个
sudo make modules_install
sudo make install

安装:

把bzImage复制到WSL系统外并且添加配置文件告诉WSL它在哪:

cp arch/x86/boot/bzImage /mnt/c/Users/windows你的用户名/can_bzImage

然后在c/Users/路径下创建.wslconfig文件,以文本方式打开并键入:

[wsl2]
kernel=C:\\Users\\xxxxx\\刚刚bzImage的名字不带后缀

重启WSL2:

wsl --shutdown

应该能看到自己起的名字

uname -r                    

安装can工具驱动:

sudo apt install can-utils

设置CAN驱动:

sudo modprobe can
sudo modprobe can-raw
sudo modprobe can-gw

设置虚拟CAN

sudo modprobe vcansudo ip link add dev vcan0 type vcan
sudo ip link add dev vcan1 type vcan
sudo ip link set up vcan0
sudo ip link set up vcan1

然后把vcan0和vcan1连接起来:

sudo cangw -A -s vcan0 -d vcan1 -e 

控制台1监控vcan1接收到的数据:

sudo candump vcan1

控制台2通过vcan0发送数据:

cansend vcan0 123#0011

出现下面的界面,则说明CAN驱动已经编译安装好了。

WSL2挂载USB CAN设备

Linux对CAN的支持比Windows更友好,因为Linux有SocketCAN这层协议,SocketCAN可以把许多标准的CAN协议转换成Socket套接字方式的网络协议(网上那种自带串口上位机的非标准协议USB转CAN模块除外),因此扩展性和兼容性更强,而Windows没有。。。所以这也是选择WSL2的原因之一。

这里我使用的是Pogo科技的CANv2模块,内置SLCAN协议,在Linux系统下可以转换成SocketCAN协议,在Windows系统也可以直连DroneCAN_GUI_TOOL,对调试DroneCAN来说非常方便,可从淘宝购买:https://item.taobao.com/item.htm?spm=a21n57.1.0.0.aa72523c7Y5zQv&id=734695507467&ns=1&abbucket=15#detail:

当wsl2中使用usb设备时,必须先将其从windows挂到wsl中,WSL2 本身并不支持连接 USB 设备,所以需要安装 usbipd-win。

第一步:

在管理员Powershell:

winget install --interactive --exact dorssel.usbipd-win
#重启wsl
wsl --shutdown
usbipd wsl list

第二步:

在wsl2中执行:

sudo apt install linux-tools-virtual hwdata
sudo update-alternatives --install /usr/local/bin/usbip usbip `ls /usr/lib/linux-tools/*/usbip | tail -n1` 20

第三步:

在管理员Powershell:

usbipd wsl list

图中出现的2-12就是我们要挂在WSL2的设备:

2-12   0483:5740  STMicroelectronics Virtual COM Port (COM39)                   Not attached

然后在管理员Powershell执行:

usbipd wsl attach --busid 2-12

第四步:

在wsl2中执行:

lsusb

出现了STMicroelectronics Virtual COM Port,则说明挂载成功。

WSL2中USB CAN和虚拟CAN互通

由于Pogo CANv2是SLCAN协议的CAN模块,执行下面命令:

sudo modprobe can
sudo modprobe can-raw
sudo modprobe can-gw
sudo modprobe slcan
sudo modprobe vcansudo slcand -o -c -s8 /dev/ttyACM2 can0sudo ifconfig can0 up

输入ifconfig:

出现了can0、vcan0、vcan1,则说明USBCAN、虚拟CAN都连接到网络了。

然后输入下面指令,将can0和vcan0连起来,下面的意思就是把can0和vcan0连到同一局域网,vcan0会收到can0的数据,反过来写亦之:

sudo cangw -A -s can0 -d vcan0 -e

我这里将CANv2连到了CubeOrange飞控上:

然后打开两个终端,分别输入:sudo candump can0 sudo candump vcan0

可以看到图中,vcan0和can0收到了同样的数据

WSL2中DroneCAN_GUI_TOOL

使用SocketCAN的好处也是不言而喻的,在DroneCAN_GUI_TOOL中,不仅可以用USBCAN收发数据,也可以用vcan0,接上章,把can0和vcan0路由在一起后,即可以用can0连接在DroneCAN_GUI_TOOL中,也可以用vcan0连DroneCAN_GUI_TOOL,如下图所示。

所以,CAN在Linux中可以做更多的扩展,而Windows则实现不了,一个CAN就是一个CAN,而在Linux中,可以通过SocketCAN套接字的方式拓展成网络设备。因此,想要高级开发的话,还是选WSL2吧

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/59767.shtml

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

相关文章

C++------map和set的使用

文章目录 关联式容器键值对树型结构的关联式容器set的介绍map的介绍 关联式容器 什么是关联式容器&#xff1f;它与序列式容器有什么区别&#xff1f; 关联式容器也是用来存储数据的&#xff0c;与序列式容器不同的是&#xff0c;其里面存储的是<key&#xff0c;value>结…

【拾枝杂谈】从游戏开发的角度来谈谈原神4.0更新

君兮_的个人主页 勤时当勉励 岁月不待人 C/C 游戏开发 Hello,米娜桑们&#xff0c;这里是君兮_&#xff0c;结合最近的学习内容和以后自己的目标&#xff0c;今天又开了杂谈这个新坑&#xff0c;分享一下我在学习游戏开发的成长和自己的游戏理解&#xff0c;当然现在还是一枚…

【LeetCode75】第三十九题 二叉树的右视图

目录 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 代码&#xff1a; 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 题目给我们一棵二叉树&#xff0c;让我们返回站在二叉树右边从上到下看到的节点。 那实际上就是要我们对二叉树进行层序遍历&#xff0c…

108页石油石化5G智慧炼化厂整体方案PPT

导读:原文《108页石油石化5G智慧炼化厂整体方案PPT》(获取来源见文尾),本文精选其中精华及架构部分,逻辑清晰、内容完整,为快速形成售前方案提供参考。以下是部分内容,

PKI/CA体系介绍

概述 目前最常用的第三方认证服务包括&#xff1a;PKI/CA和Kerberos。PKI/CA是基于非对称密钥体系的&#xff0c;Kerberos是基于对称密钥体系的。 数字证书&#xff1a;提供一种发布公钥的简便途径&#xff1b; 数字签名&#xff1a;用来确认信息发送者的身份&#xff0c;保证…

win11出现安全中心空白和IT管理员已限制对此应用的某些区域的访问

问题 windows安全中心服务被禁用 winr 输入services.msc 找到windows安全中心服务查看是否被禁用&#xff0c;改为启动&#xff0c;不可以改动看第三条 打开设置&#xff0c;找到应用—windows安全中心–终止–修复–重置 重启如果还是不行看第四条 家庭版系统需要打开gped…

设计模式大白话——命令模式

命令模式 一、概述二、经典举例三、代码示例&#xff08;Go&#xff09;四、总结 一、概述 ​ 顾名思义&#xff0c;命令模式其实和现实生活中直接下命令的动作类似&#xff0c;怎么理解这个命令是理解命令模式的关键&#xff01;&#xff01;&#xff01;直接说结论是很不负责…

【设计模式】Head First 设计模式——桥模式 C++实现

设计模式最大的作用就是在变化和稳定中间寻找隔离点&#xff0c;然后分离它们&#xff0c;从而管理变化。将变化像小兔子一样关到笼子里&#xff0c;让它在笼子里随便跳&#xff0c;而不至于跳出来把你整个房间给污染掉。 设计思想 桥模式。将抽象部分(业务功能)与实现部分(平…

Mysql B+数索引结构

一、B树和B树区别 二、 B 树形成过程 三、页分裂过程 3.1 页分裂过程实例 3.1.1 原有数据1、3、5形成如下数据页 3.1.2 先新插入数据4&#xff0c;因为 页10 最多只能放3条记录所以我们不得不再分配一个新页&#xff1a; 新分配的数据页编号可能并不是连续的&#xff0c;也…

iOS逆向:越狱及相关概念的介绍

在上一篇内容中我们介绍了App脱壳的技术&#xff0c;今天我们来介绍一个和iOS逆向密切相关的知识&#xff1a;越狱。 iOS操作系统的封闭性一直是开发者们关注的焦点之一。为了突破Apple的限制&#xff0c;越狱技术应运而生。本文将深入探讨iOS越狱&#xff0c;包括可越狱的版本…

【C语言】每日一题(除自身以外数组的乘积)

添加链接描述&#xff0c;链接奉上 方法&#xff1a; 暴力循环:前缀积后缀积&#xff08;分组&#xff09;: 暴力循环: 暴力循换真的是差生法宝&#xff0c;简单好懂&#xff0c;就是不实用&#xff0c;大多数的题目都会超过时间限制&#xff08;无奈&#xff09; 思路&…

嵌入式Linux开发实操(十五):nand flash接口开发

# 前言 flash memory,分NAND和NOR: 如果说nor flash有个特点就是能执行代码,NOR并行接口具有地址和数据总线,spi flash更是主要用于存储代码,SPI(或QSPI)NOR代码可就地执行(XiP),一般系统要求flash闪存提供相对较高的频率和数据缓存的clocking。而nand flash主要用于…

SpringCloud学习笔记(九)_使用Java类加载SpringBoot、SpringCloud配置文件

我们都知道平常在使用SpringBoot和SpringCloud的时候&#xff0c;如果需要加载一两个配置文件的话我们通常使用Value(“${属性名称}”)注解去加载。但是如果配置文件属性特别多的时候使用这种方式就显得特别的不友好了。 比如说&#xff0c;我们要加载下方这个名为application.…

大数据之linux入门

一、linux是什么 linux操作系统 开发者是林纳斯-托瓦兹&#xff0c;出于个人爱好编写。linux是一个基于posix和unix的多用户、多任务、支持多线程和多CPU的操作系统。 Unix是20世纪70年代初出现的一个操作系统&#xff0c;除了作为网络操作系统之外&#xff0c;还可以作为单…

vue2 组件库之vetur提示

当我们开发完自定义UI组件库后&#xff0c;在项目中使用时&#xff0c;想要达到以下提示效果&#xff0c;组件提示与属性提示&#xff0c;有什么解决方案呢&#xff1a; 事实上&#xff0c;这是vetur的功能&#xff0c;原文如下&#xff1a; Component Data | Vetur If a pac…

idea中创建springboot项目显示Spring Initializr Error

很长时间不创建springboot项目了,今天发现创建完成idea显示: Spring Initializr Error error:status:500项目中没有pom.xml文件.检查了一下原因是在创建的时候类型没有创建正确(之前记得都是默认),默认如下 需要选择创建maven完整工程那种,最下面那种只会生成pom.xml不会…

【计算机组成原理】一文快速入门,很适合JAVA后端看

作者简介&#xff1a; CSDN内容合伙人、CSDN新星计划导师、JAVA领域优质创作者、阿里云专家博主&#xff0c;计算机科班出身、多年IT从业经验、精通计算机核心理论、Java SE、Java EE、数据库、中间件、分布式技术&#xff0c;参加过国产中间件的核心研发&#xff0c;对后端有…

Vscode漂亮配色方案

有需要的私自&#xff0c;付费

热烈祝贺蜀益表面处理成功入选航天系统采购供应商库

经过航天系统采购平台的严审&#xff0c;眉山市蜀益表面处理科技有限公司成功入选中国航天系统采购供应商库。航天系统采购平台是航天系统内企业采购专用平台&#xff0c;服务航天全球范围千亿采购需求&#xff0c;目前&#xff0c;已有华为、三一重工、格力电器、科大讯飞等企…

香橙派OrangePi zero H2+ 驱动移远4G/5G模块

目录 1 安装系统和内核文件&#xff1a; 1.1 下载镜像 1.2 内核头安装 1.2.1 下载内核 1.2.2 将内核头文件导入开发板中 1.2.3 安装内核头 2 安装依赖工具&#xff1a; 2.1 Installing Required Host Utilities 3 驱动步骤&#xff1a; 3.1 下载模块驱动文件…