警告: 从 FreeBSD 8.0 开始, 用于串口的设备节点从 /dev/cuadN 改为了 /dev/cuauN; 从 /dev/ttydN 改为了 /dev/ttyuN。 FreeBSD 7.X 用户需要根据实际情况对这份文档中的例子进行必要的调整。
每秒位── 数据的传输速度
数据终端设备 ── 如您的计算机
数据通讯设备 ── 如您的modem
用于硬件串口通讯的EIA标准
当讨论通讯数据速度的时候,这节不会使用术语 “baud”。Baud指电气标准传输率,它已经使用了很长时间, 而 “bps” (bits per second) 才是正确使用的术语 (至少它不会打扰那些爱争吵的家伙)。
要将 modem 或终端与您的 FreeBSD 系统相连, 您的计算机需要一个串口, 以及用于连接串口设备所需的线缆。 如果您比较熟悉硬件及所需要的电缆, 则可以跳过这节。
串口线缆有许多不同的种类。 最常见的两种类型是 null-modem 线缆和标准 (“直联”) RS-232 线缆。 您的硬件说明书中会介绍应使用的线缆种类。
null-modem 电缆会直接传送某些信号, 如 “Signal Ground” (信号地), 但对其他信号进行交换。 例如, “Transmitted Data” (数据发送) 引脚是连到另一端 “Received Data” (数据接收) 引脚的。
也可以自行制作 null-modem 电缆给终端使用 (例如, 为了品质的要求)。 下面的表格展示了 RS-232C 信号, 以及 DB-25 连接器上的引脚。 注意, 标准也要求一根直通引脚 1 到引脚 1 的 保护地 (Protective Ground) 线, 但这通常都被省掉。 某些终端在只有引脚 2、 3 和 7 的时候, 就已经能够正常使用了, 而其他一些, 则需要下面例子中所展示的不同的配置。
表 26-1. DB-25 to DB-25 Null-Modem Cable
信号 | 引脚 # | 引脚 # | 信号 | |
---|---|---|---|---|
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 |
这里还有两种目前比较流行的其他接线方式。
表 26-2. DB-9 到 DB-9 Null-Modem 电缆
信号 | 引脚 # | 引脚 # | 信号 | |
---|---|---|---|---|
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 |
表 26-3. DB-9 到 DB-25 Null-Modem 电缆
信号 | 引脚 # | 引脚 # | 信号 | |
---|---|---|---|---|
RD | 2 | DB-9 到 DB-25 Null-Modem 电缆 | 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 |
注意: 当某一段连接器上的一个引脚需要连接到对端的一对引脚时, 通常是将那一对引脚使用一短线连接, 而使用长线接到另一端的那个引脚。
上面的设计似乎更为流行。 在其他变种中 (在 RS-232 Made Easy 这本书中进行了详细介绍) 则是 SG 接 SG, TD 接 RD、 RTS 和 CTS 接 DCD、 DTR 接 DSR, 反之亦然。
标准的串口电缆会直接传送所有 RS-232C 信号。 也就是说, 一头的 “Transmitted Data” 引脚, 会直接接到另一头的 “Transmitted Data” 引脚。 这包括将调制解调器接到您的 FreeBSD 系统上的那种电缆, 同样也适用于某些型号的终端。
串口是FreeBSD主机与终端传输数据的设备。 这节描述了端口的种类和它们在 FreeBSD 上是如何编址的。
有好几种串口。 在采购或制作线缆之前, 您应确认它能够适合您的终端以及 FreeBSD 系统。
绝大多数终端都提供 DB-25 端口。 个人计算机, 也包括运行 FreeBSD 的 PC 机, 通常会有 DB-25 或 DB-9 口。 如果您的 PC 上有多插口串口卡, 则可能有 RJ-12 或 RJ-45 口。
请参见您硬件的文档以了解所用接口的规格。 此外, 您也可以通过观察外观来了解所用的端口。
在FreeBSD中,您可以通过 /dev 目录中的一个记录来访问每个串口。有两种不同的记录:
呼入端口的名字是 /dev/ttyuN, 其中 N 是端口的编号, 从零开始计数。 一般来说, 您使用呼入端口作为终端。 呼入端口要求数据线使用载波检测 (DCD) 信号来工作。
呼出端口的名字是 /dev/cuauN。 通常并不使用呼出端口作为终端, 而只用于调制解调器。 如果串口线或终端不支持载波检测信号, 则可能必须要使用呼出端口。
如果您已经连接一个终端到第一个串口 (在 MS-DOS® 上是COM1), 则可以使用 /dev/ttyu0 来作为终端。 如果它是在第二个串口 (COM2), 那就是 /dev/ttyu1,等等。
FreeBSD默认支持4个串口。 在MS-DOS下,这些是 COM1, COM2, COM3, 和 COM4。 FreeBSD 目前支持 “dumb” 多口串口卡,如 BocaBoard 1008 和 2016, 以及许多 Digiboard 和 Stallion Technologies 制造的智能多接口卡。 不过, 默认的内核只会寻找标准的COM端口。
要看看您的内核是否支持您的串口,只要在内核启动时查看一下启动信息, 或使用 /sbin/dmesg 命令重新检测内核启动信息。 特别的,寻找以sio字符启动的信息。
提示: 如果想只察看包含 sio 一词的消息, 可以使用下面的命令:
# /sbin/dmesg | grep 'sio'
例如,在一个带有4个串口的系统上,这些是串口特定的内核启动信息:
sio0 at 0x3f8-0x3ff irq 4 on isa sio0: type 16550A sio1 at 0x2f8-0x2ff irq 3 on isa sio1: type 16550A sio2 at 0x3e8-0x3ef irq 5 on isa sio2: type 16550A sio3 at 0x2e8-0x2ef irq 9 on isa sio3: type 16550A
如果内核未能认出所有的串口, 可能需要通过修改 /boot/device.hints 文件来进行一些配置。 此外, 也可以注释或完全删除掉您没有的设备。
请参见 sio(4) 联机手册来了解关于串口, 以及多插口卡配置的进一步细节。 如果您正使用一个在不同版本的 FreeBSD 上的文件请务必小心, 因为设备参数和语法发生了变化。
注意: 这里端口 IO_COM1 代替了 0x3f8,端口 IO_COM2 代替了 0x2f8,端口 IO_COM3 代替了 0x3e8,端口 IO_COM4 代替了 0x2e8,这些都是各自端口相应的端口地址。 中断4,3,5,9都是经常用的中断。也要注意有些正常的串口可能 无法 在一些ISA总线的PC上共享中断 (多插口板卡有板载的电子设备,允许在板上所有 16550A 的设备共享一个或两个中断请求)。
在内核中, 大多数设备都是通过 “设备特殊文件” 来访问的, 这些文件一般位于 /dev 目录中。 sio 是通过 /dev/ttyuN (呼入) 和 /dev/cuauN (呼出) 设备来访问的。 此外, FreeBSD 也提供了初始化设备 (/dev/ttyuN.init 和 /dev/cuauN.init) 以及锁设备 (/dev/ttyuN.lock 和 /dev/cuauN.lock)。 初始化设备用于在打开端口时初始化其通讯参数, 例如使用 RTS/CTS 信号进行流控制的调制解调器的 crtscts。 锁设备则用于在端口上提供一个锁标志, 防止用户或程序改变特定的参数; 请参见 termios(4)、 sio(4), 以及 stty(1) 的联机手册, 以了解关于终端配置、 锁和初始化设备, 以及配置终端参数的详细信息。
ttyuN (或 cuauN) 设备是您将要打开的应用程序的一般设备。 当进程打开某个设备时, 它将有一个终端 I/O 设置的默认配置。 您可以在命令行看看这些设置:
# stty -a -f /dev/ttyu1
当您修改了这个设备的设置,这个设置会生效,除非设备被关闭。
当它被重新打开时,它将回到默认设置。 要修改默认设置,您可以打开和调整 “初始状态”
设备的设置。例如, 要为ttyu5 打开 CLOCAL
模式,8位通讯和默认的 XON/XOFF
流控制, 输入:
# stty -f /dev/ttyu5.init clocal cs8 ixon ixoff
串口设备的系统级初始化, 是由 /etc/rc.d/serial 来控制的。 这个文件会影响串口设备的默认设置。
为了防止应用程序修改某些设置, 应修改 “lock state”(锁状态) 设备。 例如, 要把 ttyu5 的速率锁定为 57600 bps, 输入:
# stty -f /dev/ttyu5.lock 57600
现在,一个打开ttyu5 和设法改变端口速度的应用程序将被固定在57600bit/s。很自然地, 您需要确定初始状态,然后用root帐户锁定状态设备的写入功能。
很显然,您应该只让 root 用户可以初始化或锁定设备的状态。
本文档和其它文档可从这里下载:ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.
如果对于FreeBSD有问题,请先阅读文档,如不能解决再联系<[email protected]>.
关于本文档的问题请发信联系 <[email protected]>.