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

【沧海拾昧】使用LibUsbDotNet进行Windows/Ubuntu跨平台串口管理

#C0502


沧海茫茫千钟粟,且拾吾昧一微尘

——《沧海拾昧集》@CuPhoenix


【阅前敬告】
沧海拾昧集仅做个人学习笔记之用,所述内容不专业不严谨不成体系
【如有问题必是本集记录有谬,切勿深究】

目录

  • 前言
  • 一、测试环境准备
  • 二、测试例程
  • 三、Windows 平台设置
  • 四、Ubuntu 平台设置
    • 1、libusb 安装
    • 2、libusb-1.0 library not found
    • 3、不具备串口访问权限


前言

  在使用 .Net 的跨平台框架(如 Avalonia)进行 Windows / Ubuntu 系统的软件开发时,有时需要针对串口设备进行读取与管理。使用各平台的原生方法进行条件编译过于繁琐,因此可以引入 LibUsbDotNet 库实现这一功能。 LibUsbDotNet 库是跨平台 USB 用户模式库 libusb 的 .NET 版本。

  本文记录了使用 LibUsbDotNet 在 Windows / Ubuntu 平台下读取串口的方法和使用过程中可能存在的问题。


一、测试环境准备

  为演示使用 LibUsbDotNet 在 Windows / Ubuntu 平台下读取串口的方法,本例的实现功能与准备如下:

实现功能:

  • 使用 LibUsbDotNet 库读取设备所接入的 USB 设备列表,显示设备的Vid、Pid,并判断 Vid = 0x1a86 的设备是否连接。

软件版本:

  • Windows 11 家庭中文版;
  • Ubuntu 22.04;
  • LibUsbDotNet v2.2.75(通过 NuGet 包管理器下载);
  • System.IO.Ports v9.0.8(通过 NuGet 包管理器下载);
  • Filter Wizard(Windows 平台需要额外安装,点击下载);
  • libusb-v1.0(Ubuntu 平台需额外安装,点击下载);

硬件说明:

  • 用于测试的 USB 设备是 CH340,Vid = 0x1a86;
  • Ubuntu 系统安装在 Jetson Orin Nx(ARM64);

二、测试例程

  使用如下代码进行测试:

private void GetSerialPorts()
{label1.Text = "";try{//	显示所有串口设备UsbRegDeviceList allDev = UsbDevice.AllDevices;foreach (UsbRegistry usbRegistry in allDev){label1.Text += $"{usbRegistry.Vid:X4}:{usbRegistry.Pid}, {usbRegistry.FullName}\n";}//  查找 Vid = 0x1a86, Pid = 0x7523 的设备//UsbDeviceFinder finder = new UsbDeviceFinder(0x1a86,0x7523);//using (UsbDevice device = UsbDevice.OpenUsbDevice(finder))//{//    if (device == null)//    {//        label1.Text += "No found.\n";//    }//    else {//        label1.Text += "Found.\n";//    }//}}catch(Exception ex){label1.Text += $"{ex.Message}\n";}label1.Text += "end.\n";
}

说明:

  • label1 仅用作结果显示使用,可以根据实际情况进行替换;

三、Windows 平台设置

问题: 直接运行该程序,会报错找不到 “libusb-1.0.dll”。

  • 不推荐的解决方案:一些解决方案指出应该分别下载该 .dll 文件的 32 位与 64 位版本并复制到 C:\Windows\System 和 C:\Windows\SysWOW64 目录下,并在代码中设置:
UsbDevice.ForceLibUsbWinBack = true;

新问题: 这样做可能引发新的报错,使用了错误的 .dll 导致不匹配或溢出。

  • 推荐的解决方案:安装 Filter Wizard(点击下载),使用 Filter Wizard 安装串口设备。

在这里插入图片描述

进入 Filter Wizard,选择 Install a device filter,然后 Next

在这里插入图片描述

根据需求选择对应的USB设备,然后选择 Install
  • 在 Windows 平台下即可正确识别到对应串口设备。

在这里插入图片描述

识别到 CH340 设备

四、Ubuntu 平台设置

1、libusb 安装

问题: libusb-1.0 未安装.

  • 解决方案:安装 libusb-1.0,点击进入 官方网站(http://libusb.info),或 点击下载 v1.0.29 版本。
    • 将压缩包解压,然后在解压后得到的文件夹 libusb-1.0.29 内打开终端,依次执行 ./configuremakesudo make install 指令进行安装。
    • 安装完成后,可以通过 dpkg -l | grep libusb-1.0 指令确认是否安装成功。

2、libusb-1.0 library not found

问题: 找不到 libusb-1.0 library.

  • libusb-1.0 library not found.this is often an indication that libsub was installed to ‘/usr/local/lib’ adn mono.net is not looking for it there,to resolve this,add the path ‘/usr/local/lib’to’/ect/Id.so.conf’and run ‘Idconfig’ as root
  • 安装后运行例程代码,可能会抛出 libusb-1.0 library not found 异常,这是因为 libusb 的安装路径 /usr/local/lib 不在 Mono 系统默认的动态链接库搜索路径中。
  • 解决方案:按所抛出异常中的提示,使用指令 sudo gedit /ect/ld.so.conf 打开 /ect/ld.so.conf 文件进行编辑,在文件中增加一行:
include /usr/local/lib

在这里插入图片描述

修改 /ect/ld.so.conf 文件
  • 再次运行例程,即可成功获得所设备所连接的串口设备了。

在这里插入图片描述

识别到 CH340 设备

3、不具备串口访问权限

问题: 用户所在用户组不具有串口访问权限.

  • 解决方案:使用 sudo gpasswd -- add <username> dialout 指令,将当前用户(将指令中的 <username> 替换为当前用户的用户名)加入 dialout 用户组,然后重启设备,即可正常打开串口进行读写。

敬谢诸君。


http://www.lryc.cn/news/619101.html

相关文章:

  • XGBoost 的适用场景以及与 CNN、LSTM 的区别
  • 循环神经网络(RNN)全面解析
  • 文件IO(1)
  • 【doris基础与进阶】3-Doris安装与部署
  • UE5多人MOBA+GAS 42、提高头像画质
  • 方格网法土方计算不规则堆体
  • 常用Linux指令:Java/MySQL/Tomcat/Redis/Nginx运维指南
  • 安路Anlogic FPGA下载器的驱动安装与测试教程
  • 京东方 DV133FHM-NN1 FHD13.3寸 工业液晶模组技术档案
  • C++方向知识汇总(四)
  • UserController类讲解
  • Milvus入门:开源向量数据库,解锁大模型时代的高效检索
  • iptables -L 显示无目标链规则,但是iptables-save显示仍存在链规则原因分析
  • LeetCode189~191、198~214题解
  • 力扣top100(day01-05)--矩阵
  • Golang 语言中 Context 的使用方式
  • 【Python 爬虫】Playwright 多浏览器支持(Chromium/Firefox/WebKit)
  • 云原生高级——nginx
  • Nginx 高级配置
  • 明远智睿T113-i核心板:工业设备制造的“破局者”
  • 10-docker基于dockerfile自动制作镜像
  • 机器学习——DBSCAN
  • imx6ull-驱动开发篇20——linux互斥体实验
  • [TryHackMe]Relevant(smb+windows令牌提权)
  • HarmonyOS元服务开发系列教程(三):实现音乐播放和封面旋转
  • 【问题解决】从Anaconda环境迁移到miniforge并在IDEA中完成环境配置
  • 【数据分享】2020-2022年我国乡镇的逐日最高气温数据(Shp/Excel格式)
  • C++动态代理技术详解:实现原理与应用场景
  • beacon-dongle系统(二)AP及Server建立
  • 双十一美妆数据分析:洞察消费趋势与行业秘密