contents
下一步: 配置 TCP/IP 网络 向上: 设置串行端口 前一步: 访问串行设备

串行硬件

目前支持各种使用 RS-232 标准的串行板卡。RS-232 是目前 PC 领域最常见的串行通信标准。它使用多个电路来传输单个比特位以及进行同步。额外的线路可以用于信号传输载波的存在(由调制解调器使用)和握手。

虽然硬件握手是可选的,但它非常有用。它允许两个站点中的任何一个站点发出信号,表明它是否准备好接收更多数据,或者另一个站点是否应该暂停,直到接收方完成对传入数据的处理。用于此目的的线路分别称为“清除发送”(CTS)和“请求发送”(RTS),这也是硬件握手的俗称“RTS/CTS”的由来。

在 PC 中,RS-232 接口通常由源自 National Semiconductor-16450 芯片或其更新版本 NSC-16550Agif 的 UART 芯片驱动。一些品牌(最值得注意的是配备 Rockwell 芯片组的内置调制解调器)也使用完全不同的芯片,这些芯片被编程为表现得好像它们是 16550 一样。

16450 和 16550 之间的主要区别在于后者具有 16 字节的 FIFO 缓冲区,而前者只有 1 字节的缓冲区。这使得 16450 适用于高达 9600 波特的速率,而更高的速度需要 16550 兼容的芯片。除了这些芯片外,也支持 8250 芯片,它是 PC-AT 的原始 UART。

在默认配置中,内核检查四个标准串行端口 COM1 到 COM4。这些端口将被分配设备次设备号 64 到 67,如上所述。

如果您想正确配置串行端口,您应该安装 Ted Tso 的 setserial 命令以及 rc.serial 脚本。此脚本应在系统启动时从 /etc/rc 调用。它使用 setserial 来配置内核串行设备。一个典型的 rc.serial 脚本如下所示

           # /etc/rc.serial - serial line configuration script.
           #
           # Do wild interrupt detection
           /sbin/setserial -W /dev/cua*

           # Configure serial devices
           /sbin/setserial /dev/cua0 auto irq skip test autoconfig
           /sbin/setserial /dev/cua1 auto irq skip test autoconfig
           /sbin/setserial /dev/cua2 auto irq skip test autoconfig
           /sbin/setserial /dev/cua3 auto irq skip test autoconfig

           # Display serial device configuration
           /sbin/setserial -bg /dev/cua*
 
有关参数的解释,请参阅 setserial 随附的文档。

如果您的串行卡未被检测到,或者 setserial -bg 命令显示不正确的设置,您将必须通过显式提供正确的值来强制配置。据报告,配备 Rockwell 芯片组的内置调制解调器的用户会遇到此问题。例如,如果 UART 芯片被报告为 NSC-16450,而实际上它是 NSC-16550 兼容的,您必须更改有问题的端口的配置命令为

           /sbin/setserial  /dev/cua1  auto irq skip test autoconfig
           uart 16550
 
存在类似的选项来强制 COM 端口、基地址和 IRQ 设置。请参阅 setserial(8) 手册页。

如果您的调制解调器支持硬件握手,您应该确保启用它。令人惊讶的是,大多数通信程序默认情况下不会尝试启用此功能;您必须手动设置它。最好在 rc.serial 脚本中使用 stty 命令执行此操作

           $ stty crtscts < /dev/cua1
要检查硬件握手是否生效,请使用
           $ stty -a < /dev/cua1
 
这为您提供了该设备所有标志的状态;以减号开头的标志(如 -crtscts)表示该标志已关闭。
contents
下一步: 配置 TCP/IP 网络 向上: 设置串行端口 前一步: 访问串行设备

Andrew Anderson
Thu Mar 7 23:22:06 EST 1996