c++ - Windows 和 Linux 中 USB 串口的区别

标签 c++ linux windows serial-port termios

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

我调用 Variense 支持并与编写他们软件的工程师交谈,他说这是一个已知问题。显然它在 Windows 中运行良好(Windows 演示软件在我的设备上运行良好),但我们都不知道 Windows 和 Linux 中 USB 串行仿真之间的显着差异。

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

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

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

最佳答案

使用 cu用于运行具有不同参数的测试的实用程序。

调试问题:直接在 Linux 上使用 Wireshark 运行 USB 数据包捕获,也在运行在 VirtualBox/VmWare 中的 Windows VM 上运行。比较流量。

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

放一些printf s 进入内核模块,看看哪里失败了。使用 DKMS 构建系统重建内核模块。 Linux 中某处有一个配置文件,用于将内核模块列入黑名单/白名单 - 有助于确保加载正确的模块。

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

关于c++ - Windows 和 Linux 中 USB 串口的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46967066/

相关文章:

linux - 命令 cd 的作用是什么?意思是?

windows - 为什么SDL_DisplayFormat崩溃?

java - 使用 SYSTEM 帐户的 Windows 服务调用的 java 更新 Windows 注册表

windows - Windows 上的互斥锁和事件

c++ - 为什么在使用 DT_MODIFYSTRING 选项将拷贝传递给 DrawText 函数时原始 CString 会被覆盖?

具有不同值类型模板参数的模板类的 C++ 数组或 vector

javascript - SpiderMonkey 对比 JavaScriptCore 对比?

python - 调试停止从 libc.so.6 到 std::cout 的 write()

c++ - 在哪里可以查看 OMP 计划(自动)选择的内容?

java - Linux (Ubuntu) Java 插件和控制台