相关疑难解决方法(0)

如何在Linux上找到所有串口设备(ttyS,ttyUSB,..)而不打开它们?

获取Linux系统上所有可用串行端口/设备列表的正确方法是什么?

换句话说,当我迭代所有设备时/dev/,如何以经典的方式判断哪些是串行端口,即那些通常支持波特率和RTS/CTS流控制?

解决方案将用C编码.

我问,因为我正在使用第三方库,这显然是错误的:它似乎只是迭代/dev/ttyS*.问题是,例如,USB上的串行端口(由USB-RS232适配器提供),并且这些端口列在/ dev/ttyUSB*下.在Linux.org上阅读Serial-HOWTO,我认为随着时间的推移,还会有其他名称空间.

所以我需要找到检测串行设备的官方方法.问题是似乎没有记录,或者我找不到它.

我想有一种方法是打开所有文件/dev/tty*并调用特定的文件,这些文件ioctl()仅在串行设备上可用.那会是一个很好的解决方案吗?

更新

hrickards建议查看"setserial"的来源.它的代码完全符合我的想法:

首先,它打开一个设备:

fd = open (path, O_RDWR | O_NONBLOCK)
Run Code Online (Sandbox Code Playgroud)

然后它调用:

ioctl (fd, TIOCGSERIAL, &serinfo)
Run Code Online (Sandbox Code Playgroud)

如果该调用没有返回错误,那么它显然是一个串行设备.

我在Serial Programming/termios中找到了类似的代码,建议也添加该O_NOCTTY选项.

但是,这种方法存在一个问题:

当我在BSD Unix(即Mac OS X)上测试此代码时,它也能正常工作.但是,通过蓝牙提供的串行设备会导致系统(驱动程序)尝试连接到蓝牙设备,这需要一段时间才能返回超时错误.这是因为只需打开设备即可.我可以想象在Linux上也会发生类似的事情 - 理想情况下,我不需要打开设备来弄清楚它的类型.我想知道是否还有一种方法可以在ioctl没有打开的情况下调用函数,或者以不会导致连接的方式打开设备?

我该怎么办?

linux serial-port

104
推荐指数
8
解决办法
36万
查看次数

标签 统计

linux ×1

serial-port ×1