Windows 和 Linux 中 USB 串口的区别

Difference between USB Serial in Windows and Linux

我在学校为机器人项目购买了一个 Variense VMU931 惯性测量单元 (IMU),我正在努力让它与我在 Ubuntu 的笔记本电脑进行可靠通信。我将 C++ 与 termios 一起使用,使用 8n1 无奇偶校验等连接到它。我已经尝试了我能想到的所有设置排列,但我仍然无法可靠地向 IMU 发送命令。

我打电话给 Variense 支持并与编写他们软件的工程师交谈,他说这是一个已知问题。显然它在 Windows 中完美运行(并且 Windows 演示软件在我的设备上运行良好),但我们都不知道 Windows 中的 USB 串行仿真与Linux.

此文件顶部的构造函数显示了我如何打开和配置端口:

https://github.com/jsford/FFAST/blob/master/VMU931/src/vmu.cpp

任何帮助都会很棒。我一直为此焦头烂额! 谢谢!

使用 cu 实用程序对不同参数进行 运行ning 测试。

要调试问题:运行 USB 数据包捕获与 Wireshark 直接在 Linux 上,也在 Windows VM 运行ning 上 VirtualBox/VmWare .比较流量。

检查为该 USB 设备选择并加载了哪个内核模块。为此使用 /sys/ 文件系统:此虚拟文件系统具有来自内核的有关使用内容的信息。此外,lsmod 类命令显示内核模块的使用情况。 USB 的驱动程序选择取决于 <usb-manufacturer-id>:<usb-product-id>.

将一些printfs 放入内核模块中,看看哪里失败了。使用 DKMS 构建系统重建内核模块。在 Linux 到 blacklist/whitelist 内核模块的某处有一个配置文件 - 有助于确保加载正确的模块。

这就是我修复 USB 串行设备驱动程序的工作。