常见的串口名称是 /dev/ttyS0, /dev/ttyS1, 等等。然后在 2000 年左右出现了 USB 总线,其名称类似于 /dev/ttyUSB0 和 /dev/ttyACM1(用于 USB 总线上的 ACM 调制解调器)。多端口串口卡使用略有不同的名称(取决于品牌),例如 /dev/ttyE5。
由于 DOS 为旧的 ISA 总线提供了 4 个串口:COM1-COM4,或 Linux 中的 ttyS0-ttyS3,因此较新的 PCI 总线上的大多数串口都使用更高的数字,例如 ttyS4 或 ttyS14(在内核 2.6.13 之前)。但是由于大多数 PC 只配备一个或两个串口,ttyS0 和可能是 ttyS1(用于第二个端口),因此 PCI 总线现在可以使用 ttyS2(内核 2.6.15 及更高版本)。所有这些都允许在同一台 PC 上同时拥有 ISA 串口和 PCI 串口,而不会发生名称冲突。 0-1(或 0-3)保留给旧的 ISA 总线(或较新的 LPC 总线),而 2 及以上(或 4 及以上或 14 及以上)用于 PCI,括号中显示的是较旧的方案。 虽然不一定非得这样,但通常是这样。
如果您正在使用 udev(它只在启动时将您计算机上的设备放入 /dev 目录中),那么有一种简单的方法可以通过编辑 /etc/udev/ 中的文件来更改设备名称。例如,要将内核检测为 ttyS3 的名称更改为您想要命名的名称:ttyS14,请在 /etc/udev/udev.rules 中添加类似于这样的行
BUS=="pci" KERNEL=="ttyS3", NAME="ttyS14"
主板上同时具有 PCI 和 ISA 插槽的板载串口很可能仍然是 ISA 端口。即使对于全 PCI 插槽的主板,串口通常也不是 PCI。相反,它们要么是 ISA,位于内部 ISA 总线上,要么位于 LPC 总线上,LPC 总线用于低速传统 I/O 设备:串口/并口和软盘驱动器。
Linux 中的设备具有主设备号和次设备号。串口 ttySx (x=0,1,2, 等等) 的主设备号是 4。您可以通过在 /dev 目录中键入 "ls -l ttyS*" 来查看这一点(以及次设备号)。要查找各种设备的设备名称,请参阅内核文档中的 "devices" 文件。
以前每个串口都有一个 "cua" 名称,它的行为略有不同。例如,ttyS2 将对应于 cua2。它主要用于调制解调器。 cua 主设备号是 5,次设备号从 64 开始。您的 /dev 目录中可能仍然有 cua 设备,但它们现在已被弃用。有关详细信息,请参阅 Modem-HOWTO,章节:cua 设备已过时。
有关在设备目录中创建旧设备的信息,请参阅
Dos/Windows 使用 COM 名称,而来自串口驱动程序的消息使用 ttyS00、ttyS01 等。较旧的串口驱动程序(2001 年?)仅使用 tty00、tty01 等。
下表显示了一些串口设备名称的示例。IO 地址是旧 ISA 总线的默认地址(不适用于较新的 PCI 和 USB 总线)。
dos common IO USB-BUS ( ACM => acm modem )
name name major minor address || common name common name
COM1 /dev/ttyS0 4, 64; 3F8 || /dev/ttyUSB0 | /dev/ttyACM0
COM2 /dev/ttyS1 4, 65; 2F8 || /dev/ttyUSB1 | /dev/ttyACM1
COM3 /dev/ttyS2 4, 66; 3E8 || /dev/ttyUSB2 | /dev/ttyACM2
COM4 /dev/ttyS3 4, 67; 2E8 || /dev/ttyUSB3 | /dev/ttyACM3
- /dev/ttyS4 4, 68; various
有关更多信息,请参阅内核文档目录中的 usb 子目录中的文件:usb-serial、acm 等。
在某些安装中,将创建两个额外的设备,/dev/modem
用于您的调制解调器,/dev/mouse
用于鼠标。这两个都是指向 /dev
中相应设备的符号链接。
历史记录:以前(在 1990 年代),不鼓励使用 /dev/modem
(作为指向调制解调器串口的链接),因为锁定文件可能不会意识到它实际上是 /dev/ttyS2
。较新的锁定文件系统不会落入此陷阱,因此现在可以使用此类链接。
检查连接器可能会提供一些线索,但通常不是决定性的。PC 背面的串口连接器通常是带有公针的 DB 连接器。9 针是最常见的,但有些是 25 针的(尤其是像 486 这样的旧 PC)。可能有一个 9 针(可能是 ttyS0 ??)和一个 25 针(可能是 ttyS1 ??)。对于两个 9 针连接器,顶部的那个可能是 ttyS0。
如果您在 PC 背面只有一个串口连接器,这可能很容易。如果您还有一个内置调制解调器,像 wvdial 这样的程序可能会告诉您它在哪个端口上(除非它是尚未启用的 PnP)。来自 setserial 的报告(在启动时或您从命令行运行时)应该可以帮助您识别非调制解调器端口。
如果您有两个串口,可能会更困难。您可能只有一个串口连接器,但实际上有两个端口,其中一个未被使用(但它仍然在电子上存在)。首先检查计算机的手册(如果有)。查看连接器上是否有有意义的标签。您甚至可能想要取下 PC 的外壳,看看内部带状串口线插入的卡上是否有任何有意义的标签。标签(如果有的话)可能会说 “serial 1”、“serial 2” 或 A、B。它实际上是哪个 COM 端口将取决于跳线或 PnP 设置(有时显示在 BIOS 设置菜单中)。但 1 或 A 更可能是 ttyS0,而 2 或 B 则是 ttyS1。
标签不太可能是决定性的,所以这里有另一种方法。如果串口已根据 setserial 正确配置,那么您可以从端口发送一些字节,并尝试检测它们是从哪个连接器(如果有)出来的。发送此类信号的一种方法是使用如下命令将一个长文本文件复制到端口:cp my_file_name /dev/ttyS1。连接到 DTR 引脚的电压表(参见 Serial-HOWTO 的引脚排列)将在您发出复制命令后立即显示正电压。
在您开始发送字节后,发送引脚应从几伏负电压变为在零电压附近波动的电压。如果不是这样(但 DTR 变为正电压),那么您找到了正确的端口,但它被阻止发送。这可能是由于错误的 IRQ、设置了 -clocal 等原因。命令 “stty -F /dev/ttyS1 -a
” 应显示 clocal(而不是 -clocal)。如果不是,请将其更改为 clocal。
另一个测试是跳接测试串口的发送和接收引脚(25 针或 9 针连接器的引脚 2 和 3)。然后向每个端口发送一些内容(从 PC 键盘),看看它是否被发送回来。如果它被发送回来,则很可能是带有跳线的端口。然后移除跳线并验证是否没有任何内容被发送回来。请注意,如果设置了 “echo”(通过 stty),则跳线会创建一个无限循环。通过跳线的字节进入端口,然后立即从另一个引脚出来,回到跳线。然后它们再次进进出出。您发送到端口的任何内容都会永远重复自身(直到您通过移除跳线等方式中断它)。这可能是测试它的一个好方法,因为重复的测试消息在移除跳线时停止。
作为跳线,您可以使用迷你(或微型)跳线电缆(在一些电子零件商店出售),带有迷你鳄鱼夹。一小片纸可以用来防止迷你夹在不应该接触的地方进行电气接触。金属回形针有时可以弯曲用作跳线。无论您使用什么作为跳线,都要注意不要弯曲或过度刮擦引脚。要从端口接收内容,您可以转到虚拟终端(例如 Alt-F2 并登录),然后键入类似 “cp /dev/ttyS2 /dev/tty” 的内容。然后在另一个虚拟终端上,您可以通过 “echo test_message > /dev/ttyS2” 向 ttyS2(或任何端口)发送一些内容。然后返回到接收虚拟终端并查找 test_message。有关更多信息,请参阅 串口电气测试设备。
尝试识别串口的另一种方法是将一些物理串口设备连接到它,看看它是否工作。但这里的一个问题是,它可能因为配置不正确而无法工作。如果连接了串口鼠标,则可能会在启动时检测到它。
您可以将设备(例如串口鼠标,使用 1200 波特率)放在端口上,然后使用 minicom 或 picocom 与该端口通信。然后通过单击鼠标或使用设备发送字符,看看它们是否显示。如果未显示,则可能是您告诉 picocom 错误的端口(例如 ttyS0 而不是 ttyS1),因此请重试。
如果软件显示您拥有的串口比您拥有的连接器多(包括算作串口的内置调制解调器),那么您可能有一个没有连接器的串口。一些主板配备了没有电缆或外部串口 DB 连接器的串口。有人可能会用它组装一台 PC,并决定不使用此串口。主板上可能有一个 “serial” 连接器和标签,但没有带状电缆连接到其引脚。要使用此端口,您必须获得带状电缆和连接器。我见过这种带状电缆的不同接线方式,所以请注意。
如果您不使用 devfs(它会自动创建此类设备)并且没有您需要的设备 “文件”,则您将必须创建它。使用 mknod
命令或 MAKEDEV shell 脚本。例如,假设您需要创建 ttyS0
linux# mknod -m 666 /dev/ttyS0 c 4 64
MAKEDEV 脚本更易于使用。请参阅它的手册页。例如,如果您需要为 ttyS0
创建设备,您只需键入
linux# MAKEDEV ttyS0
如果以上命令不起作用(并且您是 root 用户),请在 /dev 目录中查找 MAKEDEV 脚本并运行它。
这处理设备创建并应设置正确的权限。有关创建多端口设备的信息,请参阅 在 /dev 目录中创建多端口设备。