7

我将用 C 语言编写一个程序,该程序将通过串行端口打开一个连接,并“监听”传入的命令,然后它将采取一些行动并报告状态。

连接将通过 RS232(串行端口)进行,我试图了解如何知道要打开哪个端口。

使用 Windows 时,如果我连接我的 USB 串行设备,我会在设备管理器中看到“Prolific USB-to-Serial Comm Port (COM4)”……但在 Linux 端,我看不到任何变化/sys/class/ttyor/dev区域,我一直看穿ttyS0现在ttyS7(我假设S根据我读过的内容代表串行)。

那么我怎么知道要连接哪一个呢?

编辑
当我在OpenSUSE 12.1 机器(3.1 内核)上开发它时,最终程序将在运行 2.4Linux 内核的板上的 uCLinux 上运行,所以我正在寻找适用于旧内核的纯 C 解决方案

仅供参考:本文答案中提到的文件/sys系统直到 2.6 内核才存在,我的限制迫使我坚持使用 2.4 内核中可用的东西。

4

3 回答 3

3

该命令dmesg将在插入模块时向您显示内核消息,该消息将给出它的设备名称。

文件系统就像windows上的/proc设备管理器——在某个地方会有一个tty设备列表

于 2012-10-04T20:26:33.113 回答
1

我用过的两件事:(a)查找控制线(DTR、DSR 等)和(b)打开“所有”端口并找出哪些端口似乎处于活动状态。在后一种情况下,如果您可以向串行设备发送消息并让它响应,这会有所帮助;这显然只有在设备会响应消息时才有效。

于 2012-10-04T20:23:22.897 回答
0

签出/proc/tty/driver/serial- 你应该看到一个 uart,16550A而不是现有端口,unknown并且rx应该 > 0。如果您必须猜测将使用哪个端口,请打开所有可用端口。之后,您需要根据需要设置端口(波特率、奇偶校验、位等)或尝试猜测传入的波特率等。

于 2012-10-04T22:02:59.553 回答