景县住房和城乡规划建设局网站,我想买个空间自己做网站,如何进行搜索引擎优化?,wordpress幻灯片名【DRONECAN】#xff08;三#xff09;WSL2 及 ubuntu20.04 CAN 驱动安装
前言
这一篇文章主要介绍一下 WSL2 及 ubuntu20.04 CAN 驱动的安装#xff0c;首先说一下介绍本文的目的。
大家肯定都接触过 ubuntu 系统#xff0c;但是我们常用的操作系统都是 Windows#x…【DRONECAN】三WSL2 及 ubuntu20.04 CAN 驱动安装
前言
这一篇文章主要介绍一下 WSL2 及 ubuntu20.04 CAN 驱动的安装首先说一下介绍本文的目的。
大家肯定都接触过 ubuntu 系统但是我们常用的操作系统都是 Windows想要切换到 ubuntu 系统要么装虚拟机要么装双系统。双系统必然是麻烦的而且得两个系统来回切换而虚拟机的代表就是 vmware简单的使用还行但是涉及到三维仿真就会比较卡顿了而且占用资源也是比较大的。WSL2Windows 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 /norestart3、下载 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 2WSL2 Ubuntu20.04配置
安装完成后我们首先需要把源替换为国内镜像当然有代理的话也可以不换源
1、备份源列表
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak2、命令行打开sources.list文件
sudo vim /etc/apt/sources.list3、将源文件内容全部注释,并添加以下任意源
阿里云源
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 multiverse4、更新源
sudo apt-get update
sudo apt-get upgrade5、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 libtoolcp 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]
kernelC:\\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?spma21n57.1.0.0.aa72523c7Y5zQvid734695507467ns1abbucket15#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吧