WSL2下使用can-utils操作socketCAN收发CAN数据,DroneCAN/UAVCAN调试器,USB-CAN模块

关键词:WSL2,Linux,dronecan_gui_tool,DroneCAN/UAVCAN调试器,USB-CAN模块,socketCAN,can-utils,candump,cansend,QGC(QGroundControl),Ardupilot,Px4,Pixhawk

Keyword:Using can-utils to operate socket CAN for sending and receiving CAN data in WSL2,WSL2,Linux,dronecan_gui_tool,DroneCAN/UAVCAN Debugger,USB-CAN Convertor,socketCAN,can-utils,candump,cansend,QGC(QGroundControl),Ardupilot,Px4,Pixhawk

Ключевые слова:Используйте can-utils для управления socketCAN для отправки и получения данных CAN под WSL2,WSL2,Linux,dronecan_gui_tool,Отладчик DroneCAN/UAVCAN,Конвертер USB-CAN,socketCAN,can-utils,candump,cansend,QGC(QGroundControl),Ardupilot,Px4,Pixhawk

哈喽大家好,我是Mokel,这是DroneCAN调试器视频的第4期,这期视频我们将介绍在WSL2下使用can-utils工具集利用Linux的socketCAN收发CAN数据的内容。

视频内容主要分为两部分,第一部分我们将介绍如何在Windows下启用和设置WSL2,在这里我们需要手动启用Linux内核的CAN支持并用该内核替换WSL2的默认内核,如果你的WSL2未操作过此部分内容那么你需要参考视频的介绍对WSL2进行相关设置与替换;第二部分则演示在WSL2下使用can-utils工具集并利用socketCAN与Pogo-DroneCAN调试器建立连接并通信,在这里我们依旧使用两个Pogo-DroneCAN调试器互连来进行CAN数据的收发。

你可以在淘宝搜索“DroneCAN调试器”找到这个商品,也可以通过评论区置顶链接(https://item.taobao.com/item.htm?spm=a21n57.1.0.0.2b9a523cYE9t78&id=734695507467&ns=1&abbucket=15#detail)直接跳转商品,调试器默认为slcan固件,同时支持使用QGC更新固件,我将在后续视频里分享利用QGC更新固件的过程,并介绍官方提供的几个可用固件。

虽然最新的Windows系统已经支持一键安装WSL2子系统,你可以查看链接阅读Microsoft的详细教程(https://learn.microsoft.com/zh-cn/windows/wsl/install) ,但我推荐使用手动的方式来完成WSL2的安装并进行linux内核替换,我在视频中也将采用手动的方式来完成WSL2的安装,你可以查看Microsoft的旧版 WSL 的手动安装步骤教程了解更多详细信息(https://learn.microsoft.com/zh-cn/windows/wsl/install-manual)。我在视频中就不对这部分内容进行详细介绍了,需要注意的是,在安装Linux发行版时,记得安装Ubuntu20 latest 稳定版,比如在这里我安装的发行版是Ubuntu20.04,如果你遇到了其他什么问题可以评论留言。

完成WSL2的安装后,打开Windows终端,在命令行中输入wsl即可进入WSL2子系统。

我推荐你将apt源更换为国内源,亦或者你可以选择使用稳定快速的网络代理,在这里我将更换为下面的清华源

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

通过cd /etc/apt/进入对应的文件夹下,ls -al显示文件夹的所有内容,可以看到有一个sources.list文件,通过sudo cp sources.list sources.list.bak命令将该文件备份以下,然后sudo vim sources.list打开该文件,将原有内容全部注释掉,然后将上面的清华源复制粘贴到该文件,随后通过:wq保存并退出该文件。由于我已经进行了相关操作,所以此处我仅演示示意一下。

更新了sources.list文件后,依次通过sudo apt-get updatesudo apt-get upgrade更新下载源。

完成了这些设置与更新后,我们来使用自定义的Linux内核替换WSL2的默认内核。首先,通过uname -r查看当前内核版本是什么,比如我的输出为5.15.90.3-microsoft-standard-WSL2-CAN+,由于我已经将WSL2的内核替换为我自定义编译的linux内核,且给内核命名添加了CAN后缀,所以此处我的输出结果与你的输出结果是不同的;另外需要注意的是,我强烈建议无论你的内核版本是多少,在这篇文章发布后的一定时期内,你都采用与我一样的内核版本即5.15.90.3,如果你使用其他的内核版本,那么你需要注意在后续步骤中可能出现的与我视频中所演示情况不一样的地方,如果你遇到一些棘手的问题,可以评论留言。

然后我们将 WSL-Linux-Kernel 仓库(https://github.com/microsoft/WSL2-Linux-Kernel)的代码clone到本地,你可以通过--filter=blob:none来加快克隆的速度,但很明显,你还是需要使用一些网络代理的手段来加快克隆速度;下载完成后,cd WSL2-Linux-Kernel进入该文件夹,并通过git checkout linux-msft-wsl-5.15.90.3切换到新分支,此时,你可以用VSCode或IDE打开该仓库,以便更加清晰地执行后续操作。

在继续操作之前,我们先在WSL2下安装一些依赖,你需要注意,我所演示安装的依赖是基于我当前的系统情况而决定的,在你安装完这些依赖并继续后续的操作时,你可能会遇到警告,提示你缺少相关依赖,那么你需要自行安装所提示的依赖,亦或者你会遇到报错,那么你可以搜索错误信息并根据博客的内容安装缺少的依赖。

在这里,我将安装以下这几个依赖,依次执行sudo apt update 和 sudo apt install build-essential flex bison libssl-dev libelf-dev libncurses-dev autoconf libudev-dev libtool完成这些依赖的安装;你可以看到,我都已经安装过这些依赖了。

回到VSCode中,可以看到项目根目录下有一个.config文件,先删除它,或者cp .config .config.old备份一下再删除.config文件,然后在项目根目录下执行cp Microsoft/config-wsl .config将Microsoft文件夹的config-wsl文件复制到项目根目录下并重命名为.config。

然后在项目根目录下执行sudo make menuconfig,在 Networking support -> CAN BUS subsystem support下,按M把他们和他们下面的选项都变成module,把能选的全选了,按M没反应变不成module的就按y让它变成build-in的,如我所演示,注意每一级都要勾选,千万别漏掉了;由于我已经更新过了,所以你可以看到我的所有选项及子选项都已经勾选上了。

全部勾选完成后,光标切换到Save,按Enter保存,注意命名为.config;保存成功后,界面会回到终端。此时,在VSCode中打开.config文件,将 CONFIG_LOCALVERSION 的值设置为 5.15.90.3-microsoft-standard-WSL2-CAN,这样的话,在完成对WSL2默认内核的替换后,你可以明确地判断出用于替换的内核是该内核。

接下来我们就可以开始编译自定义的linux内核了,回到 WSL-Linux-Kernel 项目根目录下,先执行sudo make -j16命令,注意,这里的16指的是你的设备的逻辑内核数,比如,我的设备有8个物理核心,有16个逻辑核心,因此这里数值为16;然后再依次执行sudo make modules_installsudo make install编译linux内核。

如果你在编译过程中遇到相关报错,你可以搜索关键词寻找解决方案,或者在评论区留言;编译完成后,执行cp arch/x86/boot/bzImage /mnt/c/Users/98297/can_bzImage命令将bzImage文件复制到wsl2系统外注意将98297替换为你的用户名,并在C:\Users\98297目录下创建.wslconfig文件,在其中添加配置信息,然后保存并关闭文件,如我所演示。

关闭VSCode和重开Windows终端,依次执行wsl --shutdownwsl重启并进入WSL2子系统,然后执行uname -r命令查看现在的linux内核,可以看到,已经更新为了我们自定义的linux内核,至此,我们便完成了WSL2子系统的启用及设置,并且将WSL2子系统的默认linux内核更换为了我们自定义的linux内核。

接下来,我们就可以安装can-utils工具集,并利用两个Pogo-DroneCAN调试器互连来演示WSL2下的CAN数据收发,需要注意的是,我们先要把USB设备从Windows挂载到WSL2子系统才能在WSL2下连接和使用USB设备,因此在Windows终端里执行winget install --interactive --exact dorssel.usbipd-win安装usbipad工具,安装完成后,在终端中依次执行wsl --shutdownwsl重启并进入WSL2子系统,在WSL2子系统下依次执行sudo apt install linux-tools-virtual hwdatasudo update-alternatives --install /usr/local/bin/usbip usbip `ls /usr/lib/linux-tools/*/usbip | tail -n1` 20命令完成相关设置。

在进行下一步操作前,如我所演示,我们需要将两个DroneCAN调试器的GH1.25口通过一根双头反向端子线连接在一起,然后将调试器通过TypeC线连接到电脑上,你应该还记得我们在第2期视频中提到在Windows下直接使用dronecan_gui_tool上位机连接Pogo-DroneCAN调试器时需要依次将调试器连接到电脑,现在我们是在WSL2子系统下连接调试器并通信,不再受到此约束。

新开一个Windows终端,在命令行中执行usbipd wsl list命令查看Devices,如我所演示,1-1,1-2这两个STM...Virtual COM Port就是系统识别到的Pogo-DroneCAN调试器;然后你需要先以管理员角色打开一个新的Windows终端,然后在命令行中依次执行usbipd wsl attach --busid 1-1usbipd wsl attach --busid 1-2将这两个设备挂载到WSL2子系统上,完成挂载后,在命令行中执行wsl命令进入WSL2子系统,在WSL2下执行lsusb命令,可以看到有两个Bus Devices就是我们刚刚成功挂载的Pogo-DroneCAN调试器。

完成了Pogo-DroneCAN调试器的挂载后,回来继续安装can-utils工具集,在WSL2下执行sudo apt install can-utils安装can-utils,并依次执行sudo modprobe cansudo modprobe can-rawsudo modprobe can-gwsudo modprobe slcansudo modprobe vcan完成socketCAN的相关设置。

在命令行中执行ls /dev/tty*命令查看相关的硬件设备信息,其中/dev/ttyACM0/dev/ttyACM1这两个设备就是连接到电脑的Pogo-DroneCAN调试器,然后在命令行中依次执行sudo slcand -o -c -s8 /dev/ttyACM0 can0sudo slcand -o -c -s8 /dev/ttyACM1 can1sudo ifconfig can0 upsudo ifconfig can1 up命令来创建并启动can0和can1;注意观察,你会发现刚刚在执行slcand命令时,两个DroneCAN调试器的呼吸灯都进行了一次闪烁,你可以把这个理解为是调试器正常工作的一个前置信号;在创建完成后,执行ifconfig可以看到已经有了can0和can1。

最后我们在一个命令行中执行sudo candump can1命令监听can1的数据,在另外一个命令行中执行cansend can0 123#0011命令向can0发送数据,可以看到can1收到了我们向can0发送的数据,这意味着我们向can0发送的数据,通过socketCAN以slcan协议从电脑发送到了DroneCAN调试器a,该调试器将slcan协议数据转换为dronecan协议数据后再发送给DroneCAN调试器b,DroneCAN调试器b接收到数据并将dronecan协议数据转换为slcan协议数据后回传给电脑,此时socketCAN将slcan协议包装后回显到我们的can1上。

经过一个完整的发送、转换、传递、转换、回传环节的收发数据完全一致,这意味着DroneCAN调试器已经正常地工作了;后续,你可以将其中一个调试器更换为你的DroneCAN外设并给外设通电,然后外设将持续产生dronecan协议的数据发送给DroneCAN调试器,调试器将dronecan协议的数据转换为slcan协议数据后回传给电脑,此时你就可以根据外设的实际数据进行相关开发调试工作了,我将在后续视频中演示测试DroneCAN调试器与CANGPS外设之间的连接与调试。

那么这期视频就到这里了,记得点赞投币收藏和关注,我们下期视频,不见不散!

<think> 首先,用户的问题是:"我想查询can-utils是否可以在Windows系统上使用 请问Can can-utils be used on Windows system?"。这是一个关于can-utils工具在Windows系统上的可用性的查询。 回顾系统级指令: - 所有行内数学表达式用$...$格式(但这里可能不涉及数学)。 - 独立公式用$$...$$(同样,这个问题不太可能涉及)。 - LaTeX语法正确。 - 使用中文回答。 - 生成相关问题。 - 引用的段落末尾添加引用标识。 - 回答结构清晰,帮助用户逐步解决问题。 - 参考站内引用:[1]到[4]。 站内引用: - 引用[1]:关于Linux下的can-utils工具,包括candump、cansend等。 - 引用[2]:关于scsi-target-utils在iSCSI软件目标上的用途。 - 引用[3]:关于nfs-utils包提供NFS服务器工具。 - 引用[4]:关于安装软件包的命令,如-y选项用于自动同意。 这些引用主要针对Linux系统和特定的utils工具包。can-utilsLinux专用的工具,基于Linux内核的CAN接口。引用中没有提到其在Windows上的可用性。 用户的问题是:can-utils能否在Windows上使用can-utils是一个Linux工具集,依赖于Linux内核的CAN子系统。Windows系统不支持原生Linux内核功能,因此can-utils不能直接在Windows上运行。 可能的解决方案: - 在Windows上,可以通过运行Linux虚拟机或使用Windows Subsystem for Linux (WSL)来使用can-utils- 或者,寻找Windows上的替代工具来处理CAN总线数据,如Vector CANalyzer、PEAK-System的PCAN工具等。 生成相关问题:指令要求生成相关问题,基于当前主题。 回答结构: 1. **清晰地回答问题**:直接说明can-utils不能在Windows上原生运行。 2. **解释原因**:简要解释为什么,因为它依赖于Linux内核。 3. **提供替代方案**:建议使用WSL或虚拟机。 4. **基于引用**:引用[1]提到can-utilsLinux下的工具,所以我可以在回答中引用它。 5. **使用中文**:整个回答必须用中文。 6. **添加引用标识**:在引用的段落末尾添加引用标识,如[^1]。 7. **生成相关问题**:在回答结束时,基于主题生成几个相关问题。 最终回答结构: - 开头直接回答。 - 详细解释。 - 引用相关部分。 - 建议替代方案。 - 生成相关问题。 生成相关问题示例: 1. can-utils在Windows上有哪些替代工具? 2. 如何在Windows上安装和使用can-utils? 3. can-utils的主要功能有哪些? 4. 其他类似工具的介绍。 </think> ### can-utils在Windows系统上的可用性 您的问题是询问can-utils工具是否可以在Windows系统上使用。让我一步步解答: 1. **直接回答**: can-utils **不能在Windows系统上原生运行**。它是一套专门为Linux操作系统设计的命令行工具,依赖于Linux内核的CAN总线子系统接口[^1]。Windows系统不原生支持Linux内核功能,因此无法直接安装或执行can-utils工具包。 2. **原因分析**: - can-utils(如candump、cansend等)需要访问Linux内核的SocketCAN层,这是Linux特有的硬件抽象层。Windows系统内核架构不同,没有兼容的接口[^1]。 - 引用[1]明确指出,can-utils用于"LinuxCAN调试工具",这进一步确认了其Linux专属性[^1]。 3. **替代方案(在Windows上使用CAN工具)**: 虽然can-utils不能在Windows上直接使用,但您可以通过以下方法间接实现类似功能: - **使用Windows Subsystem for Linux (WSL)**: 在Windows 10/11中安装WSL(例如Ubuntu子系统),然后在WSL环境中安装和运行can-utils。这需要配置USBCAN适配器并确保兼容性。参考命令安装: ```bash sudo apt-get install can-utils ``` 但注意,硬件驱动支持可能受限[^1]。 - **虚拟机方案**: 使用VirtualBox或VMware运行Linux虚拟机(如Ubuntu),在虚拟机中安装can-utils。这种方式性能较差,但兼容性好。 - **Windows原生替代工具**: - **Vector CANalyzer**:商业CAN工具,支持Windows原生运行。 - **PEAK-System PCAN-View**:免费工具,用于Windows下的CAN数据监控和发送。 - **CANoe**:专业级的CAN协议分析工具(需许可证)。 4. **注意事项**: - 如果您需要在Windows上处理CAN数据,推荐使用原生Windows工具,以避免兼容性问题。 - can-utilsLinux环境中用途广泛,包括调试CAN总线数据、发送/接收消息等,但跨平台支持有限[^1]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值