每秒位-- 数据的传输速度
数据终端设备 -- 如您的计算机
数据通讯设备 -- 如您的modem
用于硬件串行通讯的EIA标准
当讨论通讯数据速度的时候,这节不会使用术语 “baud”。Baud指电气标准传输率,它已经使用了很长时间, 而 “bps” (bits per second) 才是正确使用的术语 (至少它不会打扰那些爱争吵的家伙)。
要连接 modem 或终端到您的 FreeBSD 系统, 您需要有一个串口以及连接到您串行设备所需的线缆。 如果您比较熟悉硬件和它要求的线缆, 则可以跳过这节。
有好几种不同的串行线缆。 两个最普通的类型是 null-modem 线缆和标准RS-232线缆。 您硬件的规格说明会有详细描述。
一根null-modem线缆会直接通过像 “地信号” 这样的信号,而转换其他的信号。 例如, “数据发送” 连到对端的 “数据接收” 引脚上。
如果需要, 您可以自己做一个null-modem的线缆。 下面这个表列出了这个线缆 DB-25 头上的 RS-232C 信号名和引脚标号。
信号 | 引脚 # | 引脚 # | 信号 | |
---|---|---|---|---|
SG | 7 | 连接到 | 7 | SG |
TD | 2 | 连接到 | 3 | RD |
RD | 3 | 连接到 | 2 | TD |
RTS | 4 | 连接到 | 5 | CTS |
CTS | 5 | 连接到 | 4 | RTS |
DTR | 20 | 连接到 | 6 | DSR |
DCD | 8 | 6 | DSR | |
DSR | 6 | 连接到 | 20 | DTR |
Note: 在连接头里面连接好“数据发送就绪” (DSR)和 “载波检测” (DCD) 两个信号,然后连接到对端的 “数据终端就绪” (DTR)。
一个标准的串行线缆会直接通过所有的RS-232C信号。 这是连接一个modem到您的 FreeBSD 系统的线缆类型, 线缆的类型需要针对一些终端。
串行端口是FreeBSD主机与终端传输数据的设备。 这节描述了端口的种类和它们在 FreeBSD 上是如何编址的。
存在好几种端口。 在购买和做线缆之前, 您需要确定它是否适合您机器的终端。
绝大多数的终端有DB25端口。个人计算机, 也包括运行 FreeBSD 的PC机, 通常都会有 DB25 或 DB9 插口。 如果您的计算机有一个多插口的串口卡, 则可以使用RJ-12 或RJ-45端口。
请仔细看看硬件的说明, 此外您也可以通过外观了解是什么插口。
在FreeBSD中,您可以通过 /dev 目录中的一个记录来访问每个串行端口。有两种不同的记录:
呼入端口被命名为/dev/ttydN, 这里 N 是端口号,从零开始。 通常,您使用呼入端口作为终端。呼入端口要求数据线使用载波检测 (DCD) 信号来工作。
呼出端口被命名为 /dev/cuaaN。 您通常不使用呼出端口作为终端, 只使用modem。 如果串行线或终端不支持载波检测数据传输, 您可以使用呼出端口。
如果您已经连接一个终端到第一个串行端口 (在 MS-DOS® 上是COM1), 则可以使用 /dev/ttyd0 来作为终端。 如果它是在第二个串行端口 (COM2), 那就是 /dev/ttyd1,等等。
FreeBSD默认支持4个串行端口。在MS-DOS下,这些是 COM1, COM2, COM3, 和 COM4。FreeBSD当前支持 “dumb” 多插口串行接口卡,如 BocaBoard 1008 和 2016,与许多 Digiboard 和 Stallion Technologies 制造的智能多接口卡一样好。 然而, 默认的内核只会寻找标准的COM端口。
要看看您的内核是否支持您的串口,只要在内核启动时查看一下启动信息, 或使用 /sbin/dmesg 命令重新检测内核启动信息。 特别的,寻找以sio字符启动的信息。
Tip: 提示:要看看带有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
如果您的内核没有认出您的所有串口,您需要为您的系统定制内核。 更多有关配置内核的细节,可以看看第9章Chapter 8。
在您的内核配置文件中相关的设备行是这样的,FreeBSD 4.X:
device sio0 at isa? port port IO_COM1 irq 4 device sio1 at isa? port port IO_COM2 irq 3 device sio2 at isa? port IO_COM3 irq 5 device sio3 at isa? port IO_COM4 irq 9
FreeBSD 5.X:
device sio
您可以注释掉或完全删除您没有的设备。 FreeBSD 5.X 需要修改 /boot/device.hints文件。请看看 sio(4) 的有关如何为您的多插口主板写入配置信息的联机手册。 如果您使用了一个不同版本的 FreeBSD 的配置文件,请小心点, 因为设备的标记在两个版本之间已经改变了。
Note: 这里端口 IO_COM1 代替了 0x3f8,端口 IO_COM2 代替了 0x2f8,端口 IO_COM3 代替了 0x3e8,端口 IO_COM4 代替了 0x2e8,这些都是各自端口相应的端口地址。 中断4,3,5,9都是经常用的中断。也要注意有些正常的串行端口可能 无法 在一些ISA总线的PC上共享中断 (多插口板卡有板载的电子设备,允许在板上所有 16550A 的设备共享一个或两个中断请求)。
内核中的绝大多数设备可以通过 “设备特殊文件” 来访问, 它就在/dev目录下。 sio 设备通过 /dev/ttydN (拨入)和 /dev/cuaaN (拨出) 设备来访问。 FreeBSD 也提供了初始化的设备 (/dev/ttyidN 和 /dev/cuaiaN) 以及锁定的设备 (/dev/ttyldN 和 /dev/cualaN)。 初始化的设备在每次端口被打开时被用来初始化设备通讯端口参数。 例如使用 RTS/CTS 的流控制信号的 crts的调制解调器。 锁定设备用来锁定端口的标记以阻止用户或程序改变某个参数。 参见 termios(4)、sio(4) 以及 stty(1) 联机手册了解更多信息。
Note: 从 FreeBSD 5.0 开始, devfs(5) 文件系统将根据需要创建设备节点。 如果您在运行启用 devfs 的FreeBSD版本, 您就可以跳过这一节。
一个在/dev 目录下的叫做 MAKEDEV 的 shell 脚本管理着设备指定文件。 要使用 MAKEDEV 来建立拨号设备指定文件, 可以使用 COM1: (port 0), cd 进入 /dev, 然后执行命令 MAKEDEV ttyd0。 同样地,要建立拨号设备指定文件以使用 COM2: (port 1), 可以执行 MAKEDEV ttyd1。
MAKEDEV 不仅仅创建 /dev/ttydN 设备指定文件,也创建 /dev/cuaaN, /dev/cuaiaN, /dev/cualaN, /dev/ttyldN, 以及 /dev/ttyidN节点。
建立完新设备指定文件后, 需要检查文件的权限来确定谁可以在这些文件上读写 -- 您可能不想让普通的用户使用您的 modem 吧。 在/dev/cua*文件上的默认权限应该是足够了:
crw-rw---- 1 uucp dialer 28, 129 Feb 15 14:38 /dev/cuaa1 crw-rw---- 1 uucp dialer 28, 161 Feb 15 14:38 /dev/cuaia1 crw-rw---- 1 uucp dialer 28, 193 Feb 15 14:38 /dev/cuala1
这些许可允许用户uucp和在组dialer 上的用户使用呼出设备。
ttydN (或cuaaN) 设备是您将要打开的应用程序的一般设备。 当进程打开某个设备时, 它将有一个终端 I/O 设置的默认配置。 您可以在命令行看看这些设置:
# stty -a -f /dev/ttyd1
当您修改了这个设备的设置,这个设置会生效,除非设备被关闭。 当它被重新打开时,它将回到默认设置。 要修改默认设置,您可以打开和调整 “初始状态” 设备的设置。例如, 要为ttyd5 打开 CLOCAL 模式,8位通讯和默认的 XON/XOFF 流控制, 输入:
# stty -f /dev/ttyid5 clocal cs8 ixon ixoff
串行设备的系统初始化是用/etc/rc.serial文件类控制的。 这个文件会影响串行设备的默认设置。
要防止某个设置被一个应用程序所修改,需要调整 “锁状态”设备。 例如,要锁定ttyd5 的速度为57600 bit/s, 键入:
# stty -f /dev/ttyld5 57600
现在,一个打开ttyd5 和设法改变端口速度的应用程序将被固定在57600bit/s。很自然地, 您需要确定初始状态,然后用root帐户锁定状态设备的写入功能。
很显然,您应该只让 root 用户可以初始化或锁定设备的状态。