
文章阅读
FreeBSD handbook中文版 15 串口通讯---流行第一线
作者:佚名 | 来源:流行第一线 | 时间:2008-04-21 | 阅读权限:游客身份 | 会员币:0
目录
15串口通讯
15.1概要
15.2介绍
15.3终端
15.4拨入服务
15.5拨出服务
15.6设置串行控制台
=============================================================
第15章串口通讯
=============================================================
(翻译中出现的任何问题或错误,请广大读者及时反馈给我:freebsdhandbook@163.com)
15.1概要
UNIX都是支持串口通讯的。事实上,早期的UNIX系统就是利用串行线来输入和输出数
据的。那时通常的“terminal”包含了一个每秒10个字符的串行打印机和键盘时,现在这
些事情已经有所变化了。这章将介绍一些利用FreeBSD进行串行通讯的方法。
读完这章,你将了解到:
.如何通过终端连接到FreeBSD系统。
.如何使用modem拨号到远程域。
.如何允许远程用户通过modem登陆到你的系统。
.如何从串行控制台引导你的系统。
阅读这章之前,你应当了解:
.如何配置和安装一个新的内核。(第9章)
.理解unix的权限和进程。(第3章)
.通过网络设备访问技术参考手册。
15.2介绍
15.2.1术语
bps
每秒比特---数据的传输速率
DTE
数据终端设备---如你的电脑
DCE
第1页FreeBSD使用手册
数据通讯设备---如你的modem
RS-232
用于硬件串行通讯的EIA标准
15.2.2线缆和端口
要从你的FreeBSD系统连接到一个modem或终端,你需要有一个串行端口,和连接到你
串行设备的适当的线缆。如果你比较熟悉硬件和线缆,你可以跳过这节。
15.2.2.1线缆
有好几种线缆。两个最普通的类型是null-modem线缆和标准RS-232线缆。你的硬件的
规格说明会有详细描述。
15.2.2.1.1Null-modem线缆
一个null-modem线缆会直接通过象signalground这样的信号。如果你想自己选择线
缆,你可以做一个使用null-modem的线缆。这个线缆在一个DB-25连接器上会显示RS-232C
信号名和pin号码。
Pin#SignalSignalPin#
TxD2连接到3RxD
RxD3连接到2TxD
DTR20连接到6DSR
DSR6连接到20DTR
SG7连接到7SG
DCD8连接到4RTS
RTS45CTS
CTS5连接到8DCD
15.2.2.1.2标准RS-232C线缆
一个标准的串行线缆会直接通过所有的RS-232C信号。这是连接一个modem到你的
FreeBSD系统的线缆类型,线缆的类型需要针对一些终端。
第2页FreeBSD使用手册
15.2.2.2端口
串行端口是FreeBSD主机与终端传输数据的设备。这节描述了端口的种类和他们在
FreeBSD上的地址。
15.2.2.2.1几种端口
有好几种端口存在。你在购买和做线缆之前,你需要确定它是否适合你机器的接线端。
绝大多数的接线端有DB25端口。个人电脑包括运行FreeBSD的PC机,有DB25或DB9
端口。如果你有一个多端口的串行卡,你可以使用RJ-12或RJ-45端口。请仔细看看硬件
的说明。
15.2.2.2.2端口名称
在FreeBSD中,你可以通过/dev目录中的一个记录来访问每个串行端口。有两种不同
的记录:
.呼入端口被命名为/dev/ttydN,这儿N是端口号,从零开始。通常,你使用呼入端
口作为接线端。呼入端口要求数据线使用载波检测信号来工作。
.呼出端口被命名为/dev/cuaaN。你通常不使用呼出端口作为接线端,只使用modem。
如果串行线或接线端不支持载波检测数据传输,你可以使用呼出端口。
如果你已经连接到了第一个串行端口,那你需要使用/dev/ttyd0来应用接线端。如果它
是在第二个串行口,那就是/dev/ttyd1,等等。
15.2.3内核配置
FreeBSD默认支持4个串行端口。在MS-DOS下,这些是COM1:,COM2:,COM3:和COM4:。
FreeBSD当前支持dumb多端口串行接口卡,如BocaBoard1008and2016,就象许多Digiboard
和StallionTechnologies制造的智能多接口卡。默认的内核只会寻找标准的COM接口。
要看看你的内核是否支持你的串口,需要在内核启动时查看一些信息,或使用
/sbin/dmesg命令重新播出内核启动信息。特别的,寻找以sio为特征的启动信息。
提示:要看看带有sio的信息,可以使用下面的命令:
#/sbin/dmesg|grep'sio'
第3页FreeBSD使用手册
例如,在一个带有4个串行口的系统上,这些是串行口特定的内核启动信息:
sio0at0x3f8-0x3ffirq4onisa
sio0:type16550A
sio1at0x2f8-0x2ffirq3onisa
sio1:type16550A
sio2at0x3e8-0x3efirq5onisa
sio2:type16550A
sio3at0x2e8-0x2efirq9onisa
sio3:type16550A
如果你的内核没有认出你的所有串行口,你需要为你的系统定制一个内核。更多有关配
置内核的细节,可以看看第9章。
在你的内核配置文件中相关的设备行是这样的:
devicesio0atisa?port"IO_COM1"ttyirq4vectorsiointr
devicesio1atisa?port"IO_COM2"ttyirq3vectorsiointr
devicesio2atisa?port"IO_COM3"ttyirq5vectorsiointr
devicesio3atisa?port"IO_COM4"ttyirq9vectorsiointr
你可以注释掉或完全删除你没有的设备。请看看sio的有关如何为你的多端口主板写入
配置信息的联机手册。如果你使用了一个不同版本的FreeBSD的配置文件,请小心点,因为
设备的标记在两个版本之间已经改变了。
15.2.4设备指定文件
内核中的绝大多数设备可以通过devicespecialfiles来访问,它就在/dev目录下。
Sio设备通过/dev/ttydN(dial-in)和/dev/cuaaN(call-out)来访问。FreeBSD也提供了初
始化的设备(/dev/ttyidNand/dev/cuai0N)和锁定的设备(/dev/ttyldNand
第4页FreeBSD使用手册
/dev/cual0N)。初始化的设备在每次端口被打开时被用来初始化设备通讯端口参数。例如使
用CTS/RTS的流控制信号的crtscts。锁定设备被用来锁定端口的标记以阻止用户或程序改
变某个参数;看看termios,sio,andstty的联机手册了解更多信息。
15.2.4.1编译设备指定文件
注意:FreeBSD5.0已把自动创建设备接点的devfs文件系统作为是必需的。如果你在
运行启用devfs的FreeBSD版本,你就可以跳过这一节。
一个在/dev目录下的叫做MAKEDEV的shell脚本管理着设备的特殊文件。要使用
MAKEDEV来编译拨号设备,以使用COM1:(port0),cd进入/dev,然后执行命令MAKEDEV
ttyd0。同样地,要编译拨号设备以使用COM2:(port1),可以执行MAKEDEVttyd1。MAKEDEV
不仅仅创建/dev/ttydN设备特殊文件,也创建/dev/cuaaN,/dev/cuaiaN,/dev/cualaN,
/dev/ttyldN,和/dev/ttyidN节点。
编译完支持新设备的特殊文件之后,需要检查文件的权限来确定谁可以在这些文件上读
写—你可能不想让普通的用户来使用你的modem吧。默认的在/dev/cua*上的权限应当比较
充分:
crw-rw----1uucpdialer28,129Feb1514:38/dev/cuaa1
crw-rw----1uucpdialer28,161Feb1514:38/dev/cuaia1
crw-rw----1uucpdialer28,193Feb1514:38/dev/cuala1
这些许可允许用户uucp和在组拨号上的用户使用呼出设备。
15.2.5串行端口配置
ttydN(或cuaaN)设备是你要打开你的应用程序的规则设备。当一个进程打开某个设备,
它将有一个终端I/O的默认设置。你可以在命令行看这些设置:
#stty-a-f/dev/ttyd1
当你修改了这个设备的设置,这个设置会生效,除非设备被关闭。当它被重新打开时,
它将回到默认设置。要修改默认设置,你可以打开和调整initialstate设备的设置。例如,
要打开CLOCAL模式,8位通讯,默认的XON/XOFF流控制,键入:
第5页FreeBSD使用手册
#stty-f/dev/ttyid5clocalcs8ixonixoff
系统的串行设备的初试化可以在/etc/rc.serial中被控制。这个文件影响了串行设备
的默认设置。
要防止某个设置被一个应用程序所修改,需要调整lockstate设备。例如,要锁定ttyd5
的速度为57600bps,键入:
#stty-f/dev/ttyld557600
现在,一个打开ttyd5和设法改变端口速度的应用程序将被固定在57600bps。很自然
地,你需要确定初始情形,和锁定设备的写入状态,只有root才能写。
15.3终端
当你不在电脑控制台或不在一个连接的网络上时,终端提供了一个方便和低成本的访问
你的FreeBSD系统的方法。这节描述了如何在FreeBSD上使用终端。
15.3.1终端的用法和类型
早期的UNIX系统没有控制台。人们通过将终端连接到电脑的串行口来登陆和使用程序。
它很象用一个modem和一些终端软件来拨号进入一个远程的系统只执行文本的工作。
今天的PC已经可以使用高质量的图形了,但与今天的其他UNIX操作系统一样,建立一
个登陆的能力仍然存在;通过使用一个终端连接到一个没有使用的串行口,你就能登陆和运
行任何文本程序或在XWindowSystem中运行一个xterm窗口程序。
对于商业用户,你可以配上任何终端到FreeBSD系统,然后把它们放在员工的桌面上。
对于一个家庭用户,可以使用一台比较老的IBMPC或Macintosh运行一个终端连接到一台
运行FreeBSD的高性能机器上。
对于FreeBSD,有三种终端:
.Dumb终端
.充当终端的PCs
.X终端
第6页FreeBSD使用手册
下面的小节将描述每一种。
15.3.1.1Dumb终端
Dumb终端可以适应好几种硬件,让你通过串行线连接到电脑。他们被叫做dumb是因为
他们只能够用来显示、发送和接受文本。你不能在它上面运行任何程序。
有好几百种dumb终端被制造,包括DigitalEquipmentCorporation'sVT-100和
Wyse'sWY-75。只有几种可以在FreeBSD上工作。一些高端的终端可以显示图形,但只有某
些软件包可以使用这些高级特性。
15.3.1.2充当终端的PCs
如果一个dumb终端有足够的能力来显示、发送和接受文本,那这些个人电脑可以作为
一个dumb终端。你所需要的只是适当的线缆和一些终端模拟软件。
这样一个配置被广泛运用于家庭。例如,如果你的妻子忙于在你的FreeBSD系统控制台
上工作,你也可以从一台低档的个人电脑登陆到FreeBSD系统执行一些文本的工作。
15.3.1.3X终端
X终端是最复杂的终端系统。它们通常需要使用以太网来连接。他们能显示任何X应用
程序。我们介绍X终端只是为了感兴趣。然而,这章不会涉及X终端的安装、配置或使用。
15.3.2配置
这节描述了你在一个终端上启用一个登陆活动,需要你在FreeBSD系统上配置些什么。
假设你已经配置好了你的内核来支持串行端口,你就可以连接了。
回想起第7章,init进程依赖于系统启动时所有的处理控制和初始化。通过init来执
行的一些任务将先读取/etc/ttys文件,然后在可用的终端上启用一个getty进程。getty
进程可用来阅读一个登陆名和启动登陆程序。
然而,要配置你FreeBSD系统的终端,你需要以root来执行下面的步骤:
1.如果它不在那儿,你需要为串行端口在/dev目录下添加一行记录到/etc/ttys。
2.指定/usr/libexec/getty在端口上运行,然后从/etc/gettytab文件指定适当的
getty类型。
第7页FreeBSD使用手册
3.指定默认的终端类型。
4.设置端口为on。
5.确定端口是否为secure。
6.迫使init重新读取/etc/ttys文件。
作为可选的步骤,你可以通过在/etc/gettytab中建立一个记录,在第2步创建一个定
制的getty类型来使用。这章不会介绍如何做;你可以看看gettytab和getty的联机手册
了解更多信息。
15.3.2.1添加一个记录到/etc/ttys
/etc/ttys文件列出了你FreeBSD系统上允许登陆的所有端口。例如,第一个虚拟控制
台ttyv0在这个文件中有一个记录。你可以使用这个记录登陆进控制台。这个文件也包含其
他虚拟控制台的记录、串行口、和伪-ttys。对于一个硬连线的终端,只要列出串行端口的
/dev记录。
默认的FreeBSD安装包括了支持最初四个串行口ttyd0到ttyd3的/etc/ttys文件。如
果你从那些端口来使用终端,你不需要添加另一个记录。
例15-1.添加终端记录到/etc/ttys
建议我们连接两个终端给系统:一个Wyse-50和一个老的运行Procomm终端软件模拟一
个VT-100终端的286IBMPC。在/etc/ttys文件中的相应的记录是这样的:
"/usr/libexec/gettystd.38400"wy50oninsecurettyd1
ttyd5"/usr/libexec/gettystd.19200"vt100oninsecure
,第一部分指定了终端特殊文件的名称,它可以在/dev中找到。
,第二部分是在这行执行的命令,通常是getty。Getty初始化然后打开一行,设置
速度,用户名的命令和执行登陆程序。
getty程序在它的命令行接收一个参数,getty类型。一个getty类型会在终端行描述
一个特征,象bpsrate和parity。getty程序从/etc/gettytab文件读取这些字符。文件
/etc/gettytab包含了许多老的和新的终端线的记录。在很多例子中,启动文本std的记录
第8页FreeBSD使用手册
将用硬连线终端来工作。这些记录忽略了奇偶性。这是一个从110到115200的每bps的std
记录。当然,你可以添加你自己的记录到这个文件。Gettytab的联机手册提供了更多的信
息。
当在/etc/ttys中设置getty类型的时候,确信在终端上的通讯设置匹配。
在我们的例子中,Wyse-50不使用奇偶性,用38400bps来连接。286PC不使用奇偶性,
用19200bps来连接。
,第三部分是通常连接到那个tty线的终端类型。对于拨号端口,不知名的或拨出的
通常被用在这个地方。对于硬连线的终端,终端类型不会改变,所以你可以从termcap数据
库文件中放置一个真正的终端类型。
在我们的例子中,Wyse-50使用真正的终端类型,而运行Procomm的286PC将被设置成
在VT-100上的模拟。
,如果端口被启用,可以指定第四个部分。在第二部分,把它放在这儿将执行初始化
进程来启动程序getty。如果你在这部分推迟,将没有getty,在端口上因此就没有登陆。
,最后部分被用来指定端口是否安全。标记一个安全的端口意味着你信任它允许用root
帐户从哪个端口登陆。不安全的端口不允许root登陆。在一个不安全的端口上,用户必须
用无特权的帐户登陆,然后使用su或一个相似的机制来获得超级用户的权限。
15.3.2.2重新读取/etc/ttys来强制初始化
对/etc/ttys文件做一个必要的修改后,你必须发送一个SIGHUP信号给初始化进程来
迫使它重新读取它的配置文件,例如:
#kill-HUP1
如果能够被正确设置,所有的线缆都是适当的,终端将可以启用了,然后一个getty
进程将在每个终端被运行,你将在你的终端上看到登陆命令行。
15.3.3你的连接可能出现的问题
即使你小心翼翼地注意细节,你仍然可能会在设置终端时出错。这儿有一个有关问题的
现象和解决办法的列表:
第9页FreeBSD使用手册
1,没有登陆命令出现:
确定终端被嵌入和打开了。如果把一台个人电脑充当一个终端,确信终端模拟软件运行
在正确的串口上。
确信线缆被稳固地连接在终端和FreeBSD电脑上。确信用了正确的电缆。
确定终端和FreeBSD的传输速率和奇偶设置已经一致了。如果你有一个图象显示终端,
确信对比度已经调节好了。如果它是一个可打印的终端,确信纸张和墨水已经准备好了。
确定一个getty进程正在运行和服务终端。例如,可以用ps命令来得到运行getty程
序的列表,键入:
#ps-axww|grepgetty
你将看到一个终端的记录。例如,下面的显示表明一个getty正在第二个串行端口ttyd1
运行,正在/etc/gettytab中使用std.38400的记录:
22189d1Is+0:00.03/usr/libexec/gettystd.38400ttyd1
如果没有getty进程运行,确信你已经在/etc/ttys中启用了端口。在修改完ttys文
件后,记得运行kill-HUP1。
2,出现一个“垃圾”而不是一个登陆命令行
确信终端和FreeBSD使用相同的bps传输率和奇偶校验设置。检查一下getty进程确信
当前使用的正确的getty类型。如果没有,编辑/etc/ttys然后运行kill-HUP1。
3,当键入密码时,字符两个两个出现
将终端(或终端模拟软件)从“halfduplex”或“localecho”换成“fullduplex”。
15.4拨入服务
配置FreeBSD系统来用拨入服务与连接到终端是非常相似的,除非你正在使用modem
来拨号。
15.4.1外置和内置modem
外置modem看起来很容易拨号。因为,外置modem可以通过储存在非易失性的RAM中的
第10页FreeBSD使用手册
参数来配置,他们通常提供指示器来显示重要的RS-232信号的状态。不停闪光的信号灯能
给用户留下比较深刻的印象,而且指示器也可以用来查看modem是否正常地工作。
内置modem通常缺乏非易失性的RAM,所以对它们的配置可能被限制在通过DIP开关来
设置。如果你的内置modem有指示灯,你也很难看得到。
15.4.1.1Modems和线缆
如果你使用一个外置的modem,那你将需要适当的电缆线。一个标准的串行线应当足够
长以至普通的信号能够连接上:
.TransmittedData(SD)
.ReceivedData(RD)
.RequesttoSend(RTS)
.CleartoSend(CTS)
.DataSetReady(DSR)
.DataTerminalReady(DTR)
.CarrierDetect(CD)
.SignalGround(SG)
FreeBSD需要对速度超过2400bps的RTS和CTS信号进行流控制,当一个呼叫被回复或
线路被挂起的时候,CD信号就会被侦测到,一个任务完成之后,DTR信号就会刷新modem。
一些线缆不需要任何信号就可以连接,所以如果你有问题,当线路被挂起时,一个登陆任务
就会丢失,你可能会在线缆上有问题。
象其它unix类的操作系统一样,FreeBSD使用硬件信号来寻找出一个呼叫什么时候会
回复或一个线路会被挂起。FreeBSD避免发送命令给modem或监视modem的状况。如果你熟
悉连接modem到BBS,这可能是很难的。
15.4.2串行接口的考虑
FreeBSD支持以NS8250-,NS16450-,NS16550-和NS16550A为基础的EIARS-232C通讯
接口。8250和16450设备有单字符缓冲。16550设备提供了一个16个字符的缓冲,可以提
第11页FreeBSD使用手册
高更多的系统性能。因为单字符缓冲设备比16个字符的缓冲需要更多的系统资源来工作,
所以基于16550A的接口卡可能更好。如果系统没有活动的串行口,或有一个巨大的负载,
16字符缓冲的卡对于低错误率的通讯来说更好。
15.4.3快速预览
对于终端,init会在每个配置串行口上为每个拨入连接产生一个getty进程。例如,
如果一个modem被附带在/dev/ttyd0中,用命令psax可以显示下面这些:
4850??I0:00.09/usr/libexec/gettyV19200ttyd0
当一个用户拨上modem,并使用它进行连接时,CD线就会被modem认出。内核注意到载
波信号已经被检测到,需要完成getty的端口的打开。Getty发送一个登陆:在指定的初始
线速度上的命令行。Getty会检查合法的字符是否被接收,在一个典型的配置中,如果发现
垃圾,getty就会设法调节线速度,直到它接收到合理的字符。
用户在键入他/她的登陆名称后,getty执行/usr/bin/login,这会要求用户输入密码
来完成登陆,然后启动用户的shell。
15.4.4配置文件
在/etc目录中,有三个你将需要编辑的系统配置文件,来允许拨号访问到你的FreeBSD
系统。第一,/etc/gettytab包含了针对/usr/libexec/getty守护程序的配置信息。第二,
保存信息来告诉/sbin/init什么tty设备将有运行在他们系统上的getty进程。最后,你
可以把端口初试化命令放在/etc/rc.serial脚本中。
在unix上,关于拨号modem的想法主要有两种。一种是把本地接口配置成一个固定速
率,以至一个远程用户拨号进入时都保持一个固定速率。这样配置的好处是远程用户总是可
以立即看到一个系统的登陆界面。这种下降趋势是系统不知道一个用户真正的数据速率是多
少,所以象eamcs全屏程序将不会调接屏幕刷新来确保对比较慢的连接有比较好的回应。
其他的配置RS-232modem的方法是随着远程用户连接的速度的变化而变化。例如,连
接到modem的V.32bis(14.4Kbps)连接可以使modem在19.2Kbps上运行RS-232接口,
而连接使得RS-232接口运行在2400bps上。
第12页FreeBSD使用手册
因为getty不了解任何特殊的modem的连接速度报告,getty会给出一个登陆:在一个
初始速度和检测字符的信息会作出回应。如果用户看到垃圾,假定他们知道他们键入了
enter键,知道他看到了一个熟悉的命令行界面。
如果数据速率不相匹配,getty会把用户键入的任何东西都看作“junk”,设法回到下
面的速度,然后给出登陆:命令行界面。很明显,这个登陆顺序看起来不如locked-speed
的方法,但一个连接在低速率上的用户将更好地交互接收来自全屏幕程序的回应。
15.4.4.1/etc/gettytab
/etc/gettytab是一个用来配置getty信息的termcap风格的文件。请看看gettytab
的联机手册了解完整的文件格式和功能列表。
15.4.4.1.1锁定速率的配置
如果你把你的modem的数据通讯率锁定在一个特殊的速率上,你不需要对
/etc/gettytab文件做任何变化。
15.4.4.1.2匹配速率的配置
你将需要在/etc/gettytab中设置一个记录来给出getty的你希望用到你的modem上的
有关速度的信息。如果你有一个2400bps的modem,你可以使用已存在的D2400的记录。
#
#Fastdialupterminals,2400/1200/300rotary(canstarteitherway)
#
D2400|d2400|Fast-Dial-2400:\
:nx=D1200:tc=2400-baud:
3|D1200|Fast-Dial-1200:\
:nx=D300:tc=1200-baud:
5|D300|Fast-Dial-300:\
:nx=D2400:tc=300-baud:
第13页FreeBSD使用手册
如果你有一个更高速度的modem,你必须在/etc/gettytab中添加一个记录;这儿是一
个你可以使用的一个最高19.2Kbps的接口用在14.4Kbps的modem上的记录:
#
#AdditionsforaV.32bisModem
#
um|V300|HighSpeedModemat300,8-bit:\
:nx=V19200:tc=std.300:
un|V1200|HighSpeedModemat1200,8-bit:\
:nx=V300:tc=std.1200:
uo|V2400|HighSpeedModemat2400,8-bit:\
:nx=V1200:tc=std.2400:
up|V9600|HighSpeedModemat9600,8-bit:\
:nx=V2400:tc=std.9600:
uq|V19200|HighSpeedModemat19200,8-bit:\
:nx=V9600:tc=std.19200:
上面使用19.2Kbps的连接速度的例子,也可以使用9600bps(forV.32),2400bps,
1200bps,300bps,直到19.2Kbps。通讯率的调节使用nx=(“nexttable”)来实现。每
条线使用一个tc=(“tablecontinuation”)的记录来加速对于一个特殊数据率的标准设
置。
如果你有一个28.8Kbps的modem,或你想使用它的14.4Kbps,你需要使用一个更高的
超过19.2Kbps的通讯速率的modem。这是一个启动57.6Kbps的gettytab记录的例子:
#
#AdditionsforaV.32bisorV.34Modem
第14页FreeBSD使用手册
#Startingat57.6Kbps
#
vm|VH300|VeryHighSpeedModemat300,8-bit:\
:nx=VH57600:tc=std.300:
vn|VH1200|VeryHighSpeedModemat1200,8-bit:\
:nx=VH300:tc=std.1200:
vo|VH2400|VeryHighSpeedModemat2400,8-bit:\
:nx=VH1200:tc=std.2400:
vp|VH9600|VeryHighSpeedModemat9600,8-bit:\
:nx=VH2400:tc=std.9600:
vq|VH57600|VeryHighSpeedModemat57600,8-bit:\
:nx=VH9600:tc=std.57600:
如果你有一个低速的CPU或一个庞大负载的系统,你没有16550A的串行端口,你可能
会在57.6Kbps上得到sio错误。
15.4.4.2/etc/ttys
/etc/ttys文件的配置在例15-1中介绍过。配置modem是相似的,但我们必须指定一
个不同的终端类型。锁定速度和匹配速度配置的通用格式是:
ttyd0"/usr/libexec/gettyxxx"dialupon
上面的第一条是这个记录的设备特定文件—ttyd0意味着/dev/ttyd0是这个getty将被
监视的文件。第二条"/usr/libexec/gettyxxx"是将运行在设备上的处理init。第三条,
dialup,是默认的终端类型。第四个参数,on,指出了线路是可操作的init。也可能会有第
五个参数,secure,但它将只被用作拥有物理安全的终端(如系统终端)。
第15页FreeBSD使用手册
默认的终端类型可以依赖于本地参考。拨号是传统的默认的终端类型,以至用户可以定
制他们的登陆脚本来注意终端什么时候拨号,和自动调节他们的终端类型。然而,作者发现
它很容易在他的站点上指定vt102作为默认的终端类型,既然用户刚才在他们的远程系统上
使用的是VT102模拟器。
你对/etc/ttys作修改之后,你可以发送init进程给一个HUP信号来重读文件。你可
以使用下面的命令来发送信号。:
#kill-HUP1
如果这是你的第一次设置系统,你可能要在发信号init之前等一下,等到你的modem
被正确地配置并连接好。
15.4.4.2.1锁定速率的配置
对于一个锁定速率的配置,你的ttys记录必须有一个为getty提供固定速率的记录。
对于一个速度被锁定在19.2kbps的modem,ttys记录是这样的:
ttyd0"/usr/libexec/gettystd.19200"dialupon
如果你的modem被锁定在一个不同的数据速率,为std.speed使用适当的速率来代替
std.19200。确信你使用了一个在/etc/gettytab中列出的正确的类型。
15.4.4.2.2匹配速度的配置
在一个匹配速率的配置中,你的ttys记录需要参考在/etc/gettytab中适当的起始
auto-baud记录。例如,如果你为一个以19.2Kbps开始的可匹配速度的modem添加上面建
议的记录的话,你的ttys记录可能是这样的:
ttyd0"/usr/libexec/gettyV19200"dialupon
15.4.4.3/etc/rc.serial
高速modem,象V.32,V.32bis,和V.34modems,需要使用硬件(RTS/CTS)流控制。你
可以在/etc/rc.serial中添加stty命令来设置硬件流控制标记。
例如,在拨入和拨出初始设备的#1's(COM2:)串行端口上设置termios标记crtscts,
下面这些行会被添加到/etc/rc.serial中:
第16页FreeBSD使用手册
#Serialportinitialconfiguration
stty-f/dev/ttyid1crtscts
stty-f/dev/cuai01crtscts
15.4.5Modem设置
如果你有一个modem,它的参数能被存储在非易失性的RAM中,你将必须使用一个终端
程序来设置参数。使用同样的通讯速率来连接modem作为初始速度getty将使用和配置
modem的非易失性RAM来匹配这些要求:
.CDassertedwhenconnected
.DTRassertedforoperation;droppingDTRhangsuplineandresetsmodem
.CTStransmitteddataflowcontrol
.DisableXON/XOFFflowcontrol
.RTSreceiveddataflowcontrol
.Quietmode(noresultcodes)
.Nocommandecho
请读读你的modem的文档找到你需要用什么命令和DIP接口设置。例如,要在一个
USRoboticsSportster14,400的外置modem上设置上面的参数,你可以用下面这些命令:
ATZ
AT&C1&D2&H1&I0&R2&W
你也可能想要在modem上寻找机会调节这个设置,例如它是否使用V.42bis和MNP5压
缩。USRSportster14,400外置modem也有一些用来设置的DIP开关,也许你可以使用这
些设置作为一个例子:
.Switch1:UP--DTRNormal
.Switch2:Donotcare(VerbalResultCodes/NumericResultCodes)
.Switch3:UP--SuppressResultCodes
第17页FreeBSD使用手册
.Switch4:DOWN--Noecho,offlinecommands
.Switch5:UP--AutoAnswer
.Switch6:UP--CarrierDetectNormal
.Switch7:UP--LoadNVRAMDefaults
.Switch8:Donotcare(SmartMode/DumbMode)
15.4.5.1锁定速率的配置
对于一个锁定速率的配置,你需要配置modem来获得一个不依赖于通讯率的稳定的
modem-to-computer的数据率。在一个USRSportster14,400外置modem上,这些命令将
锁定modem-to-computer的数据率:
ATZ
AT&B1&W
15.4.5.2匹配速率的配置
对于一个变速的配置,你需要配置你的modem来调节它的串行端口数据率来匹配接收的
数据率。在一个USRSportster14,400的外置modem上,这些命令将锁定modem的错误修
正数据率适合命令要求的速度,但允许串行端口速率适应non-error-corrected的连接:
ATZ
AT&B2&W
15.4.5.3检查modem的配置
大多数高速的modem提供了用来查看当前操作参数的命令。在USRSportster14,400
外置modem上,命令ATI5显示了存储在非易失性RAM中的设置。要看看正确的modem操作
参数,可以使用命令ATZ然后是ATI4。
如果你有一个不同牌子的modem,检查modem的使用手册看看如何双重检查你的modem
的配置参数。
15.4.6问题解答
第18页FreeBSD使用手册
这儿是几个检查拨号modem的步骤。
15.4.6.1检查FreeBSD系统
把你的modem连接到FreeBSD系统,启动系统,然后,如果你的modem有一个指示灯,
当登陆时看看modem的DTR指示灯是否亮:会在系统控制台出现命令行---如果它亮,意味
着FreeBSD已经在适当的通讯端口启动了一个getty进程,等待modem接受一个呼叫。
如果DTR指示灯不亮,通过控制台登陆到FreeBSD系统,然后执行一个psax来看
FreeBSD是否正在正确的端口运行一个getty进程。你将在进程显示中看到象这样的一行:
114??I0:00.10/usr/libexec/gettyV19200ttyd0
115??I0:00.10/usr/libexec/gettyV19200ttyd1
如果你看到这样的:
114d0I0:00.10/usr/libexec/gettyV19200ttyd0
说明,modem不接受呼叫,这意味着getty已经在通讯端口打开了。这可以指出线缆有
问题或modem错误配置,因为getty不能打开通讯端口。
如果你没有看到任何getty进程等待打开渴望的ttydN端口,在/etc/ttys中双击你的
记录看看那儿是否有错误。另外,检查日志文件/var/log/messages看看是否有一些来自
init或getty的关于一些问题的日志信息。如果有任何信息,仔细检查配置文件/etc/ttys
和/etc/gettytab,还有适当的设备文件/dev/ttydN,是否有错误,丢失记录,或丢失了设
备指定文件。
15.4.6.2尝试接入
设法拨入系统;确信使用8位,没有奇偶检验,在远程系统上的1阻止位。如果你不能
立刻得到一个命令行,试试每隔一秒键入enter。如果你仍没有看到一个登陆:设法发送一
个BREAK。如果你正使用一个高速的modem来拨号,请在锁定拨号modem的接口速度后再试
试。
如果你不能得到一个登陆:prompt,再检查一下/etc/gettytab,重复检查:
.在/etc/ttys中指定的初始可用的名称与/etc/gettytab中的一个可用的相匹配。
第19页FreeBSD使用手册
.每个nx=记录与另一个gettytab可用名称匹配。
.每个tc=记录与另一个gettytab可用名称相匹配。
如果你拨号但FreeBSD系统上的modem没有回应,确信modem能回应电话。如果modem
看起来配置正确了,通过检查modem的指示灯来确认DTR线连接正确。
如果你做了好几次,它仍然无法工作,打断一会,待会再试试。如果还不能工作,也许
你应该发一封电子邮件给<freebsd-questions@FreeBSD.org>寻求帮助。
15.5拨出设备
下面将让你的主机通过modem连接到另一台电脑上。这只要建立一个终端作为远程主
机。这可以用来登陆进一个BBS。
如果你用PPP有问题,那这种连接在internet上下载一个文件是非常有帮助的。如果
你必须FTP一些东西,而PPP断了,使用终端连接到FTP。然后使用zmodem来把它传输到
你的机器上。
15.5.1我的StockHayesModem不被支持,我该怎么办?
事实上,联机手册对于这个的描述已经过期了。有一个通用的Hayes拨号已经建构在里
面了。只要在你的/etc/remote文件中使用at=hayes。
Hayes驱动器不够“聪明”只能认出一些比较新的modem的高级特性---如BUSY,NO
DIALTONE,orCONNECT115200的信息将被搞乱。当你使用的时候,你必须把这些信息关掉。
另外,拨号的延迟是60秒。你的modem可能使用另外的时间或提示认为有其他的通讯
问题。试试ATS7=45&W。
实际上,有些提示不完全被支持。解决方法是编辑/usr/src/usr.bin/tip/tip目录中
的tipconf.h文件。很明显,你需要它的源代码。
把行#defineHAYES0修改成#defineHAYES1。然后make,makeinstall。这样就好了。
15.5.2我如何键入这些命令?
在/etc/remote文件中编译一个叫做direct的记录。例如,如果你的modem连接在第
一个串行端口,/dev/cuaa0,就放进下面这行:
第20页cuaa0:dv=/dev/cuaa0:br#19200:pa=none
在br项中使用最高的传输速率。然后键入cuaa0,你就可以连接到你的modem了。如果
在你的系统上没有/dev/cuaa0,可以这样:
#cd/dev
#MAKEDEVcuaa0
或以root使用cu:
#cu-lline-sspeed
line是串行端口(如./dev/cuaa0),speed是速度(如57600)。当你键入~.就退出。
15.5.3在pn现@标记不能工作?
在电话号码项@标记告诉电脑在/etc/phones文件中查找一个电话号码。但@标记也是一
个在象/etc/remote这样的可用文件中的特殊的字符。用一个反斜线符号退出:
pn=\@
15.5.4我如何在命令行拨电话号码?
在你的/etc/remote文件中通常放着一个叫做generic的记录。例如:
tip115200|Dialanyphonenumberat115200bps:\
:dv=/dev/cuaa0:br#115200:at=hayes:pa=none:du:
tip57600|Dialanyphonenumberat57600bps:\
:dv=/dev/cuaa0:br#57600:at=hayes:pa=none:du:
然后,你可以这样:
#tip-1152005551234
如果你更喜欢cu,使用一个通用的cu记录:
cu115200|Usecutodialanynumberat115200bps:\
FreeBSD使用手册
第21页FreeBSD使用手册
:dv=/dev/cuaa1:br#57600:at=hayes:pa=none:du:
然后键入:
#cu5551234-s115200
15.5.5通过一个终端服务器我能访问许多主机。
不用等待,除非你每次连接需要键入CONNECT<host>,使用tip的cm功能。例如,这
些记录在/etc/remote中:
pain|pain.deep13.com|Forrester'smachine:\
:cm=CONNECTpain\n:tc=deep13:
muffin|muffin.deep13.com|Frank'smachine:\
:cm=CONNECTmuffin\n:tc=deep13:
deep13:GizmonicsInstituteterminalserver:\
:dv=/dev/cuaa2:br#38400:at=hayes:du:pa=none:pn=5551234:
15.6设置串行控制台
15.6.1介绍
FreeBSD可以通过一个串行口只使用一个哑终端就可以启动一个系统。这样一种配置只
有两种人能使用:希望在机器上安装FreeBSD的系统管理员,他没有键盘或显示器,还有就
是要调试内核或设备驱动程序的开发人员。
就象第7章描述的,FreeBSD可以使用一个三步的启动过程。最先两步被储存在FreeBSD
启动磁盘的启动slice的启动代码块中。启动块然后就被加载,接着运行第三步启动引导器
(/boot/loader)。
为了设置串行控制台,你必须配置启动块代码,启动引导器代码和内核。
15.6.2串行控制台的配置
1.准备一个串行线缆。
第22页FreeBSD使用手册
你需要使用一个null-modem的线缆或一个标准的串行线和一个null-modem适配器。看
看第15.2.2节有关串行线的讨论。
2.拔去你的键盘。
绝大多数的PC在开机检测的时候会检测到键盘,如果键盘没有被检测到,将会出现一
个错误。一些机器会提示丢失键盘,就不会继续引导系统。
如果你的电脑出现错误,但仍能继续启动,你可以不必理它。
如果你的电脑没有键盘拒绝启动,那你需要配置BIOS来避免这个错误。看看你的主板
的使用说明了解更多细节。
提示:在BIOS中设置键盘Notinstalled并不意味着你不能使用键盘。这样做只是告
诉BIOS不要在机器开机检测时检测键盘,以至不会提示说系统找不到键盘。即使你设置了
Notinstalled,只要把你的键盘插上去仍然可以使用。
注意:如果你的系统有一个PS/2鼠标,如果机会好的话,你也可以象键盘一样把它拔
下来,这是因为PS/2鼠标与键盘的一些硬件是共享的,你的鼠标插上去,系统会认为键盘
仍在那儿。
3.插一个哑终端到COM1:(sio0)。
如果你没有一个哑终端,你可以使用一个比较老的带有一个modem程序的PC/XT机器,
或在其他unix机器的串行口。如果你没有COM1:(sio0),去找一个。这时,你没有办法只
能选择COM1:来启动系统。如果你已经在另一台设备上使用COM1:,你必须临时删除那个设
备,然后安装一个新的系统启动块和内核。
4.确信你的内核配置文件已经为COM1:(sio0)设置了适当的标记:
有关的标记是:
0x10
启用控制台支持。其他的控制台标记会被忽略,除非它被设置了。现在,绝大多数的设
置都有控制台的支持;这个标记的第一个就是首选的。这个单独选项是不能确保串行口适用
于控制台的,设置下面的标记或加上下面描述的-h选项,和这个放在一起。
0x20
第23页FreeBSD使用手册
不管下面有没有讨论,都迫使这个选项支持控制台。这个标记在FreeBSD2.X中替换了
COMCONSOLE选项。标记0x20必须和0x10一起使用。
0x40
保存这个设置,确保这个设置不能用于普通访问。你不要把这个标记放在你要使用的串
口设置中。这个标记的唯一的用处是在进行远程内核调试时用于指派单位。看看开发人员手
册了解更多信息。
注意:在FreeBSD4.0-CURRENT和以后的版本中,标记0x40通常是不同的,有另一个
标记可以来指定一个串行口用于远程调试。
例:
devicesio0atisa?port"IO_COM1"ttyflags0x10irq4
看看sio的联机手册了解更多信息。如果标记没有被设置,你必须运行UserConfig或
重新编译内核。
5.在启动磁盘的a分区的根目录创建一个boot.config文件。
这个文件将指导启动块代码如何启动系统。为了激活串行控制台,你必须有一个或多个
下面的选项---如果你要多个选项,在同一行必须都包含它们:
-h
切换内部和串行控制台。你使用这个来交换控制台设备。例如,如果你从内部控制台启
动,你可以使用-h来直接使用启动引导器和内核来使用串行口作为它的控制台设备。另外,
如果你从串行口启动,你可以使用-h来告诉启动引导器和内核使用显示设备作为控制台。
-D
切换单一和双重控制台配置。在单一配置中,控制台将是本机的控制台(显示设备)或
串行口。在双重控制台配置中,显示设备和串行口将同时成为控制台,无论-h的选项的情
形。然而,双控制台配置只在启动块运行的过程中起作用。一旦启动引导器获得控制,由-h
选项指定的控制台将成为唯一的控制台。
-P
第24页FreeBSD使用手册
在启动时,探测键盘。如果键盘找不到,-D和-h选项会自动设置。
注意:由于启动块的当前版本的限制,-P选项只能探测扩展的键盘。少于101键的键
盘将无法被探测到。如果你碰到这个情况,你必须避免使用-P选项。不幸的是这个问题还
没有解决。
使用-P选项来自动选择控制台,或使用-h选项来激活控制台。
你也可以使用boot联机文档中所描述的其他选项。
除了-P选项,所有选项将被传给启动引导器(/boot/loader)。启动引导器将通过检查
-h选项的状态来决定是显示设备成为控制台,还是串行口成为控制台。这意味着如果你指
定-D选项,但在/boot.config中没有-h选项,你在启动块时使用串行口作为控制台;启动
引导器将使用内部显示设备作为控制台。
6.启动机器
当你启动你的FreeBSD时,启动块将把/boot.config的内容发给控制台。例如:
/boot.config:-P
Keyboard:no
如果你把-P放在/boot.config中并指出键盘存在或不存在,那将只出现第二行。这些
信息会被定位到串行口或内部控制台,或两个都是,完全取决于/boot.config中的选项。
定位信息选项
noneinternalconsole
-hserialconsole
serialandinternalconsoles-D
serialandinternalconsoles-Dh
-P,keyboardpresentinternalconsole
-P,keyboardabsentserialconsole
出现上面信息后,在启动块加载启动引导器和更多信息被映到屏幕之前将有一个小小的
停顿。在通常情况下,你不需要打断启动进程,但为了确信设置是否正确,你也可以这样做。
第25页FreeBSD使用手册
键入任何键,而不是Enter,控制台会打断启动进程。启动块将进入命令行模式。你看
到:
>>FreeBSD/i386BOOT
Default:0:wd(0,a)/boot/loader
boot:
检验上面出现的信息,可能是串行口,或内部控制台,或两个都是,完全取决于你在
/boot.config中的选项。如果信息出现在正确的控制台,键入Enter继续启动进程。
如果你要使用串行控制台,但你没有看到命令行,那可能设置有问题。这时,你键入-h
然后单击Enter/Return来告诉启动块选择串行口作为控制台。一旦系统起来了,回去检查
一下是什么出问题了。
启动引导器被加载完后,你将进入启动进程的第三步,你仍然可以在启动引导器通过设
定你喜欢的环境来切换内部控制台和串行控制台。看看第15.6.5节。
15.6.3摘要
这是几个在这章要讨论的几个设置和选择的控制台的摘要。
15.6.3.1Case1:YouSettheflagsto0x10forsio0
devicesio0atisa?port"IO_COM1"ttyflags0x10irq4
ConsoleinConsoleduringbootConsoleduringbootOptionsin
kernelloaderblocks/boot.config
nothinginternalinternalinternal
-hserialserialserial
internalinternal-Dserialandinternal
serialserial-Dhserialandinternal
internalinternalinternal-P,keyboardpresent
serialserial-P,keyboardabsentserialandinternal
第26页FreeBSD使用手册
15.6.3.2Case2:YouSettheflagsto0x30forsio0
devicesio0atisa?port"IO_COM1"ttyflags0x30irq4
ConsoleinConsoleduringConsoleduringOptionsin
kernelbootloaderbootblocks/boot.config
nothinginternalinternalserial
-hserialserialserial
-Dserialandinternalinternalserial
-Dhserialandinternalserialserial
serialinternalinternal-P,keyboardpresent
serialserialserialandinternal-P,keyboardabsent
15.6.4串行控制台的提示
15.6.4.1设置一个快速的串行口速度
默认的串行口被设置成9600波特,8位,没有奇偶性,1个停止位。如果你希望改变速
度,你必须重新编译启动块。在/etc/make.conf中添加下面一行,然后编译新的启动块:
BOOT_COMCONSOLE_SPEED=19200
如果串行控制台用其他方法来配置而不是在启动时用-h,或内核使用的串行控制台与启
动块使用的不同,那你必须在内核配置文件中添加下面这行,然后编译内核:
optionsCONSPEED=19200
15.6.4.2使用串行口而不是sio0作为控制台
使用串行口而不是sio0作为控制台需要做一些重编译。如果你无论如何都要使用另一
个串行口,重新编译启动块,启动引导器和内核。
1.得到内核源代码。
2.编辑/etc/make.conf文件,然后设置BOOT_COMCONSOLE_PORT作为你要使用(0x3F8,
0x2F8,0x3E8or0x2E8)端口的地址。只有sio0到sio3(COM1:throughCOM4:)能被使
用;多接口串行卡将不会工作。不需要任何中断设置。
第27页FreeBSD使用手册
3.创建一个定制的内核配置文件,在你要使用的串行口添加合适的标记。例如,如果
要将sio1(COM2:)作为控制台:
4.devicesio1atisa?port"IO_COM2"ttyflags0x10irq3
或
devicesio1atisa?port"IO_COM2"ttyflags0x30irq3
其他端口的控制台标记也不要设。
5.重新编译和安装启动块:
6.#cd/sys/boot/i386/boot2
7.#make
8.#makeinstall
9.重编译和安装启动引导器:
10.#cd/sys/boot/i386/loader
11.#make
12.#makeinstall
13.重建和安装内核。
14.用disklabel将启动块写到启动磁盘上,然后从新内核启动。
15.6.4.3通过串行线键入DDB调试器
如果你想通过串行控制台进行内核调试,你需要在编译内核时加上下面选项:
optionsBREAK_TO_DEBUGGER
optionsDDB
15.6.4.4在串行控制台上得到一个登陆命令行
第28页FreeBSD使用手册
你可能希望通过串行线得到一个登陆命令行,现在你可以看到启动信息,通过串行控制
台键入内核调试信息。可以这样做。
用一个编辑器打开/etc/ttys文件,然后定位到下面的行:
ttyd0"/usr/libexec/gettystd.9600"unknownoffsecure
ttyd1"/usr/libexec/gettystd.9600"unknownoffsecure
ttyd2"/usr/libexec/gettystd.9600"unknownoffsecure
ttyd3"/usr/libexec/gettystd.9600"unknownoffsecure
ttyd0到ttyd3相当于COM1到COM4。可以打开或关闭某个端口。如果你已经改变了串
行口的速度,你必须修改标准的9600与当前的例如19200相匹配。
你也可以改变终端的类型从不知名的到你串行终端的真实类型。编辑完这个文件,你必
须杀掉-HUP1来使这个修改启用。
15.6.5从启动引导器修改控制台
前面一节描述了如何通过调整启动块来设定串行控制台。这节将讲到在启动引导器中通
过键入一些命令和环境变量来指定控制台。由于启动引导器会被启动进程的第三步所调用,
启动块以后,在启动引导器中的设置将忽略在启动块中的设置。
15.6.5.1设定串行控制台
你可以很容易地指定启动引导器和内核来使用串行控制台,只需要在/boot/loader.rc
中写入下面这行:
setconsole=comconsole
你最好把上面一行放在文件的第一行,以至于尽早地在启动时看到串行控制台的启动信
息。同样地,你可以指定内部控制台为:
setconsole=vidconsole
如果你不设置启动引导环境变量控制台,启动引导器和内核将使用在启动块时用-h选
项指定的控制台。
第29页FreeBSD使用手册
在版本3.2或以后的版本中,你可以在/boot/loader.conf.local或/boot/loader.conf
中指定控制台,而不是在/boot/loader.rc中。在这个方法中,你的/boot/loader.rc文件
将是这样的:
include/boot/loader.4th
start
然后,创建/boot/loader.conf.local放上下面的行。
console=comconsole
或
console=vidconsole
看看loader.conf的联机手册了解更多信息。
15.6.5.2使用串行口而不是sio0作为控制台
你需要使用一个串行口而不是sio0重新编译启动引导器作为串行控制台。下面的步骤
跟第15.6.4.2节描述的相似。
15.6.6警告
这篇文章本意是想告诉人们如何设定没有显示设备或键盘的专用服务器。不幸的是,绝
大多数系统没有键盘可以让你启动,而没有显示设备就不让你启动。使用AMIBIOS的机器
可以通过在CMOS中将“graphicsadapter”项设为“Notinstalled”来在启动时不需要显
示适配器。
然而,许多机器不支持这个选项,如果你的系统没有显示硬件就拒绝启动。对于这些机
器,即使你没有显示器,你也必需在你机器上插上显示适配器。建议你试试用AMIBIOS的
机器。
15串口通讯
15.1概要
15.2介绍
15.3终端
15.4拨入服务
15.5拨出服务
15.6设置串行控制台
=============================================================
第15章串口通讯
=============================================================
(翻译中出现的任何问题或错误,请广大读者及时反馈给我:freebsdhandbook@163.com)
15.1概要
UNIX都是支持串口通讯的。事实上,早期的UNIX系统就是利用串行线来输入和输出数
据的。那时通常的“terminal”包含了一个每秒10个字符的串行打印机和键盘时,现在这
些事情已经有所变化了。这章将介绍一些利用FreeBSD进行串行通讯的方法。
读完这章,你将了解到:
.如何通过终端连接到FreeBSD系统。
.如何使用modem拨号到远程域。
.如何允许远程用户通过modem登陆到你的系统。
.如何从串行控制台引导你的系统。
阅读这章之前,你应当了解:
.如何配置和安装一个新的内核。(第9章)
.理解unix的权限和进程。(第3章)
.通过网络设备访问技术参考手册。
15.2介绍
15.2.1术语
bps
每秒比特---数据的传输速率
DTE
数据终端设备---如你的电脑
DCE
第1页FreeBSD使用手册
数据通讯设备---如你的modem
RS-232
用于硬件串行通讯的EIA标准
15.2.2线缆和端口
要从你的FreeBSD系统连接到一个modem或终端,你需要有一个串行端口,和连接到你
串行设备的适当的线缆。如果你比较熟悉硬件和线缆,你可以跳过这节。
15.2.2.1线缆
有好几种线缆。两个最普通的类型是null-modem线缆和标准RS-232线缆。你的硬件的
规格说明会有详细描述。
15.2.2.1.1Null-modem线缆
一个null-modem线缆会直接通过象signalground这样的信号。如果你想自己选择线
缆,你可以做一个使用null-modem的线缆。这个线缆在一个DB-25连接器上会显示RS-232C
信号名和pin号码。
Pin#SignalSignalPin#
TxD2连接到3RxD
RxD3连接到2TxD
DTR20连接到6DSR
DSR6连接到20DTR
SG7连接到7SG
DCD8连接到4RTS
RTS45CTS
CTS5连接到8DCD
15.2.2.1.2标准RS-232C线缆
一个标准的串行线缆会直接通过所有的RS-232C信号。这是连接一个modem到你的
FreeBSD系统的线缆类型,线缆的类型需要针对一些终端。
第2页FreeBSD使用手册
15.2.2.2端口
串行端口是FreeBSD主机与终端传输数据的设备。这节描述了端口的种类和他们在
FreeBSD上的地址。
15.2.2.2.1几种端口
有好几种端口存在。你在购买和做线缆之前,你需要确定它是否适合你机器的接线端。
绝大多数的接线端有DB25端口。个人电脑包括运行FreeBSD的PC机,有DB25或DB9
端口。如果你有一个多端口的串行卡,你可以使用RJ-12或RJ-45端口。请仔细看看硬件
的说明。
15.2.2.2.2端口名称
在FreeBSD中,你可以通过/dev目录中的一个记录来访问每个串行端口。有两种不同
的记录:
.呼入端口被命名为/dev/ttydN,这儿N是端口号,从零开始。通常,你使用呼入端
口作为接线端。呼入端口要求数据线使用载波检测信号来工作。
.呼出端口被命名为/dev/cuaaN。你通常不使用呼出端口作为接线端,只使用modem。
如果串行线或接线端不支持载波检测数据传输,你可以使用呼出端口。
如果你已经连接到了第一个串行端口,那你需要使用/dev/ttyd0来应用接线端。如果它
是在第二个串行口,那就是/dev/ttyd1,等等。
15.2.3内核配置
FreeBSD默认支持4个串行端口。在MS-DOS下,这些是COM1:,COM2:,COM3:和COM4:。
FreeBSD当前支持dumb多端口串行接口卡,如BocaBoard1008and2016,就象许多Digiboard
和StallionTechnologies制造的智能多接口卡。默认的内核只会寻找标准的COM接口。
要看看你的内核是否支持你的串口,需要在内核启动时查看一些信息,或使用
/sbin/dmesg命令重新播出内核启动信息。特别的,寻找以sio为特征的启动信息。
提示:要看看带有sio的信息,可以使用下面的命令:
#/sbin/dmesg|grep'sio'
第3页FreeBSD使用手册
例如,在一个带有4个串行口的系统上,这些是串行口特定的内核启动信息:
sio0at0x3f8-0x3ffirq4onisa
sio0:type16550A
sio1at0x2f8-0x2ffirq3onisa
sio1:type16550A
sio2at0x3e8-0x3efirq5onisa
sio2:type16550A
sio3at0x2e8-0x2efirq9onisa
sio3:type16550A
如果你的内核没有认出你的所有串行口,你需要为你的系统定制一个内核。更多有关配
置内核的细节,可以看看第9章。
在你的内核配置文件中相关的设备行是这样的:
devicesio0atisa?port"IO_COM1"ttyirq4vectorsiointr
devicesio1atisa?port"IO_COM2"ttyirq3vectorsiointr
devicesio2atisa?port"IO_COM3"ttyirq5vectorsiointr
devicesio3atisa?port"IO_COM4"ttyirq9vectorsiointr
你可以注释掉或完全删除你没有的设备。请看看sio的有关如何为你的多端口主板写入
配置信息的联机手册。如果你使用了一个不同版本的FreeBSD的配置文件,请小心点,因为
设备的标记在两个版本之间已经改变了。
15.2.4设备指定文件
内核中的绝大多数设备可以通过devicespecialfiles来访问,它就在/dev目录下。
Sio设备通过/dev/ttydN(dial-in)和/dev/cuaaN(call-out)来访问。FreeBSD也提供了初
始化的设备(/dev/ttyidNand/dev/cuai0N)和锁定的设备(/dev/ttyldNand
第4页FreeBSD使用手册
/dev/cual0N)。初始化的设备在每次端口被打开时被用来初始化设备通讯端口参数。例如使
用CTS/RTS的流控制信号的crtscts。锁定设备被用来锁定端口的标记以阻止用户或程序改
变某个参数;看看termios,sio,andstty的联机手册了解更多信息。
15.2.4.1编译设备指定文件
注意:FreeBSD5.0已把自动创建设备接点的devfs文件系统作为是必需的。如果你在
运行启用devfs的FreeBSD版本,你就可以跳过这一节。
一个在/dev目录下的叫做MAKEDEV的shell脚本管理着设备的特殊文件。要使用
MAKEDEV来编译拨号设备,以使用COM1:(port0),cd进入/dev,然后执行命令MAKEDEV
ttyd0。同样地,要编译拨号设备以使用COM2:(port1),可以执行MAKEDEVttyd1。MAKEDEV
不仅仅创建/dev/ttydN设备特殊文件,也创建/dev/cuaaN,/dev/cuaiaN,/dev/cualaN,
/dev/ttyldN,和/dev/ttyidN节点。
编译完支持新设备的特殊文件之后,需要检查文件的权限来确定谁可以在这些文件上读
写—你可能不想让普通的用户来使用你的modem吧。默认的在/dev/cua*上的权限应当比较
充分:
crw-rw----1uucpdialer28,129Feb1514:38/dev/cuaa1
crw-rw----1uucpdialer28,161Feb1514:38/dev/cuaia1
crw-rw----1uucpdialer28,193Feb1514:38/dev/cuala1
这些许可允许用户uucp和在组拨号上的用户使用呼出设备。
15.2.5串行端口配置
ttydN(或cuaaN)设备是你要打开你的应用程序的规则设备。当一个进程打开某个设备,
它将有一个终端I/O的默认设置。你可以在命令行看这些设置:
#stty-a-f/dev/ttyd1
当你修改了这个设备的设置,这个设置会生效,除非设备被关闭。当它被重新打开时,
它将回到默认设置。要修改默认设置,你可以打开和调整initialstate设备的设置。例如,
要打开CLOCAL模式,8位通讯,默认的XON/XOFF流控制,键入:
第5页FreeBSD使用手册
#stty-f/dev/ttyid5clocalcs8ixonixoff
系统的串行设备的初试化可以在/etc/rc.serial中被控制。这个文件影响了串行设备
的默认设置。
要防止某个设置被一个应用程序所修改,需要调整lockstate设备。例如,要锁定ttyd5
的速度为57600bps,键入:
#stty-f/dev/ttyld557600
现在,一个打开ttyd5和设法改变端口速度的应用程序将被固定在57600bps。很自然
地,你需要确定初始情形,和锁定设备的写入状态,只有root才能写。
15.3终端
当你不在电脑控制台或不在一个连接的网络上时,终端提供了一个方便和低成本的访问
你的FreeBSD系统的方法。这节描述了如何在FreeBSD上使用终端。
15.3.1终端的用法和类型
早期的UNIX系统没有控制台。人们通过将终端连接到电脑的串行口来登陆和使用程序。
它很象用一个modem和一些终端软件来拨号进入一个远程的系统只执行文本的工作。
今天的PC已经可以使用高质量的图形了,但与今天的其他UNIX操作系统一样,建立一
个登陆的能力仍然存在;通过使用一个终端连接到一个没有使用的串行口,你就能登陆和运
行任何文本程序或在XWindowSystem中运行一个xterm窗口程序。
对于商业用户,你可以配上任何终端到FreeBSD系统,然后把它们放在员工的桌面上。
对于一个家庭用户,可以使用一台比较老的IBMPC或Macintosh运行一个终端连接到一台
运行FreeBSD的高性能机器上。
对于FreeBSD,有三种终端:
.Dumb终端
.充当终端的PCs
.X终端
第6页FreeBSD使用手册
下面的小节将描述每一种。
15.3.1.1Dumb终端
Dumb终端可以适应好几种硬件,让你通过串行线连接到电脑。他们被叫做dumb是因为
他们只能够用来显示、发送和接受文本。你不能在它上面运行任何程序。
有好几百种dumb终端被制造,包括DigitalEquipmentCorporation'sVT-100和
Wyse'sWY-75。只有几种可以在FreeBSD上工作。一些高端的终端可以显示图形,但只有某
些软件包可以使用这些高级特性。
15.3.1.2充当终端的PCs
如果一个dumb终端有足够的能力来显示、发送和接受文本,那这些个人电脑可以作为
一个dumb终端。你所需要的只是适当的线缆和一些终端模拟软件。
这样一个配置被广泛运用于家庭。例如,如果你的妻子忙于在你的FreeBSD系统控制台
上工作,你也可以从一台低档的个人电脑登陆到FreeBSD系统执行一些文本的工作。
15.3.1.3X终端
X终端是最复杂的终端系统。它们通常需要使用以太网来连接。他们能显示任何X应用
程序。我们介绍X终端只是为了感兴趣。然而,这章不会涉及X终端的安装、配置或使用。
15.3.2配置
这节描述了你在一个终端上启用一个登陆活动,需要你在FreeBSD系统上配置些什么。
假设你已经配置好了你的内核来支持串行端口,你就可以连接了。
回想起第7章,init进程依赖于系统启动时所有的处理控制和初始化。通过init来执
行的一些任务将先读取/etc/ttys文件,然后在可用的终端上启用一个getty进程。getty
进程可用来阅读一个登陆名和启动登陆程序。
然而,要配置你FreeBSD系统的终端,你需要以root来执行下面的步骤:
1.如果它不在那儿,你需要为串行端口在/dev目录下添加一行记录到/etc/ttys。
2.指定/usr/libexec/getty在端口上运行,然后从/etc/gettytab文件指定适当的
getty类型。
第7页FreeBSD使用手册
3.指定默认的终端类型。
4.设置端口为on。
5.确定端口是否为secure。
6.迫使init重新读取/etc/ttys文件。
作为可选的步骤,你可以通过在/etc/gettytab中建立一个记录,在第2步创建一个定
制的getty类型来使用。这章不会介绍如何做;你可以看看gettytab和getty的联机手册
了解更多信息。
15.3.2.1添加一个记录到/etc/ttys
/etc/ttys文件列出了你FreeBSD系统上允许登陆的所有端口。例如,第一个虚拟控制
台ttyv0在这个文件中有一个记录。你可以使用这个记录登陆进控制台。这个文件也包含其
他虚拟控制台的记录、串行口、和伪-ttys。对于一个硬连线的终端,只要列出串行端口的
/dev记录。
默认的FreeBSD安装包括了支持最初四个串行口ttyd0到ttyd3的/etc/ttys文件。如
果你从那些端口来使用终端,你不需要添加另一个记录。
例15-1.添加终端记录到/etc/ttys
建议我们连接两个终端给系统:一个Wyse-50和一个老的运行Procomm终端软件模拟一
个VT-100终端的286IBMPC。在/etc/ttys文件中的相应的记录是这样的:
"/usr/libexec/gettystd.38400"wy50oninsecurettyd1
ttyd5"/usr/libexec/gettystd.19200"vt100oninsecure
,第一部分指定了终端特殊文件的名称,它可以在/dev中找到。
,第二部分是在这行执行的命令,通常是getty。Getty初始化然后打开一行,设置
速度,用户名的命令和执行登陆程序。
getty程序在它的命令行接收一个参数,getty类型。一个getty类型会在终端行描述
一个特征,象bpsrate和parity。getty程序从/etc/gettytab文件读取这些字符。文件
/etc/gettytab包含了许多老的和新的终端线的记录。在很多例子中,启动文本std的记录
第8页FreeBSD使用手册
将用硬连线终端来工作。这些记录忽略了奇偶性。这是一个从110到115200的每bps的std
记录。当然,你可以添加你自己的记录到这个文件。Gettytab的联机手册提供了更多的信
息。
当在/etc/ttys中设置getty类型的时候,确信在终端上的通讯设置匹配。
在我们的例子中,Wyse-50不使用奇偶性,用38400bps来连接。286PC不使用奇偶性,
用19200bps来连接。
,第三部分是通常连接到那个tty线的终端类型。对于拨号端口,不知名的或拨出的
通常被用在这个地方。对于硬连线的终端,终端类型不会改变,所以你可以从termcap数据
库文件中放置一个真正的终端类型。
在我们的例子中,Wyse-50使用真正的终端类型,而运行Procomm的286PC将被设置成
在VT-100上的模拟。
,如果端口被启用,可以指定第四个部分。在第二部分,把它放在这儿将执行初始化
进程来启动程序getty。如果你在这部分推迟,将没有getty,在端口上因此就没有登陆。
,最后部分被用来指定端口是否安全。标记一个安全的端口意味着你信任它允许用root
帐户从哪个端口登陆。不安全的端口不允许root登陆。在一个不安全的端口上,用户必须
用无特权的帐户登陆,然后使用su或一个相似的机制来获得超级用户的权限。
15.3.2.2重新读取/etc/ttys来强制初始化
对/etc/ttys文件做一个必要的修改后,你必须发送一个SIGHUP信号给初始化进程来
迫使它重新读取它的配置文件,例如:
#kill-HUP1
如果能够被正确设置,所有的线缆都是适当的,终端将可以启用了,然后一个getty
进程将在每个终端被运行,你将在你的终端上看到登陆命令行。
15.3.3你的连接可能出现的问题
即使你小心翼翼地注意细节,你仍然可能会在设置终端时出错。这儿有一个有关问题的
现象和解决办法的列表:
第9页FreeBSD使用手册
1,没有登陆命令出现:
确定终端被嵌入和打开了。如果把一台个人电脑充当一个终端,确信终端模拟软件运行
在正确的串口上。
确信线缆被稳固地连接在终端和FreeBSD电脑上。确信用了正确的电缆。
确定终端和FreeBSD的传输速率和奇偶设置已经一致了。如果你有一个图象显示终端,
确信对比度已经调节好了。如果它是一个可打印的终端,确信纸张和墨水已经准备好了。
确定一个getty进程正在运行和服务终端。例如,可以用ps命令来得到运行getty程
序的列表,键入:
#ps-axww|grepgetty
你将看到一个终端的记录。例如,下面的显示表明一个getty正在第二个串行端口ttyd1
运行,正在/etc/gettytab中使用std.38400的记录:
22189d1Is+0:00.03/usr/libexec/gettystd.38400ttyd1
如果没有getty进程运行,确信你已经在/etc/ttys中启用了端口。在修改完ttys文
件后,记得运行kill-HUP1。
2,出现一个“垃圾”而不是一个登陆命令行
确信终端和FreeBSD使用相同的bps传输率和奇偶校验设置。检查一下getty进程确信
当前使用的正确的getty类型。如果没有,编辑/etc/ttys然后运行kill-HUP1。
3,当键入密码时,字符两个两个出现
将终端(或终端模拟软件)从“halfduplex”或“localecho”换成“fullduplex”。
15.4拨入服务
配置FreeBSD系统来用拨入服务与连接到终端是非常相似的,除非你正在使用modem
来拨号。
15.4.1外置和内置modem
外置modem看起来很容易拨号。因为,外置modem可以通过储存在非易失性的RAM中的
第10页FreeBSD使用手册
参数来配置,他们通常提供指示器来显示重要的RS-232信号的状态。不停闪光的信号灯能
给用户留下比较深刻的印象,而且指示器也可以用来查看modem是否正常地工作。
内置modem通常缺乏非易失性的RAM,所以对它们的配置可能被限制在通过DIP开关来
设置。如果你的内置modem有指示灯,你也很难看得到。
15.4.1.1Modems和线缆
如果你使用一个外置的modem,那你将需要适当的电缆线。一个标准的串行线应当足够
长以至普通的信号能够连接上:
.TransmittedData(SD)
.ReceivedData(RD)
.RequesttoSend(RTS)
.CleartoSend(CTS)
.DataSetReady(DSR)
.DataTerminalReady(DTR)
.CarrierDetect(CD)
.SignalGround(SG)
FreeBSD需要对速度超过2400bps的RTS和CTS信号进行流控制,当一个呼叫被回复或
线路被挂起的时候,CD信号就会被侦测到,一个任务完成之后,DTR信号就会刷新modem。
一些线缆不需要任何信号就可以连接,所以如果你有问题,当线路被挂起时,一个登陆任务
就会丢失,你可能会在线缆上有问题。
象其它unix类的操作系统一样,FreeBSD使用硬件信号来寻找出一个呼叫什么时候会
回复或一个线路会被挂起。FreeBSD避免发送命令给modem或监视modem的状况。如果你熟
悉连接modem到BBS,这可能是很难的。
15.4.2串行接口的考虑
FreeBSD支持以NS8250-,NS16450-,NS16550-和NS16550A为基础的EIARS-232C通讯
接口。8250和16450设备有单字符缓冲。16550设备提供了一个16个字符的缓冲,可以提
第11页FreeBSD使用手册
高更多的系统性能。因为单字符缓冲设备比16个字符的缓冲需要更多的系统资源来工作,
所以基于16550A的接口卡可能更好。如果系统没有活动的串行口,或有一个巨大的负载,
16字符缓冲的卡对于低错误率的通讯来说更好。
15.4.3快速预览
对于终端,init会在每个配置串行口上为每个拨入连接产生一个getty进程。例如,
如果一个modem被附带在/dev/ttyd0中,用命令psax可以显示下面这些:
4850??I0:00.09/usr/libexec/gettyV19200ttyd0
当一个用户拨上modem,并使用它进行连接时,CD线就会被modem认出。内核注意到载
波信号已经被检测到,需要完成getty的端口的打开。Getty发送一个登陆:在指定的初始
线速度上的命令行。Getty会检查合法的字符是否被接收,在一个典型的配置中,如果发现
垃圾,getty就会设法调节线速度,直到它接收到合理的字符。
用户在键入他/她的登陆名称后,getty执行/usr/bin/login,这会要求用户输入密码
来完成登陆,然后启动用户的shell。
15.4.4配置文件
在/etc目录中,有三个你将需要编辑的系统配置文件,来允许拨号访问到你的FreeBSD
系统。第一,/etc/gettytab包含了针对/usr/libexec/getty守护程序的配置信息。第二,
保存信息来告诉/sbin/init什么tty设备将有运行在他们系统上的getty进程。最后,你
可以把端口初试化命令放在/etc/rc.serial脚本中。
在unix上,关于拨号modem的想法主要有两种。一种是把本地接口配置成一个固定速
率,以至一个远程用户拨号进入时都保持一个固定速率。这样配置的好处是远程用户总是可
以立即看到一个系统的登陆界面。这种下降趋势是系统不知道一个用户真正的数据速率是多
少,所以象eamcs全屏程序将不会调接屏幕刷新来确保对比较慢的连接有比较好的回应。
其他的配置RS-232modem的方法是随着远程用户连接的速度的变化而变化。例如,连
接到modem的V.32bis(14.4Kbps)连接可以使modem在19.2Kbps上运行RS-232接口,
而连接使得RS-232接口运行在2400bps上。
第12页FreeBSD使用手册
因为getty不了解任何特殊的modem的连接速度报告,getty会给出一个登陆:在一个
初始速度和检测字符的信息会作出回应。如果用户看到垃圾,假定他们知道他们键入了
enter键,知道他看到了一个熟悉的命令行界面。
如果数据速率不相匹配,getty会把用户键入的任何东西都看作“junk”,设法回到下
面的速度,然后给出登陆:命令行界面。很明显,这个登陆顺序看起来不如locked-speed
的方法,但一个连接在低速率上的用户将更好地交互接收来自全屏幕程序的回应。
15.4.4.1/etc/gettytab
/etc/gettytab是一个用来配置getty信息的termcap风格的文件。请看看gettytab
的联机手册了解完整的文件格式和功能列表。
15.4.4.1.1锁定速率的配置
如果你把你的modem的数据通讯率锁定在一个特殊的速率上,你不需要对
/etc/gettytab文件做任何变化。
15.4.4.1.2匹配速率的配置
你将需要在/etc/gettytab中设置一个记录来给出getty的你希望用到你的modem上的
有关速度的信息。如果你有一个2400bps的modem,你可以使用已存在的D2400的记录。
#
#Fastdialupterminals,2400/1200/300rotary(canstarteitherway)
#
D2400|d2400|Fast-Dial-2400:\
:nx=D1200:tc=2400-baud:
3|D1200|Fast-Dial-1200:\
:nx=D300:tc=1200-baud:
5|D300|Fast-Dial-300:\
:nx=D2400:tc=300-baud:
第13页FreeBSD使用手册
如果你有一个更高速度的modem,你必须在/etc/gettytab中添加一个记录;这儿是一
个你可以使用的一个最高19.2Kbps的接口用在14.4Kbps的modem上的记录:
#
#AdditionsforaV.32bisModem
#
um|V300|HighSpeedModemat300,8-bit:\
:nx=V19200:tc=std.300:
un|V1200|HighSpeedModemat1200,8-bit:\
:nx=V300:tc=std.1200:
uo|V2400|HighSpeedModemat2400,8-bit:\
:nx=V1200:tc=std.2400:
up|V9600|HighSpeedModemat9600,8-bit:\
:nx=V2400:tc=std.9600:
uq|V19200|HighSpeedModemat19200,8-bit:\
:nx=V9600:tc=std.19200:
上面使用19.2Kbps的连接速度的例子,也可以使用9600bps(forV.32),2400bps,
1200bps,300bps,直到19.2Kbps。通讯率的调节使用nx=(“nexttable”)来实现。每
条线使用一个tc=(“tablecontinuation”)的记录来加速对于一个特殊数据率的标准设
置。
如果你有一个28.8Kbps的modem,或你想使用它的14.4Kbps,你需要使用一个更高的
超过19.2Kbps的通讯速率的modem。这是一个启动57.6Kbps的gettytab记录的例子:
#
#AdditionsforaV.32bisorV.34Modem
第14页FreeBSD使用手册
#Startingat57.6Kbps
#
vm|VH300|VeryHighSpeedModemat300,8-bit:\
:nx=VH57600:tc=std.300:
vn|VH1200|VeryHighSpeedModemat1200,8-bit:\
:nx=VH300:tc=std.1200:
vo|VH2400|VeryHighSpeedModemat2400,8-bit:\
:nx=VH1200:tc=std.2400:
vp|VH9600|VeryHighSpeedModemat9600,8-bit:\
:nx=VH2400:tc=std.9600:
vq|VH57600|VeryHighSpeedModemat57600,8-bit:\
:nx=VH9600:tc=std.57600:
如果你有一个低速的CPU或一个庞大负载的系统,你没有16550A的串行端口,你可能
会在57.6Kbps上得到sio错误。
15.4.4.2/etc/ttys
/etc/ttys文件的配置在例15-1中介绍过。配置modem是相似的,但我们必须指定一
个不同的终端类型。锁定速度和匹配速度配置的通用格式是:
ttyd0"/usr/libexec/gettyxxx"dialupon
上面的第一条是这个记录的设备特定文件—ttyd0意味着/dev/ttyd0是这个getty将被
监视的文件。第二条"/usr/libexec/gettyxxx"是将运行在设备上的处理init。第三条,
dialup,是默认的终端类型。第四个参数,on,指出了线路是可操作的init。也可能会有第
五个参数,secure,但它将只被用作拥有物理安全的终端(如系统终端)。
第15页FreeBSD使用手册
默认的终端类型可以依赖于本地参考。拨号是传统的默认的终端类型,以至用户可以定
制他们的登陆脚本来注意终端什么时候拨号,和自动调节他们的终端类型。然而,作者发现
它很容易在他的站点上指定vt102作为默认的终端类型,既然用户刚才在他们的远程系统上
使用的是VT102模拟器。
你对/etc/ttys作修改之后,你可以发送init进程给一个HUP信号来重读文件。你可
以使用下面的命令来发送信号。:
#kill-HUP1
如果这是你的第一次设置系统,你可能要在发信号init之前等一下,等到你的modem
被正确地配置并连接好。
15.4.4.2.1锁定速率的配置
对于一个锁定速率的配置,你的ttys记录必须有一个为getty提供固定速率的记录。
对于一个速度被锁定在19.2kbps的modem,ttys记录是这样的:
ttyd0"/usr/libexec/gettystd.19200"dialupon
如果你的modem被锁定在一个不同的数据速率,为std.speed使用适当的速率来代替
std.19200。确信你使用了一个在/etc/gettytab中列出的正确的类型。
15.4.4.2.2匹配速度的配置
在一个匹配速率的配置中,你的ttys记录需要参考在/etc/gettytab中适当的起始
auto-baud记录。例如,如果你为一个以19.2Kbps开始的可匹配速度的modem添加上面建
议的记录的话,你的ttys记录可能是这样的:
ttyd0"/usr/libexec/gettyV19200"dialupon
15.4.4.3/etc/rc.serial
高速modem,象V.32,V.32bis,和V.34modems,需要使用硬件(RTS/CTS)流控制。你
可以在/etc/rc.serial中添加stty命令来设置硬件流控制标记。
例如,在拨入和拨出初始设备的#1's(COM2:)串行端口上设置termios标记crtscts,
下面这些行会被添加到/etc/rc.serial中:
第16页FreeBSD使用手册
#Serialportinitialconfiguration
stty-f/dev/ttyid1crtscts
stty-f/dev/cuai01crtscts
15.4.5Modem设置
如果你有一个modem,它的参数能被存储在非易失性的RAM中,你将必须使用一个终端
程序来设置参数。使用同样的通讯速率来连接modem作为初始速度getty将使用和配置
modem的非易失性RAM来匹配这些要求:
.CDassertedwhenconnected
.DTRassertedforoperation;droppingDTRhangsuplineandresetsmodem
.CTStransmitteddataflowcontrol
.DisableXON/XOFFflowcontrol
.RTSreceiveddataflowcontrol
.Quietmode(noresultcodes)
.Nocommandecho
请读读你的modem的文档找到你需要用什么命令和DIP接口设置。例如,要在一个
USRoboticsSportster14,400的外置modem上设置上面的参数,你可以用下面这些命令:
ATZ
AT&C1&D2&H1&I0&R2&W
你也可能想要在modem上寻找机会调节这个设置,例如它是否使用V.42bis和MNP5压
缩。USRSportster14,400外置modem也有一些用来设置的DIP开关,也许你可以使用这
些设置作为一个例子:
.Switch1:UP--DTRNormal
.Switch2:Donotcare(VerbalResultCodes/NumericResultCodes)
.Switch3:UP--SuppressResultCodes
第17页FreeBSD使用手册
.Switch4:DOWN--Noecho,offlinecommands
.Switch5:UP--AutoAnswer
.Switch6:UP--CarrierDetectNormal
.Switch7:UP--LoadNVRAMDefaults
.Switch8:Donotcare(SmartMode/DumbMode)
15.4.5.1锁定速率的配置
对于一个锁定速率的配置,你需要配置modem来获得一个不依赖于通讯率的稳定的
modem-to-computer的数据率。在一个USRSportster14,400外置modem上,这些命令将
锁定modem-to-computer的数据率:
ATZ
AT&B1&W
15.4.5.2匹配速率的配置
对于一个变速的配置,你需要配置你的modem来调节它的串行端口数据率来匹配接收的
数据率。在一个USRSportster14,400的外置modem上,这些命令将锁定modem的错误修
正数据率适合命令要求的速度,但允许串行端口速率适应non-error-corrected的连接:
ATZ
AT&B2&W
15.4.5.3检查modem的配置
大多数高速的modem提供了用来查看当前操作参数的命令。在USRSportster14,400
外置modem上,命令ATI5显示了存储在非易失性RAM中的设置。要看看正确的modem操作
参数,可以使用命令ATZ然后是ATI4。
如果你有一个不同牌子的modem,检查modem的使用手册看看如何双重检查你的modem
的配置参数。
15.4.6问题解答
第18页FreeBSD使用手册
这儿是几个检查拨号modem的步骤。
15.4.6.1检查FreeBSD系统
把你的modem连接到FreeBSD系统,启动系统,然后,如果你的modem有一个指示灯,
当登陆时看看modem的DTR指示灯是否亮:会在系统控制台出现命令行---如果它亮,意味
着FreeBSD已经在适当的通讯端口启动了一个getty进程,等待modem接受一个呼叫。
如果DTR指示灯不亮,通过控制台登陆到FreeBSD系统,然后执行一个psax来看
FreeBSD是否正在正确的端口运行一个getty进程。你将在进程显示中看到象这样的一行:
114??I0:00.10/usr/libexec/gettyV19200ttyd0
115??I0:00.10/usr/libexec/gettyV19200ttyd1
如果你看到这样的:
114d0I0:00.10/usr/libexec/gettyV19200ttyd0
说明,modem不接受呼叫,这意味着getty已经在通讯端口打开了。这可以指出线缆有
问题或modem错误配置,因为getty不能打开通讯端口。
如果你没有看到任何getty进程等待打开渴望的ttydN端口,在/etc/ttys中双击你的
记录看看那儿是否有错误。另外,检查日志文件/var/log/messages看看是否有一些来自
init或getty的关于一些问题的日志信息。如果有任何信息,仔细检查配置文件/etc/ttys
和/etc/gettytab,还有适当的设备文件/dev/ttydN,是否有错误,丢失记录,或丢失了设
备指定文件。
15.4.6.2尝试接入
设法拨入系统;确信使用8位,没有奇偶检验,在远程系统上的1阻止位。如果你不能
立刻得到一个命令行,试试每隔一秒键入enter。如果你仍没有看到一个登陆:设法发送一
个BREAK。如果你正使用一个高速的modem来拨号,请在锁定拨号modem的接口速度后再试
试。
如果你不能得到一个登陆:prompt,再检查一下/etc/gettytab,重复检查:
.在/etc/ttys中指定的初始可用的名称与/etc/gettytab中的一个可用的相匹配。
第19页FreeBSD使用手册
.每个nx=记录与另一个gettytab可用名称匹配。
.每个tc=记录与另一个gettytab可用名称相匹配。
如果你拨号但FreeBSD系统上的modem没有回应,确信modem能回应电话。如果modem
看起来配置正确了,通过检查modem的指示灯来确认DTR线连接正确。
如果你做了好几次,它仍然无法工作,打断一会,待会再试试。如果还不能工作,也许
你应该发一封电子邮件给<freebsd-questions@FreeBSD.org>寻求帮助。
15.5拨出设备
下面将让你的主机通过modem连接到另一台电脑上。这只要建立一个终端作为远程主
机。这可以用来登陆进一个BBS。
如果你用PPP有问题,那这种连接在internet上下载一个文件是非常有帮助的。如果
你必须FTP一些东西,而PPP断了,使用终端连接到FTP。然后使用zmodem来把它传输到
你的机器上。
15.5.1我的StockHayesModem不被支持,我该怎么办?
事实上,联机手册对于这个的描述已经过期了。有一个通用的Hayes拨号已经建构在里
面了。只要在你的/etc/remote文件中使用at=hayes。
Hayes驱动器不够“聪明”只能认出一些比较新的modem的高级特性---如BUSY,NO
DIALTONE,orCONNECT115200的信息将被搞乱。当你使用的时候,你必须把这些信息关掉。
另外,拨号的延迟是60秒。你的modem可能使用另外的时间或提示认为有其他的通讯
问题。试试ATS7=45&W。
实际上,有些提示不完全被支持。解决方法是编辑/usr/src/usr.bin/tip/tip目录中
的tipconf.h文件。很明显,你需要它的源代码。
把行#defineHAYES0修改成#defineHAYES1。然后make,makeinstall。这样就好了。
15.5.2我如何键入这些命令?
在/etc/remote文件中编译一个叫做direct的记录。例如,如果你的modem连接在第
一个串行端口,/dev/cuaa0,就放进下面这行:
第20页cuaa0:dv=/dev/cuaa0:br#19200:pa=none
在br项中使用最高的传输速率。然后键入cuaa0,你就可以连接到你的modem了。如果
在你的系统上没有/dev/cuaa0,可以这样:
#cd/dev
#MAKEDEVcuaa0
或以root使用cu:
#cu-lline-sspeed
line是串行端口(如./dev/cuaa0),speed是速度(如57600)。当你键入~.就退出。
15.5.3在pn现@标记不能工作?
在电话号码项@标记告诉电脑在/etc/phones文件中查找一个电话号码。但@标记也是一
个在象/etc/remote这样的可用文件中的特殊的字符。用一个反斜线符号退出:
pn=\@
15.5.4我如何在命令行拨电话号码?
在你的/etc/remote文件中通常放着一个叫做generic的记录。例如:
tip115200|Dialanyphonenumberat115200bps:\
:dv=/dev/cuaa0:br#115200:at=hayes:pa=none:du:
tip57600|Dialanyphonenumberat57600bps:\
:dv=/dev/cuaa0:br#57600:at=hayes:pa=none:du:
然后,你可以这样:
#tip-1152005551234
如果你更喜欢cu,使用一个通用的cu记录:
cu115200|Usecutodialanynumberat115200bps:\
FreeBSD使用手册
第21页FreeBSD使用手册
:dv=/dev/cuaa1:br#57600:at=hayes:pa=none:du:
然后键入:
#cu5551234-s115200
15.5.5通过一个终端服务器我能访问许多主机。
不用等待,除非你每次连接需要键入CONNECT<host>,使用tip的cm功能。例如,这
些记录在/etc/remote中:
pain|pain.deep13.com|Forrester'smachine:\
:cm=CONNECTpain\n:tc=deep13:
muffin|muffin.deep13.com|Frank'smachine:\
:cm=CONNECTmuffin\n:tc=deep13:
deep13:GizmonicsInstituteterminalserver:\
:dv=/dev/cuaa2:br#38400:at=hayes:du:pa=none:pn=5551234:
15.6设置串行控制台
15.6.1介绍
FreeBSD可以通过一个串行口只使用一个哑终端就可以启动一个系统。这样一种配置只
有两种人能使用:希望在机器上安装FreeBSD的系统管理员,他没有键盘或显示器,还有就
是要调试内核或设备驱动程序的开发人员。
就象第7章描述的,FreeBSD可以使用一个三步的启动过程。最先两步被储存在FreeBSD
启动磁盘的启动slice的启动代码块中。启动块然后就被加载,接着运行第三步启动引导器
(/boot/loader)。
为了设置串行控制台,你必须配置启动块代码,启动引导器代码和内核。
15.6.2串行控制台的配置
1.准备一个串行线缆。
第22页FreeBSD使用手册
你需要使用一个null-modem的线缆或一个标准的串行线和一个null-modem适配器。看
看第15.2.2节有关串行线的讨论。
2.拔去你的键盘。
绝大多数的PC在开机检测的时候会检测到键盘,如果键盘没有被检测到,将会出现一
个错误。一些机器会提示丢失键盘,就不会继续引导系统。
如果你的电脑出现错误,但仍能继续启动,你可以不必理它。
如果你的电脑没有键盘拒绝启动,那你需要配置BIOS来避免这个错误。看看你的主板
的使用说明了解更多细节。
提示:在BIOS中设置键盘Notinstalled并不意味着你不能使用键盘。这样做只是告
诉BIOS不要在机器开机检测时检测键盘,以至不会提示说系统找不到键盘。即使你设置了
Notinstalled,只要把你的键盘插上去仍然可以使用。
注意:如果你的系统有一个PS/2鼠标,如果机会好的话,你也可以象键盘一样把它拔
下来,这是因为PS/2鼠标与键盘的一些硬件是共享的,你的鼠标插上去,系统会认为键盘
仍在那儿。
3.插一个哑终端到COM1:(sio0)。
如果你没有一个哑终端,你可以使用一个比较老的带有一个modem程序的PC/XT机器,
或在其他unix机器的串行口。如果你没有COM1:(sio0),去找一个。这时,你没有办法只
能选择COM1:来启动系统。如果你已经在另一台设备上使用COM1:,你必须临时删除那个设
备,然后安装一个新的系统启动块和内核。
4.确信你的内核配置文件已经为COM1:(sio0)设置了适当的标记:
有关的标记是:
0x10
启用控制台支持。其他的控制台标记会被忽略,除非它被设置了。现在,绝大多数的设
置都有控制台的支持;这个标记的第一个就是首选的。这个单独选项是不能确保串行口适用
于控制台的,设置下面的标记或加上下面描述的-h选项,和这个放在一起。
0x20
第23页FreeBSD使用手册
不管下面有没有讨论,都迫使这个选项支持控制台。这个标记在FreeBSD2.X中替换了
COMCONSOLE选项。标记0x20必须和0x10一起使用。
0x40
保存这个设置,确保这个设置不能用于普通访问。你不要把这个标记放在你要使用的串
口设置中。这个标记的唯一的用处是在进行远程内核调试时用于指派单位。看看开发人员手
册了解更多信息。
注意:在FreeBSD4.0-CURRENT和以后的版本中,标记0x40通常是不同的,有另一个
标记可以来指定一个串行口用于远程调试。
例:
devicesio0atisa?port"IO_COM1"ttyflags0x10irq4
看看sio的联机手册了解更多信息。如果标记没有被设置,你必须运行UserConfig或
重新编译内核。
5.在启动磁盘的a分区的根目录创建一个boot.config文件。
这个文件将指导启动块代码如何启动系统。为了激活串行控制台,你必须有一个或多个
下面的选项---如果你要多个选项,在同一行必须都包含它们:
-h
切换内部和串行控制台。你使用这个来交换控制台设备。例如,如果你从内部控制台启
动,你可以使用-h来直接使用启动引导器和内核来使用串行口作为它的控制台设备。另外,
如果你从串行口启动,你可以使用-h来告诉启动引导器和内核使用显示设备作为控制台。
-D
切换单一和双重控制台配置。在单一配置中,控制台将是本机的控制台(显示设备)或
串行口。在双重控制台配置中,显示设备和串行口将同时成为控制台,无论-h的选项的情
形。然而,双控制台配置只在启动块运行的过程中起作用。一旦启动引导器获得控制,由-h
选项指定的控制台将成为唯一的控制台。
-P
第24页FreeBSD使用手册
在启动时,探测键盘。如果键盘找不到,-D和-h选项会自动设置。
注意:由于启动块的当前版本的限制,-P选项只能探测扩展的键盘。少于101键的键
盘将无法被探测到。如果你碰到这个情况,你必须避免使用-P选项。不幸的是这个问题还
没有解决。
使用-P选项来自动选择控制台,或使用-h选项来激活控制台。
你也可以使用boot联机文档中所描述的其他选项。
除了-P选项,所有选项将被传给启动引导器(/boot/loader)。启动引导器将通过检查
-h选项的状态来决定是显示设备成为控制台,还是串行口成为控制台。这意味着如果你指
定-D选项,但在/boot.config中没有-h选项,你在启动块时使用串行口作为控制台;启动
引导器将使用内部显示设备作为控制台。
6.启动机器
当你启动你的FreeBSD时,启动块将把/boot.config的内容发给控制台。例如:
/boot.config:-P
Keyboard:no
如果你把-P放在/boot.config中并指出键盘存在或不存在,那将只出现第二行。这些
信息会被定位到串行口或内部控制台,或两个都是,完全取决于/boot.config中的选项。
定位信息选项
noneinternalconsole
-hserialconsole
serialandinternalconsoles-D
serialandinternalconsoles-Dh
-P,keyboardpresentinternalconsole
-P,keyboardabsentserialconsole
出现上面信息后,在启动块加载启动引导器和更多信息被映到屏幕之前将有一个小小的
停顿。在通常情况下,你不需要打断启动进程,但为了确信设置是否正确,你也可以这样做。
第25页FreeBSD使用手册
键入任何键,而不是Enter,控制台会打断启动进程。启动块将进入命令行模式。你看
到:
>>FreeBSD/i386BOOT
Default:0:wd(0,a)/boot/loader
boot:
检验上面出现的信息,可能是串行口,或内部控制台,或两个都是,完全取决于你在
/boot.config中的选项。如果信息出现在正确的控制台,键入Enter继续启动进程。
如果你要使用串行控制台,但你没有看到命令行,那可能设置有问题。这时,你键入-h
然后单击Enter/Return来告诉启动块选择串行口作为控制台。一旦系统起来了,回去检查
一下是什么出问题了。
启动引导器被加载完后,你将进入启动进程的第三步,你仍然可以在启动引导器通过设
定你喜欢的环境来切换内部控制台和串行控制台。看看第15.6.5节。
15.6.3摘要
这是几个在这章要讨论的几个设置和选择的控制台的摘要。
15.6.3.1Case1:YouSettheflagsto0x10forsio0
devicesio0atisa?port"IO_COM1"ttyflags0x10irq4
ConsoleinConsoleduringbootConsoleduringbootOptionsin
kernelloaderblocks/boot.config
nothinginternalinternalinternal
-hserialserialserial
internalinternal-Dserialandinternal
serialserial-Dhserialandinternal
internalinternalinternal-P,keyboardpresent
serialserial-P,keyboardabsentserialandinternal
第26页FreeBSD使用手册
15.6.3.2Case2:YouSettheflagsto0x30forsio0
devicesio0atisa?port"IO_COM1"ttyflags0x30irq4
ConsoleinConsoleduringConsoleduringOptionsin
kernelbootloaderbootblocks/boot.config
nothinginternalinternalserial
-hserialserialserial
-Dserialandinternalinternalserial
-Dhserialandinternalserialserial
serialinternalinternal-P,keyboardpresent
serialserialserialandinternal-P,keyboardabsent
15.6.4串行控制台的提示
15.6.4.1设置一个快速的串行口速度
默认的串行口被设置成9600波特,8位,没有奇偶性,1个停止位。如果你希望改变速
度,你必须重新编译启动块。在/etc/make.conf中添加下面一行,然后编译新的启动块:
BOOT_COMCONSOLE_SPEED=19200
如果串行控制台用其他方法来配置而不是在启动时用-h,或内核使用的串行控制台与启
动块使用的不同,那你必须在内核配置文件中添加下面这行,然后编译内核:
optionsCONSPEED=19200
15.6.4.2使用串行口而不是sio0作为控制台
使用串行口而不是sio0作为控制台需要做一些重编译。如果你无论如何都要使用另一
个串行口,重新编译启动块,启动引导器和内核。
1.得到内核源代码。
2.编辑/etc/make.conf文件,然后设置BOOT_COMCONSOLE_PORT作为你要使用(0x3F8,
0x2F8,0x3E8or0x2E8)端口的地址。只有sio0到sio3(COM1:throughCOM4:)能被使
用;多接口串行卡将不会工作。不需要任何中断设置。
第27页FreeBSD使用手册
3.创建一个定制的内核配置文件,在你要使用的串行口添加合适的标记。例如,如果
要将sio1(COM2:)作为控制台:
4.devicesio1atisa?port"IO_COM2"ttyflags0x10irq3
或
devicesio1atisa?port"IO_COM2"ttyflags0x30irq3
其他端口的控制台标记也不要设。
5.重新编译和安装启动块:
6.#cd/sys/boot/i386/boot2
7.#make
8.#makeinstall
9.重编译和安装启动引导器:
10.#cd/sys/boot/i386/loader
11.#make
12.#makeinstall
13.重建和安装内核。
14.用disklabel将启动块写到启动磁盘上,然后从新内核启动。
15.6.4.3通过串行线键入DDB调试器
如果你想通过串行控制台进行内核调试,你需要在编译内核时加上下面选项:
optionsBREAK_TO_DEBUGGER
optionsDDB
15.6.4.4在串行控制台上得到一个登陆命令行
第28页FreeBSD使用手册
你可能希望通过串行线得到一个登陆命令行,现在你可以看到启动信息,通过串行控制
台键入内核调试信息。可以这样做。
用一个编辑器打开/etc/ttys文件,然后定位到下面的行:
ttyd0"/usr/libexec/gettystd.9600"unknownoffsecure
ttyd1"/usr/libexec/gettystd.9600"unknownoffsecure
ttyd2"/usr/libexec/gettystd.9600"unknownoffsecure
ttyd3"/usr/libexec/gettystd.9600"unknownoffsecure
ttyd0到ttyd3相当于COM1到COM4。可以打开或关闭某个端口。如果你已经改变了串
行口的速度,你必须修改标准的9600与当前的例如19200相匹配。
你也可以改变终端的类型从不知名的到你串行终端的真实类型。编辑完这个文件,你必
须杀掉-HUP1来使这个修改启用。
15.6.5从启动引导器修改控制台
前面一节描述了如何通过调整启动块来设定串行控制台。这节将讲到在启动引导器中通
过键入一些命令和环境变量来指定控制台。由于启动引导器会被启动进程的第三步所调用,
启动块以后,在启动引导器中的设置将忽略在启动块中的设置。
15.6.5.1设定串行控制台
你可以很容易地指定启动引导器和内核来使用串行控制台,只需要在/boot/loader.rc
中写入下面这行:
setconsole=comconsole
你最好把上面一行放在文件的第一行,以至于尽早地在启动时看到串行控制台的启动信
息。同样地,你可以指定内部控制台为:
setconsole=vidconsole
如果你不设置启动引导环境变量控制台,启动引导器和内核将使用在启动块时用-h选
项指定的控制台。
第29页FreeBSD使用手册
在版本3.2或以后的版本中,你可以在/boot/loader.conf.local或/boot/loader.conf
中指定控制台,而不是在/boot/loader.rc中。在这个方法中,你的/boot/loader.rc文件
将是这样的:
include/boot/loader.4th
start
然后,创建/boot/loader.conf.local放上下面的行。
console=comconsole
或
console=vidconsole
看看loader.conf的联机手册了解更多信息。
15.6.5.2使用串行口而不是sio0作为控制台
你需要使用一个串行口而不是sio0重新编译启动引导器作为串行控制台。下面的步骤
跟第15.6.4.2节描述的相似。
15.6.6警告
这篇文章本意是想告诉人们如何设定没有显示设备或键盘的专用服务器。不幸的是,绝
大多数系统没有键盘可以让你启动,而没有显示设备就不让你启动。使用AMIBIOS的机器
可以通过在CMOS中将“graphicsadapter”项设为“Notinstalled”来在启动时不需要显
示适配器。
然而,许多机器不支持这个选项,如果你的系统没有显示硬件就拒绝启动。对于这些机
器,即使你没有显示器,你也必需在你机器上插上显示适配器。建议你试试用AMIBIOS的
机器。
网友评论
以下网友评论只代表其个人观点,不代表临沂广播网的观点或立场
用户登陆

加载中……
相关文章
- 没有相关文章
