Home -- Michael's Blog :: Just Do IT -- Manuals

20.2. 介绍

20.2.1. 术语

bps

每秒位-- 数据的传输速度

DTE

数据终端设备 -- 如你的计算机

DCE

数据通信设备 -- 如你的modem

RS-232

用于硬件串行通信的EIA标准

当讨论通讯数据速度的时候,这节不会使用术语``baud''。Baud指电气标准传输率,它已经使用了很长时间,而``bps''(bits per second)才是正确使用的术语(至少它不会打扰那些爱争吵的家伙)。

20.2.2. 线缆和端口

要连接一个modem或终端到你的FreeBSD系统,你需要有一个串行端口,和连接到你串行设备的适当的线缆。如果你比较熟悉硬件和它要求的线缆,你可以跳过这节。

20.2.2.1. 线缆

有好几种不同的串行线缆。两个最普通的类型是null-modem线缆和标准RS-232线缆。你硬件的规格说明会有详细描述。

20.2.2.1.1. Null-modem线缆

一根null-modem线缆会直接通过像``地信号''这样的信号,而转换其他的信号。 例如 , ``数据发送''连到对端的 ``数据接收''。

如果你想做这样的线缆,你可以自己做一个null-modem的线缆。 下面这个表列出了这个线缆DB-25头上的RS-232C信号名和针脚号码。

Signal Pin #   Pin # Signal
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

注: 在连接头里面连接好``数据发送准备好'' (DSR)和 ``载波检测'' (DCD) 两个信号,然后连接到对端的 ``数据终端准备好'' (DTR) 。

20.2.2.1.2. 标准RS-232C线缆

一个标准的串行线缆会直接通过所有的RS-232C信号。这是连接一个modem到你的FreeBSD系统的线缆类型,线缆的类型需要针对一些终端。

20.2.2.2. 端口

串行端口是FreeBSD主机与终端传输数据的设备。这节描述了端口的种类和他们在FreeBSD上是如何编址的。

20.2.2.2.1. 端口的种类

有好几种端口存在。你在购买和做线缆之前,你需要确定它是否适合你机器的终端。

绝大多数的终端有DB25端口。个人计算机包括运行FreeBSD的PC机,有DB25或DB9端口。如果你的计算机有一个多端口的串行卡,你可以使用RJ-12 或RJ-45端口。

请仔细看看硬件的说明。

20.2.2.2.2. 端口名称Port Names

在FreeBSD中,你可以通过/dev目录中的一个记录来访问每个串行端口。有两种不同的记录:

  • 呼入端口被命名为/dev/ttydN,这儿N是端口号,从零开始。通常,你使用呼入端口作为终端。呼入端口要求数据线使用载波检测(DCD)信号来工作。

  • 呼出端口被命名为/dev/cuaaN。你通常不使用呼出端口作为终端,只使用modem。如果串行线或终端不支持载波检测数据传输,你可以使用呼出端口。

如果你已经连接一个终端到第一个串行端口(在MS-DOS®上是COM1),那你可以使用/dev/ttyd0来作为终端。如果它是在第二个串行端口(COM2),那就是/dev/ttyd1,等等。

20.2.3. 内核配置

FreeBSD默认支持4个串行端口。在MS-DOS下,这些是 COM1COM2COM3, 和 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

如果你的内核没有认出你的所有串口,你需要为你的系统定制一个内核。更多有关配置内核的细节,可以看看第9章第 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的配置文件,请小心点,因为设备的标记在两个版本之间已经改变了。

注: 这里端口IO_COM1代替了0x3f8,端口IO_COM2代替了0x2f8,端口IO_COM3代替了0x3e8,端口IO_COM4代替了0x2e8,这些都是各自端口相应的端口地址。中断4,3,5,9都是经常用的中断。也要注意有些正常的串行端口可能无法在一些ISA总线的PC上共享中断(多端口板卡有板载的电子设备,允许在板上所有16550A的设备共享一个或两个中断请求)。

20.2.4. 设备指定文件

内核中的绝大多数设备可以通过``device special files''来访问,它就在/dev目录下。sio设备通过/dev/ttydN(拨入)和/dev/cuaaN(拨出)设备来访问。FreeBSD也提供了初始化的设备(/dev/ttyidN/dev/cuaiaN)和锁定的设备(/dev/ttyldN/dev/cualaN)。初始化的设备在每次端口被打开时被用来初始化设备通信端口参数。例如使用RTS/CTS的流控制信号的crts的调制解调器。锁定设备被用来锁定端口的标记以阻止用户或程序改变某个参数。看看 termios(4), sio(4), 和 stty(1) 的联机手册了解更多信息。

20.2.4.1. 编译设备指定文件

注: FreeBSD5.0已把自动创建设备接点的devfs文件系统作为是必需的。如果你在运行启用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上的用户使用呼出设备。

20.2.5. 串行端口配置

ttydN(或cuaaN)设备是你将要打开的应用程序的正常设备。当一个进程打开某个设备时,它将有一个终端I/O设置的默认配置。你可以在命令行看看这些设置:

# stty -a -f /dev/ttyd1

当你修改了这个设备的设置,这个设置会生效,除非设备被关闭。当它被重新打开时,它将回到默认设置。要修改默认设置,你可以打开和调整``initial state''设备的设置。例如,要为ttyd5打开CLOCAL 模式,8位通信和默认的 XON/XOFF 流控制,键入:

# stty -f /dev/ttyid5 clocal cs8 ixon ixoff

串行设备的系统初始化是用/etc/rc.serial文件类控制的。这个文件会影响串行设备的默认设置。

要防止某个设置被一个应用程序所修改,需要调整 ``lock state''设备。例如,要锁定ttyd5 的速度为57600 bit/s,键入:

# stty -f /dev/ttyld5 57600

现在,一个打开ttyd5 和设法改变端口速度的应用程序将被固定在57600bit/s。很自然地,你需要确定初始状态,然后只用root帐户锁定状态设备的写入功能。

很显然,你应该只让 root 用户可以初始化或锁定设备的状态。

Michael's Blog :: Just Do IT -- manuals