我将在C中编写一个程序,它将通过串口打开连接,并“监听”传入的命令,然后它将采取一些操作并报告状态。
连接将通过RS232(串行端口),我试图了解如何知道打开哪个端口。
当使用Windows时,如果我连接我的USB串口设备,我看到“Prolific USB-to-Serial Comm Port(COM4)”出现在设备管理器中......但是在Linux端我看不到/sys/class/tty
或/dev
区域中的任何更改,我都会ttyS0
到ttyS7
始终显示(我假设S
代表基于的/sys
what I've read)。
那我怎么知道要连接哪一个?
修改
当我在OpenSUSE 12.1框(3.1内核)上开发时,最终的程序将在运行2.4Linux内核的主板上的uCLinux上运行,所以我正在寻找纯C解决方案将适用于较旧的内核
仅供参考:this post的答案中提到的{{1}}文件系统在2.6内核之前不存在,我的约束迫使我坚持使用2.4内核中可用的东西。
答案 0 :(得分:3)
命令dmesg
将在插入模块时显示内核消息,该消息将提供设备名称。
/proc
文件系统就像是Windows上的设备管理器 - 在某处会有一个tty设备列表
答案 1 :(得分:1)
我使用了两件事:(a)寻找控制线(DTR,DSR等)和(b)打开'所有'端口并找出哪一个看起来是活动的。在后一种情况下,如果您可以向串行设备发送消息并让它响应,则会有所帮助;这显然只有在设备响应消息时才有效。
答案 2 :(得分:0)
结帐/proc/tty/driver/serial
- 你应该看到像16550A
而不是unknown
和rx
的uart应该是> 0表示现有端口。如果您必须猜测将使用哪个端口,请打开所有可用端口。之后,您需要根据需要设置端口(波特率,奇偶校验,位等)或尝试猜测传入的波特率等。