相关疑难解决方法(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万
查看次数

如何在Windows XP中获得USB串口加密狗的稳定COM端口?

我开发嵌入式系统并需要串行端口进行通信.

在Windows XP中,USB串行端口加密狗的数字不断移动,这使得它很难在脚本或makefile中使用(例如,通过内置的引导加载程序对NXP控制器进行闪存编程,或者用于控制目标和两个实验室设备)同时).

有没有办法修复这种加密狗的COM端口?在Linux中,我可以通过对FTDI加密狗的序列号相匹配(请参见通过的udev做这个答案,我只是给了,而寻找一个回答这个问题).

windows embedded usb serial-port usbserial

6
推荐指数
2
解决办法
4万
查看次数

标签 统计

serial-port ×2

embedded ×1

linux ×1

usb ×1

usbserial ×1

windows ×1