Windows和Linux中USB串口的区别
Posted
技术标签:
【中文标题】Windows和Linux中USB串口的区别【英文标题】:Difference between USB Serial in Windows and Linux 【发布时间】:2017-10-27 03:29:53 【问题描述】:我在学校为一个机器人项目购买了 Variense VMU931 惯性测量单元 (IMU),但我正在努力让它与我在 Ubuntu 中的笔记本电脑可靠地通信。我正在使用 C++ 和 termios 使用 8n1 no parity blah blah blah 连接到它。我已经尝试了所有我能想到的设置排列,但我仍然无法可靠地向 IMU 发送命令。
我致电 Variense 支持并与编写他们软件的工程师交谈,他说这是一个已知问题。显然它在 Windows 中运行良好(并且 Windows 演示软件在我的设备上运行良好),但我们都没有意识到 Windows 和 Linux 中的 USB 串行仿真之间的显着差异。
此文件顶部的构造函数显示了我如何打开和配置端口:
https://github.com/jsford/FFAST/blob/master/VMU931/src/vmu.cpp
任何帮助都会很棒。我一直在为此扯头发! 谢谢!
【问题讨论】:
【参考方案1】:使用cu
实用程序运行具有不同参数的测试。
要调试问题:直接在 Linux 上以及在 VirtualBox/VmWare 中运行的 Windows VM 上使用 Wireshark 运行 USB 数据包捕获。比较流量。
检查为该 USB 设备选择并加载了哪个内核模块。为此,请使用/sys/
文件系统:此虚拟 fs 具有来自内核的有关所使用内容的信息。此外,lsmod
-kind 命令显示内核模块的使用情况。 USB 的驱动程序选择取决于<usb-manufacturer-id>:<usb-product-id>
。
将一些printf
s 放入内核模块,看看哪里出错了。使用 DKMS 构建系统来重建内核模块。 Linux 中有一个配置文件可以将内核模块列入黑名单/白名单 - 有助于确保加载正确的模块。
这就是我修复 USB 串行设备驱动程序所做的工作。
【讨论】:
以上是关于Windows和Linux中USB串口的区别的主要内容,如果未能解决你的问题,请参考以下文章