【问题标题】:COM port detection in LinuxLinux中的COM端口检测
【发布时间】:2013-04-03 06:04:57
【问题描述】:

请让我知道是否有任何 API、系统调用、函数(在 Linux 中)我可以使用我的 C 程序动态检测 COM 端口,即,只要将 USB 调制解调器加密狗插入端口中,我就会能够使用我的 C 程序中的 API、系统调用或函数来检测该 COM 端口。

【问题讨论】:

  • Same question 据我了解,虽然这个得到了更好的答案。

标签: c++ c embedded linux-device-driver udev


【解决方案1】:

根据您的调制解调器,USB 串行端口设备可能显示为/dev/ttyUSBn/dev/ttyACMn,其中n 是从0 开始的某个数字。

您可以配置udev 规则以自动对插入或移除的设备做出反应。

如果你想在 C 中自己做,你需要使用netlink(7) 套接字。如果您不想摆弄它们,可能更简单的方法是简单地使用 udev 包提供的实用程序udevadm(udevadm 在内部使用netlink),类似这样:

 udevadm monitor --kernel

如果你打算在你的 C 程序中使用它,只需像这样在管道中调用它:

 stdbuf -o0 udevadm monitor --kernel

并设置select 循环,以便它可以立即做出反应。包裹在stdbuf 中是必要的,以避免udevadm 提供的缓冲。

【讨论】:

  • 就我而言,我必须使用-o0 而不是-i0
  • @HeyYO:你是对的,那是一个错字。谢谢,已修复!
【解决方案2】:

在 Linux 中,串行端口不称为 COMx。它们(真正的串口)通常命名为/dev/ttySx,其中x 是一个数字,从0 开始表示COM1,1 表示COM2,等等。

如果您想要一个列表,您应该在/dev 中查找ttyS 设备。

这里有一个非常详细的Linux串口编程页面:

最后,请注意,快速Google search 对此类一般性问题大有帮助!

【讨论】:

  • 感谢乔纳森的回复。我有时会在 ttyUSB00 到 ttyUSB02 中检测到 USB 调制解调器,我通过发出命令“lsusb”和“lsusb -t”发现了这一点,但我必须使用 C 程序中的函数检测这些端口,我会调查您发送的链接。再问一件事,我发现有时它是 /dev/sr0 或 /dev/sr1,我有点困惑,你能告诉我 /dev/srX 是如何出现的吗?提前致谢。
  • 下面mvp 的回答似乎对这些动态添加的串行端口有更多详细信息。
猜你喜欢
  • 2016-01-05
  • 1970-01-01
  • 1970-01-01
  • 2012-03-04
  • 2012-10-03
  • 2018-02-11
  • 2011-07-17
  • 2012-11-18
  • 2013-11-03
相关资源
最近更新 更多