> For the complete documentation index, see [llms.txt](https://handbook.bsdcn.org/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://handbook.bsdcn.org/di-30-zhang-chuan-xing-tong-xin/30.2.-chuan-hang-shu-yu-he-ying-jian.md).

# 30.2.串行术语和硬件

以下是串行通信中常用的术语：

**bps** 每秒位数（bps）是数据传输的速率。

**DTE** 数据终端设备（DTE）是串行通信中的两个端点之一。例如，计算机就是 DTE。

**DCE** 数据通信设备（DCE）是串行通信中的另一个端点。通常，它是调制解调器或串行终端。

**RS-232** 定义硬件串行通信的原始标准。后来它更名为 TIA-232。

在提到通信数据速率时，本节不使用“*baud*”一词。波特（baud）指的是在一定时间内发生的电气状态转换的次数，而 bps 是正确的术语。

要将串行终端连接到 FreeBSD 系统，需要计算机的串行端口和正确的电缆来连接到串行设备。已经熟悉串行硬件和电缆的用户可以安全地跳过本节。

## 30.2.1. 串行电缆和端口

有几种不同类型的串行电缆。最常见的两种类型是空调制解调器电缆和标准 RS-232 电缆。硬件的文档应该说明所需的电缆类型。

这两种电缆在如何连接信号线到连接器方面有所不同。每根导线代表一个信号，定义的信号总结在 [RS-232C 信号名称](/di-30-zhang-chuan-xing-tong-xin/30.2.-chuan-hang-shu-yu-he-ying-jian.md) 中。标准串行电缆直接传输所有 RS-232C 信号。例如，电缆一端的“传输数据”引脚连接到另一端的“传输数据”引脚。这种类型的电缆用于将调制解调器连接到 FreeBSD 系统，也适用于某些终端。

空调制解调器电缆交换了连接器一端的“传输数据”引脚与另一端的“接收数据”引脚。连接器可以是 DB-25 或 DB-9。

空调制解调器电缆可以使用 [DB-25 到 DB-25 空调制解调器电缆](/di-30-zhang-chuan-xing-tong-xin/30.2.-chuan-hang-shu-yu-he-ying-jian.md)，[DB-9 到 DB-9 空调制解调器电缆](/di-30-zhang-chuan-xing-tong-xin/30.2.-chuan-hang-shu-yu-he-ying-jian.md)，以及 [DB-9 到 DB-25 空调制解调器电缆](/di-30-zhang-chuan-xing-tong-xin/30.2.-chuan-hang-shu-yu-he-ying-jian.md) 中总结的引脚连接来构建。虽然标准要求直通式引脚 1 到引脚 1 的“保护地线”，但通常会省略。一些终端仅使用引脚 2、3 和 7，而其他终端可能需要不同的配置。如有疑问，请参考硬件的文档。

**表 1. RS-232C 信号名称**

| 缩写  | 名称     |
| --- | ------ |
| RD  | 接收数据   |
| TD  | 传输数据   |
| DTR | 数据终端就绪 |
| DSR | 数据装置就绪 |
| DCD | 数据载波检测 |
| SG  | 信号地    |
| RTS | 请求发送   |
| CTS | 清除发送   |

**表 2. DB-25 到 DB-25 空调制解调器电缆**

\| 信号 | 引脚号 | | 引脚号 | 信号 | | --- | ---- | | ---- | --- | | SG | 7 | 连接到 | 7 | SG | | TD | 2 | 连接到 | 3 | RD | | RD | 3 | 连接到 | 2 | TD | | RTS | 4 | 连接到 | 5 | CTS | | CTS | 5 | 连接到 | 4 | RTS | | DTR | 20 | 连接到 | 6 | DSR | | DTR | 20 | 连接到 | 8 | DCD | | DSR | 6 | 连接到 | 20 | DTR | | DCD | 8 | 连接到 | 20 | DTR |

**表 3. DB-9 到 DB-9 空调制解调器电缆**

\| 信号 | 引脚号 | | 引脚号 | 信号 | | --- | ---- | | ---- | --- | | RD | 2 | 连接到 | 3 | TD | | TD | 3 | 连接到 | 2 | RD | | DTR | 4 | 连接到 | 6 | DSR | | DTR | 4 | 连接到 | 1 | DCD | | SG | 5 | 连接到 | 5 | SG | | DSR | 6 | 连接到 | 4 | DTR | | DCD | 1 | 连接到 | 4 | DTR | | RTS | 7 | 连接到 | 8 | CTS | | CTS | 8 | 连接到 | 7 | RTS |

**表 4. DB-9 到 DB-25 空调制解调器电缆**

\| 信号 | 引脚号 | | 引脚号 | 信号 | | --- | ---- | | ---- | --- | | RD | 2 | 连接到 | 2 | TD | | TD | 3 | 连接到 | 3 | RD | | DTR | 4 | 连接到 | 6 | DSR | | DTR | 4 | 连接到 | 8 | DCD | | SG | 5 | 连接到 | 7 | SG | | DSR | 6 | 连接到 | 20 | DTR | | DCD | 1 | 连接到 | 20 | DTR | | RTS | 7 | 连接到 | 5 | CTS | | CTS | 8 | 连接到 | 4 | RTS |

> **注意**
>
> 当一端的一个引脚连接到另一端的一对引脚时，通常在连接器中用一根短线连接引脚对，再用一根长线连接到另一端的单个引脚。

串行端口是数据在 FreeBSD 主机和终端之间传输的设备。有几种不同类型的串行端口。在购买或制作电缆之前，确保它适配终端和 FreeBSD 系统的端口。

大多数终端具有 DB-25 端口。个人计算机可能具有 DB-25 或 DB-9 端口。多端口串行卡可能具有 RJ-12 或 RJ-45 端口。查看随硬件提供的文档，了解端口类型，或通过外观确认端口类型。

在 FreeBSD 中，每个串行端口通过 **/dev** 目录中的一个条目访问。有两种不同类型的条目：

* **Call-in** 端口命名为 **/dev/ttyuN**，其中 *N* 是端口号，从零开始。如果终端连接到第一个串行端口（**COM1**），则使用 **/dev/ttyu0** 来表示该终端。如果终端连接到第二个串行端口（**COM2**），则使用 **/dev/ttyu1**，以此类推。通常，呼入端口用于终端。呼入端口要求串行线路激活“数据载波检测”信号才能正常工作。
* **Call-out** 端口在 FreeBSD 8.X 及更高版本中命名为 **/dev/cuauN**，在 FreeBSD 7.X 及以下版本中命名为 **/dev/cuadN**。呼出端口通常不用于终端，但用于调制解调器。如果串行电缆或终端不支持“数据载波检测”信号，则可以使用呼出端口。

FreeBSD 还提供了初始化设备（**/dev/ttyuN.init** 和 **/dev/cuauN.init** 或 **/dev/cuadN.init**）和锁定设备（**/dev/ttyuN.lock** 和 **/dev/cuauN.lock** 或 **/dev/cuadN.lock**）。初始化设备用于在每次打开端口时初始化通信端口参数，例如为使用 `RTS/CTS` 信号流控制的调制解调器设置 `crtscts`。锁定设备用于锁定端口上的标志，以防止用户或程序更改某些参数。有关终端设置、锁定和初始化设备以及设置终端选项的信息，请分别参考 [termios(4)](https://man.freebsd.org/cgi/man.cgi?query=termios\&sektion=4\&format=html)、[uart(4)](https://man.freebsd.org/cgi/man.cgi?query=uart\&sektion=4\&format=html) 和 [stty(1)](https://man.freebsd.org/cgi/man.cgi?query=stty\&sektion=1\&format=html)。

## 30.2.2. 串口配置

默认情况下，FreeBSD 支持四个串口，通常称为 **COM1**、**COM2**、**COM3** 和 **COM4**。FreeBSD 还支持哑多端口串行接口卡，例如 BocaBoard 1008 和 2016，以及更智能的多端口卡，如 Digiboard 生产的卡。然而，默认内核仅查找标准的 **COM** 端口。

要查看系统是否识别了串口，可以查找以 `uart` 开头的系统引导消息：

```sh
# grep uart /var/run/dmesg.boot
```

如果系统未识别到所有所需的串口，可以在 **/boot/device.hints** 中添加额外的条目。该文件已经包含了 **COM1** 的 `hint.uart.0.*` 和 **COM2** 的 `hint.uart.1.*` 条目。当为 **COM3** 添加端口条目时使用 `0x3E8`，为 **COM4** 添加端口条目时使用 `0x2E8`。常见的 IRQ 地址为 **COM3** 的 `5` 和 **COM4** 的 `9`。

要确定端口的默认终端 I/O 设置，可以指定其设备名称。以下示例确定 **COM2** 的呼入端口设置：

```sh
# stty -a -f /dev/ttyu1
```

系统范围内的串口设备初始化由 **/etc/rc.d/serial** 控制。此文件会影响串口设备的默认设置。要更改设备的设置，可以使用 `stty` 命令。默认情况下，更改的设置会一直有效，直到设备关闭，重新打开时会恢复到默认设置。要永久更改默认设置，请打开并调整初始化设备的设置。例如，要为 **ttyu5** 启用 `CLOCAL` 模式、8 位通信和 `XON/XOFF` 流控，可以输入：

```sh
# stty -f /dev/ttyu5.init clocal cs8 ixon ixoff
```

要防止应用程序更改某些设置，可以调整锁定设备的设置。例如，要将 **ttyu5** 的速率锁定为 57600 bps，可以输入：

```sh
# stty -f /dev/ttyu5.lock 57600
```

现在，任何打开 **ttyu5** 并尝试更改端口速率的应用程序都只能使用 57600 bps。
