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

【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吧

相关文章:

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

【DRONECAN】(三)WSL2 及 ubuntu20.04 CAN 驱动安装 前言 这一篇文章主要介绍一下 WSL2 及 ubuntu20.04 CAN 驱动的安装,首先说一下介绍本文的目的。 大家肯定都接触过 ubuntu 系统,但是我们常用的操作系统都是 Windows&#x…...

Databricks 入门之sql(二)常用函数

1.类型转换函数 使用CAST函数转换数据类型(可以起别名) SELECTrating,CAST(timeRecorded as timestamp) FROMmovieRatings; 支持的数据类型有: BIGINT、BINARY、BOOLEAN、DATE 、DECIMAL(p,s)、 DOUBLE、 FLOAT、 INT、 INTERVAL interva…...

Simulink建模与仿真(3)-Simulink 简介

分享一个系列,关于Simulink建模与仿真,尽量整理成体系 1、Simulink特点 Simulink是一个用来对动态系统进行建模、仿真和分析的软件包。使用Simulink来建模、分析和仿真各种动态系统(包括连续系统、离散系统和混合系统),将是一件非常轻松的事…...

(超简单)将图片转换为ASCII字符图像

将一张图片转换为ASCII字符图像 原图: 效果图: import javax.imageio.ImageIO; import java.awt.image.BufferedImage; import java.io.File; import java.io.FileWriter; import java.io.IOException;public class ImageToASCII {/*** 将图片转换为A…...

In-Context Retrieval-Augmented Language Models

本文是LLM系列文章,针对《In-Context Retrieval-Augmented Language Models》的翻译。 上下文检索增强语言模型 摘要1 引言2 相关工作3 我们的框架4 实验细节5 具有现成检索器的上下文RALM的有效性6 用面向LM的重新排序改进上下文RALM7 用于开放域问答的上下文RALM…...

多种免费天气api

多种免费天气api推荐 一、高德天气二、格点天气三、香港天文台 一、高德天气 api说明文档:https://lbs.amap.com/api/webservice/guide/api/weatherinfo 实例代码: import requests# 香港天文台API的URL api_url "https://restapi.amap.com/v3/w…...

深度学习推荐系统(五)DeepCrossing模型及其在Criteo数据集上的应用

深度学习推荐系统(五)Deep&Crossing模型及其在Criteo数据集上的应用 在2016年, 随着微软的Deep Crossing, 谷歌的Wide&Deep以及FNN、PNN等一大批优秀的深度学习模型被提出, 推荐系统全面进入了深度学习时代, 时至今日&am…...

图神经网络教程之HAN-异构图模型

异构图 包含不同类型节点和链接的异构图 异构图的定义:节点类别数量和边的类别数量加起来大于2就叫异构图。 meta-path元路径的定义:连接两个对象的复合关系,比如,节点类型A和节点类型B,A-B-A和B-A-B都是一种元路径。 …...

Jupyter lab 配置

切换jupyterlab的默认工作目录 在终端中输入以下命令 PS C:\Users\Administrator> jupyter-lab --generate-config Writing default config to: C:\Users\Administrator\.jupyter\jupyter_lab_config.py它就会生成JupyterLab的配置文件(如果之前有这个文件的话…...

股票行情处理:不复权,前复权,后复权

不复权的话,K线图能真实反应股价历史的除权信息,缺点是会留有大缺口,股价走势不连续,不能直观感受股价的涨跌波动。 前复权是以目前股价为基准复权,可以很清楚的看到股价的历史高点、低点,以及目前股价所处…...

ip地址、LINUX、与虚拟机

子网掩码,是用来固定网络号的,例如255,255,255,0,表明前面三段必须为网络号,后面必须是主机号,那么怎么实现网络复用呢,例如使用c类地址,但是正常子网掩码是255,255,255,…...

MySQL存储过程

存储过程 1、存储过程简介 存储过程与函数的直接效果类似,只不过存储过程,封装的是一组sql语句。 mysql数据库存储过程是一组为了完成特定功能的sql语句的集合。 存储过程这个功能时从5.0版本才开始支持的,它可以加快数据库的处理速度&…...

element-ui 自定义loading加载样式

element-ui 中的 loading 加载功能,默认是全屏加载效果, 设置局部,需要自定义样式,自定义的方法如下: import { Loading } from element-uiVue.prototype.$baseLoading (text) > {let loadingloading Loading.s…...

04-Apache Directory Studio下载安装(LDAP连接工具)

1、下载 官网下载Apache Directory Studio 注意Apache Directory Studio依赖于jdk,对jdk有环境要求 请下载适配本机的jdk版本的Apache Directory Studio,下图为最新版下载地址 Apache Directory Studio Version 2.0.0-M16 基于 Eclipse 2020-12,最低要…...

vmware虚拟机(ubuntu)远程开发golang、python环境安装

目录 1. 下载vmware2. 下载ubuntu镜像3. 安装4. 做一些设置4.1 分辨率设置4.2 语言下载4.3 输入法设置4.4 时区设置 5. 直接切换管理员权限6. 网络6.1 看ip6.2 ssh 7. 本地编译器连接远程服务器7.1 创建远程部署的配置7.2 文件同步7.3 远程启动项目 8. ubuntu安装golang环境8.1…...

Elasticsearch文档多个输入字段组成ID实现方法

1、场景描述: 使用Elasticsearch时,有时会需要指定文档id的场景,当文档id需要多个字段组成时,这种业务怎么处理呢? 2、问题描述: 现有一个ElasticSearch文档,假设文档id由userid、 eventTime…...

编译链接实战(15)rdynamic选项的用途

文章目录 rdynamic作用栈回溯 rdynamic作用 看下gcc man手册的解释: Pass the flag -export-dynamic to the ELF linker, on targets that support it. This instructs the linker to add all symbols, not onlyused ones, to the dynamic symbol table. This opti…...

前端:js实现提示框(自动消失)

效果&#xff1a; 代码&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content&q…...

powerpc架构的前世今生

文章目录 Powerpc架构的前世今生什么是powerpc&#xff1f;PowerPC和ARM有什么区别呢&#xff1f; Powerpc架构的前世 PowerPC架构是一种基于精简指令集计算机&#xff08;RISC&#xff09;的处理器架构。它最初由IBM、Motorola和Apple共同开发&#xff0c;旨在为个人电脑、工…...

SQL-存储过程、流程控制、游标

存储过程 存储过程概述 1.产生背景 开发过程总&#xff0c;经常会遇到重复使用某一功能的情况 2.解决办法 MySQL引人了存储过程(Stored Procedure)这一技术 3.存储过程 存储过程就是一条或多条SQL语句的集合存储过程可将一系列复杂操作封装成一个代码块&#xff0c;以便…...

C++输入输出流操作指南

输入输出流的基本用法 C中的输入输出操作主要通过iostream库实现&#xff0c;核心对象包括cin、cout、cerr和clog。 标准输出流&#xff08;cout&#xff09; std::cout << "Hello, world!" << std::endl; // 输出字符串并换行标准输入流&#xff08;ci…...

图像处理中的频域魔法:用傅里叶变换消除噪点与增强细节的3种技巧

图像处理中的频域魔法&#xff1a;用傅里叶变换消除噪点与增强细节的3种技巧 当你在处理一张模糊的医学影像或卫星图片时&#xff0c;是否想过那些隐藏在像素背后的频率秘密&#xff1f;傅里叶变换就像一台精密的频谱分析仪&#xff0c;能将图像从空间域转换到频域&#xff0c…...

【开题答辩全过程】以 基于Android的收支记账管理系统为例,包含答辩的问题和答案

个人简介一名14年经验的资深毕设内行人&#xff0c;语言擅长Java、php、微信小程序、Python、Golang、安卓Android等开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。感谢大家的…...

PROJECT MOGFACE开源社区贡献指南:从代码阅读到提交PR的全流程

PROJECT MOGFACE开源社区贡献指南&#xff1a;从代码阅读到提交PR的全流程 你是不是也遇到过这样的情况&#xff1a;在GitHub上看到一个很酷的开源项目&#xff0c;比如最近挺火的PROJECT MOGFACE&#xff0c;心里痒痒的&#xff0c;也想贡献点代码&#xff0c;但一打开那庞大…...

Dirsearch字典玄学:从默认字典到AI生成,我的扫描效率提升300%的秘密

Dirsearch字典玄学&#xff1a;从默认字典到AI生成&#xff0c;我的扫描效率提升300%的秘密 在Web安全测试的战场上&#xff0c;目录扫描工具就像侦察兵手中的望远镜&#xff0c;而字典则是望远镜的镜片质量。从业五年来&#xff0c;我见证了太多安全工程师将90%的时间浪费在无…...

破解微信小程序video组件的限制:3种禁止拖动进度条的实战方案对比

微信小程序视频播放控制深度解析&#xff1a;3种禁止拖动进度条的工程化方案 在知识付费和在线教育类小程序中&#xff0c;视频内容的完整播放率直接影响知识传递效果。但微信小程序原生video组件的enable-progress-gesture属性仅能禁用触摸手势&#xff0c;无法真正阻止进度条…...

终极指南:VSCode Rainbow Fart如何通过Vue.js打造沉浸式编程体验

终极指南&#xff1a;VSCode Rainbow Fart如何通过Vue.js打造沉浸式编程体验 【免费下载链接】vscode-rainbow-fart 一个在你编程时疯狂称赞你的 VSCode 扩展插件 | An VSCode extension that keeps giving you compliment while you are coding, it will checks the keywords …...

【Serverless架构生死线】:Java函数冷启动超时率>17%?2024最新CNCF基准测试下的3层防御体系构建

第一章&#xff1a;Serverless架构下Java函数冷启动的生死挑战在Serverless平台&#xff08;如AWS Lambda、阿里云函数计算、腾讯云SCF&#xff09;中&#xff0c;Java函数因JVM初始化、类加载、字节码验证及Spring等框架启动开销&#xff0c;常面临数百毫秒至数秒级的冷启动延…...

DeepWiki-Open技术解析:构建完全离线的AI文档生成创新方案

DeepWiki-Open技术解析&#xff1a;构建完全离线的AI文档生成创新方案 【免费下载链接】deepwiki-open Open Source DeepWiki: AI-Powered Wiki Generator for GitHub Repositories 项目地址: https://gitcode.com/gh_mirrors/de/deepwiki-open 在企业级软件开发中&…...

UNet架构优势解析:cv_unet_image-colorization语义特征与纹理保留实测

UNet架构优势解析&#xff1a;cv_unet_image-colorization语义特征与纹理保留实测 1. 引言&#xff1a;为什么UNet是图像上色的理想选择&#xff1f; 你有没有翻过家里的老相册&#xff1f;那些泛黄的黑白照片&#xff0c;承载着珍贵的记忆&#xff0c;却总让人觉得少了点什么…...