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

20.4. 拨入服务

Contributed by Guy Helmer. Additions by Sean Kelly.

为拨入服务配置FreeBSD系统与连接到终端是非常相似的,除非你正在使用modem来拨号而不是终端。

20.4.1. 外置vs.内置modem

外置modem看起来很容易拨号。因为,外置modem可以通过储存在非易失性的RAM中的参数来配置,它们通常提供指示器来显示重要的RS-232信号的状态。不停闪光的信号灯能给用户留下比较深刻的印象,而且指示器也可以用来查看modem是否正常地工作。

内置modem通常缺乏非易失性的RAM,所以对它们的配置可能会限制在通过DIP开关来设置。如果你的内置modem有指示灯,你也很难看得到。

20.4.1.1. Modem和线缆

如果你使用一个外置的modem,那你将需要适当的电缆线。一个标准的串行线应当足够长以至普通的信号能够连接上:

  • Transmitted Data (TD)

  • Received Data (RD)

  • Request to Send (RTS)

  • Clear to Send (CTS)

  • Data Set Ready (DSR)

  • Data Terminal Ready (DTR)

  • Carrier Detect (CD)

  • Signal Ground (SG)

FreeBSD需要对速度超过2400bit/s的RTSCTS信号进行流控制,当一个呼叫被回复或线路被挂起的时候,CD信号就会被侦测到,一个会话完成之后,DTR信号就会刷新modem。一些线缆不需要任何信号就可以连接,所以如果你有问题,当线路被挂起时,一个登陆任务就会丢失,你可能会在线缆上有问题。

像其他UNIX®类的操作系统一样,FreeBSD使用硬件信号来寻找出一个呼叫什么时候会回复或一个线路会被挂起。FreeBSD避免发送命令给modem或监视modem的状况。如果你熟悉连接modem到基于PC的BBS,这可能看起来有点笨。

20.4.2. 串行接口的考虑

FreeBSD支持以NS8250-,NS16450-,NS16550-和NS16550A为基础的EIA RS-232C通信接口。8250和16450设备有单字符缓冲。16550设备提供了一个16个字符的缓冲,可以提高更多的系统性能。因为单字符缓冲设备比16个字符的缓冲需要更多的系统资源来工作,所以基于16550A的接口卡可能更好。如果系统没有活动的串口,或有一个巨大的负载,16字符缓冲的卡对于低错误率的通信来说更好。

20.4.3. 快速预览

对于终端,init会在每个配置串口上为每个拨入连接产生一个getty进程。例如,如果一个modem被附带在/dev/ttyd0中,用命令ps ax可以显示下面这些:

 4850 ??  I      0:00.09 /usr/libexec/getty V19200 ttyd0

当一个用户拨上modem,并使用它进行连接时,CD线就会被modem认出。内核注意到载波信号已经被检测到,需要完成getty端口的打开。getty发送一个登陆:在指定的初始线速度上的命令行。Getty会检查合法的字符是否被接收,在一个典型的配置中,如果发现“垃圾”,getty就会设法调节线速度,直到它接收到合理的字符。

用户在键入他/她的登陆名称后,getty执行/usr/bin/login,这会要求用户输入密码来完成登陆,然后启动用户的shell。

20.4.4. 配置文件

/etc目录中,有三个你将需要编辑的系统配置文件,来允许拨号访问到你的FreeBSD系统。第一,/etc/gettytab包含了针对/usr/libexec/getty守护程序的配置信息。第二,保存信息来告诉/sbin/init什么tty设备将有运行在它们系统上的getty进程。最后,你可以把端口初始化命令放在/etc/rc.serial脚本中。

UNIX上,关于拨号modem的想法主要有两种。一种是把本地接口配置成一个固定速度,以至一个远程用户拨号进入时都保持一个固定速度。这样配置的好处是远程用户总是可以立即看到一个系统的登陆界面。这种下降趋势是系统不知道一个用户真正的数据速度是多少,所以像eamcs全屏程序将不会调节屏幕刷新来确保对比较慢的连接有比较好的回应。

其他配置RS-232 modem的方法是随着远程用户连接的速度的变化而变化。例如,连接到modem的V.32bis(14.4 Kbit/s)连接可以使modem在19.2 Kbit/s上运行RS-232接口,而连接使得RS-232接口运行在2400 bit/s上。 因为getty不了解任何特殊的modem的连接速度报告,getty会给出一个登陆:在一个初始速度和检测字符的信息会作出回应。如果用户看到垃圾,假定它们知道它们键入了enter键,知道他看到了一个熟悉的命令行界面。 如果数据速度不相匹配,getty会把用户键入的任何东西都看作``junk'',设法回到下面的速度,然后给出登陆:命令行界面。很明显,这个登陆顺序看起来不如``locked-speed''的方法,但一个连接在低速度上的用户将更好地交互接收来自全屏幕程序的回应。

This section will try to give balanced configuration information, but is biased towards having the modem's data rate follow the connection rate.

20.4.4.1. /etc/gettytab

/etc/gettytab是一个用来配置getty信息的termcap风格的文件。请看看gettytab的联机手册了解完整的文件格式和功能列表。

20.4.4.1.1. 锁定速度的配置

如果你把你的modem的数据通信率锁定在一个特殊的速度上,你不需要对/etc/gettytab文件作任何变化。

20.4.4.1.2. 匹配速度的配置

你将需要在/etc/gettytab中设置一个记录来告诉getty你希望在modem上使用的速度。如果你的modem的速率是 2400 bit/s,则可以使用现有的 D2400 的记录。

#
# Fast dialup terminals, 2400/1200/300 rotary (can start either way)
#
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:

如果你有一个更高速度的modem,必须在/etc/gettytab中添加一个记录。这儿是一个你可以使用的一个最高19.2 Kbit/s的接口用在14.4 Kbit/s的modem上的记录:

#
# Additions for a V.32bis Modem
#
um|V300|High Speed Modem at 300,8-bit:\
        :nx=V19200:tc=std.300:
un|V1200|High Speed Modem at 1200,8-bit:\
        :nx=V300:tc=std.1200:
uo|V2400|High Speed Modem at 2400,8-bit:\
        :nx=V1200:tc=std.2400:
up|V9600|High Speed Modem at 9600,8-bit:\
        :nx=V2400:tc=std.9600:
uq|V19200|High Speed Modem at 19200,8-bit:\
        :nx=V9600:tc=std.19200:

This will result in 8-bit, no parity connections.

上面使用19.2 Kbit/s的连接速度的例子,也可以使用9600 bit/s(for V.32),2400 bit/s, 1200 bit/s,300 bit/s,直到19.2 Kbit/s。通信率的调节使用nx= (``next table'')来实现。每条线使用一个tc= (``table continuation'')的记录来加速对于一个特殊传输率的标准设置。

如果你有一个28.8 Kbit/s的modem,或你想使用它的14.4Kbit/s,需要使用一个更高的超过19.2 Kbit/s的通信速度的modem。这是一个启动57.6 Kbit/s的gettytab记录的例子:

#
# Additions for a V.32bis or V.34 Modem
# Starting at 57.6 Kbps
#
vm|VH300|Very High Speed Modem at 300,8-bit:\
        :nx=VH57600:tc=std.300:
vn|VH1200|Very High Speed Modem at 1200,8-bit:\
        :nx=VH300:tc=std.1200:
vo|VH2400|Very High Speed Modem at 2400,8-bit:\
        :nx=VH1200:tc=std.2400:
vp|VH9600|Very High Speed Modem at 9600,8-bit:\
        :nx=VH2400:tc=std.9600:
vq|VH57600|Very High Speed Modem at 57600,8-bit:\
        :nx=VH9600:tc=std.57600:

如果你有一个低速的CPU或一个庞大负载的系统,你没有16550A的串行端口,你可能会在57.6 Kbit/s上得到``sio'' ``silo''错误。

20.4.4.2. /etc/ttys

/etc/ttys文件的配置在例子 20-1中介绍过。配置modem是相似的,但我们必须指定一个不同的终端类型。锁定速度和匹配速度配置的通用格式是:

ttyd0   "/usr/libexec/getty xxx"   dialup on

上面的第一条是这个记录的设备特定文件——ttyd0意味着/dev/ttyd0是这个getty将被监视的文件。第二条"/usr/libexec/getty xxx"是将运行在设备上的进程init。第三条,dialup,是默认的终端类型。第四个参数,on,指出了线路是可操作的init。也可能会有第五个参数,secure,但它将只被用作拥有物理安全的终端(如系统终端)。

默认的终端类型可能依赖于本地参考。拨号是传统的默认终端类型,以至用户可以定制他们的登陆脚本来注意终端什么时候拨号,和自动调节它们的终端类型。然而,作者发现它很容易在它的站点上指定vt102作为默认的终端类型,既然用户刚才在它们的远程系统上使用的是VT102模拟器。

你对/etc/ttys作修改之后,你可以发送init进程给一个HUP信号来重读文件。你可以使用下面的命令来发送信号:

# kill -HUP 1
如果这是你的第一次设置系统,你可能要在发信号init之前等一下,等到你的modem正确地配置并连接好。

20.4.4.2.1. 锁定速度的配置

对于一个锁定速度的配置,你的ttys录必须有一个为getty提供固定速度的记录。对于一个速度被锁定在19.2kbit/s的modem,ttys录是这样的:

ttyd0   "/usr/libexec/getty std.19200"   dialup on

如果你的modem被锁定在一个不同的数据速度,为std.speed使用适当的速度来代替std.19200。确信你使用了一个在/etc/gettytab中列出的正确的类型。

20.4.4.2.2. 匹配速度的设置

在一个匹配速度的设置中,你的ttys录需要参考在/etc/gettytab适当的起始``auto-baud''记录。例如,如果你为一个以19.2 Kbit/s开始的可匹配速度的modem添加上面建议的记录,你的ttys录可能是这样的:

ttyd0   "/usr/libexec/getty V19200"   dialup on

20.4.4.3. /etc/rc.serial

高速modem,像V.32,V.32bis,和V.34 modems,需要使用硬件(RTS/CTS)流控制。你可以在/etc/rc.serial中添加stty命令来设置硬件流控制标记。

例如,在拨入和拨出初始设备的#1's(COM2:)串行端口上设置termios标记crtscts,下面这些行会被添加到/etc/rc.serial中:

# Serial port initial configuration
stty -f /dev/ttyid1 crtscts
stty -f /dev/cuaia1 crtscts

20.4.5. Modem设置

如果你有一个modem,它的参数能被存储在非易失性的RAM中,你将必须使用一个终端程序来设置参数。使用同样的通信速度来连接modem作为初始速度getty将使用和配置modem的非易失性RAM来匹配这些要求:

请读读你的modem的文档找到你需要用什么命令和DIP接口设置。

例如,要在一个USRobotics Sportster 14400的外置modem上设置上面的参数,可以用下面这些命令:

ATZ
AT&C1&D2&H1&I0&R2&W

你也可能想要在modem上寻找机会调节这个设置,例如它是否使用V.42bis和 MNP5压缩。

外置modem也有一些用来设置的DIP开关,也许你可以使用这些设置作为一个例子:

Result codes should be disabled/suppressed for dial-up modems to avoid problems that can occur if getty mistakenly gives a login: prompt to a modem that is in command mode and the modem echoes the command or returns a result code. This sequence can result in a extended, silly conversation between getty and the modem.

20.4.5.1. 锁定速度的配置

对于一个锁定速度的配置,你需要配置modem来获得一个不依赖于通信率的稳定的modem-to-computer的传输率。在一个USR Sportster 14400外置modem上,这些命令将锁定modem-to-computer的传输率:

ATZ
AT&B1&W

20.4.5.2. 匹配速度的配置

对于一个变速的配置,你需要配置modem调节它的串行端口传输率匹配接收的传输率。在一个USR Sportster 14400的外置modem上,这些命令将锁定modem的错误修正传输率适合命令要求的速度,但允许串行端口速度适应non-error-corrected的连接:

ATZ
AT&B2&W

20.4.5.3. 检查modem的配置

大多数高速的modem提供了用来查看当前操作参数的命令。在USR Sportster 14400外置modem上,命令ATI5显示了存储在非易失性RAM中的设置。要看看正确的modem操作参数,可以使用命令 ATZ 然后是 ATI4

如果你有一个不同牌子的modem,检查modem的使用手册看看如何双重检查你的modem的配置参数。

20.4.6. 问题解答

这儿是几个检查拨号modem的步骤。

20.4.6.1. 检查FreeBSD系统

把你的modem连接到FreeBSD系统,启动系统,然后,如果你的modem有一个指示灯,当登陆时看看modem的DTR指示灯是否亮:会在系统控制台出现命令行——如果它亮,意味着FreeBSD已经在适当的通信端口启动了一个getty进程,等待modem接收一个呼叫。

如果DTR指示灯不亮,通过控制台登陆到FreeBSD系统,然后执行一个ps ax命令来看FreeBSD是否正在正确的端口运行一个getty进程。你将在进程显示中看到像这样的一行:

  114 ??  I      0:00.10 /usr/libexec/getty V19200 ttyd0
  115 ??  I      0:00.10 /usr/libexec/getty V19200 ttyd1

如果你看到是这样的:

  114 d0  I      0:00.10 /usr/libexec/getty V19200 ttyd0

modem不接收呼叫,这意味着getty已经在通信端口打开了。这可以指出线缆有问题或modem错误配置,因为getty不能打开通信端口。

如果你没有看到任何getty进程等待打开想要的ttydN端口,在/etc/ttys中双击你的记录看看那儿是否有错误。另外,检查日志文件/var/log/messages看看是否有一些来自initgetty的关于一些问题的日志信息。如果有任何信息,仔细检查配置文件/etc/ttys/etc/gettytab,还有适当的设备文件/dev/ttydN,是否有错误,丢失记录,或丢失了设备指定文件。

20.4.6.2. 尝试接入Try Dialing In

设法拨入系统。确信使用8位,没有奇偶检验,在远程系统上的1阻止位。如果你不能立刻得到一个命令行,试试每隔一秒键入Enter。如果你仍没有看到一个登陆:设法发送一个BREAK。如果你正使用一个高速的modem来拨号,请在锁定拨号modem的接口速度后再试试。

如果你不能得到一个登陆:prompt,再检查一下/etc/gettytab,重复检查:

  • /etc/ttys中指定的初始可用的名称与/etc/gettytab的一个可用的相匹配。

  • 每个nx=记录与另一个gettytab可用名称匹配。

  • 每个tc=记录与另一个gettytab可用名称相匹配。

如果你拨号但FreeBSD系统上的modem没有回应,确信modem能回应电话。如果modem看起来配置正确了,通过检查modem的指示灯来确认DTR线连接正确。

如果你做了好几次,它仍然无法工作,打断一会,等会再试试。如果还不能工作,也许你应该发一封电子邮件给FreeBSD general questions 邮件列表 寻求帮助。

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