15 串口通信

15.1 概要

UNIX一直都是支持串口通信的。事实上,早期的UNIX系统就是利用串行线来输入和输出数据的。那时通常的“terminal”包括了一个每秒10个字符的串行打印机和键盘,现在这些已经发生了很大的变化。这章将介绍一些利用FreeBSD进行串行通信的方法。

读完这章,你将了解到:

             如何通过终端连接到你的FreeBSD系统。

             如何使用modem拨号到远程主机。

             如何允许远程用户通过modem登陆到你的系统。

             如何从串行控制台引导你的系统。

阅读这章之前,你应当了解:

             如何配置和安装一个新的内核。(第9章)

             理解UNIX的权限和进程。(第3章)

             通过你喜欢使用的串行设备(modem或多端口卡)访问技术参考手册。

15.2 介绍

15.2.1 术语

bit/s

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

DTE

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

DCE

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

RS-232

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

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

15.2.2线缆和端口

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

线缆

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

Null-modem 线缆

一根null-modem线缆会直接通过像“signal ground”这样的信号,而转换其他的信号。

如果你想自己选择线缆,你可以做一个使用null-modem的线缆。这个线缆在一个DB-25连接器上会显示RS-232C信号名和pin号码。

Signal

Pin #

 

Pin #

Signal

TxD

2

连接到

3

RxD

RxD

3

连接到

2

TxD

DTR

20

连接到

6

DSR

DSR

6

连接到

20

DTR

SG

7

连接到

7

SG

DCD

8

连接到

4

RTS

RTS

4

 

5

CTS

CTS

5

连接到

8

DCD

 

标准RS-232C线缆

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

端口

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

端口的种类

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

绝大多数的终端有DB25端口。个人计算机包括运行FreeBSDPC机,有DB25DB9端口。如果你的计算机有一个多端口的串行卡,你可以使用RJ-12 RJ-45端口。请仔细看看硬件的说明。

端口名称

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

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

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

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

15.2.3内核配置

FreeBSD默认支持4个串行端口。在MS-DOS下,这些是COM1:,COM2:,COM3:和COM4:。FreeBSD当前支持“dumb”多端口串行接口卡,如BocaBoard 10082016,与许多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章。

在你的内核配置文件中相关的设备行是这样的:

    device      sio0    at isa? port “IO_COM1” tty irq 4 vector siointr

    device      sio1    at isa? port “IO_COM2” tty irq 3 vector siointr

    device      sio2    at isa? port “IO_COM3” tty irq 5 vector siointr

    device      sio3    at isa? port “IO_COM4” tty irq 9 vector siointr

你可以注释掉或完全删除你没有的设备。请看看sio的有关如何为你的多端口主板写入配置信息的联机手册。如果你使用了一个不同版本的FreeBSD的配置文件,请小心点,因为设备的标记在两个版本之间已经改变了。

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

15.2.4设备指定文件

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

编译设备指定文件

注意:FreeBSD5.0已把自动创建设备接点的devfs文件系统作为是必需的。如果你在运行启用devfsFreeBSD版本,你就可以跳过这一节。

一个在/dev目录下的叫做MAKEDEVshell脚本管理着设备指定文件。要使用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 1438 /dev/cuaa1

    crw-rw——-    1 uucp     dialer    28 161 Feb 15 1438 /dev/cuaia1

    crw-rw——-    1 uucp     dialer    28 193 Feb 15 1438 /dev/cuala1

这些许可允许用户uucp和在组dialer上的用户使用呼出设备。

15.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帐户锁定状态设备的写入功能。

15.3 终端

当你在计算机控制台或是在一个连接的网络上时,终端提供了一个方便和低成本的访问FreeBSD系统的方法。这节描述了如何在FreeBSD上使用终端。

15.3.1终端的用法和类型

早期的UNIX系统没有控制台。人们通过将终端连接到计算机的串口来登陆和使用程序。它很像用一个modem和一些终端软件来拨号进入一个远程的系统只执行文本的工作。今天的PC已经可以使用高质量的图形了,但与今天的其他UNIX操作系统一样,建立一个登陆会话的能力仍然存在。通过使用一个终端连接到一个没有使用的串口,你就能登陆和运行任何文本程序或在X 视窗系统中运行一个xterm窗口程序。

对于商业用户,你可以配上任何终端连接到FreeBSD系统,然后把它们放在员工的桌面上。对于一个家庭用户,可以使用一台比较老的IBM PCMacintosh运行一个终端连接到一台运行FreeBSD的高性能机器上。

对于FreeBSD,有三种终端:

             Dumb终端

             充当终端的PC

             X 终端

下面一小节将描述每一种终端。

Dumb终端

Dumb终端需要专门的好几种硬件,让你通过串行线连接到计算机。它们被叫做“dumb”是因为它们只能够用来显示,发送和接收文本。你不能在它上面运行任何程序。

有好几百种dumb终端,包括Digital Equipment CorporationVT-100WyseWY-75。只有几种可以在FreeBSD上工作。一些高端的终端可以显示图形,但只有某些软件包可以使用这些高级特性。

充当终端的PC

如果一个dumb终端有足够的能力来显示,发送和接收文本,那任何个人计算机都可以作为一个dumb终端。你所需要的只是适当的线缆和一些终端模拟软件。

这样一个配置被广泛运用于家庭。例如,如果你的妻子忙于在你的FreeBSD系统控制台上工作,你也可以从一台低档的个人计算机登陆到FreeBSD系统执行一些文本的工作。

X 终端

X终端是最复杂的终端系统。它们通常需要使用以太网来连接。他们能显示任何X应用程序。我们介绍X终端只是为了感兴趣。然而,这章不会涉及X终端的安装,配置或使用。

15.3.2配置

这节描述了你在一个终端上启用一个登陆会话,需要在FreeBSD系统上配置些什么。假设你已经配置好了内核来支持串行端口,你就可以连接了。

回想起第7章,init进程依赖于系统启动时所有的处理控制和初始化。通过init来执行的一些任务将先读取/etc/ttys文件,然后在可用的终端上启用一个getty进程。getty进程可用来阅读一个登陆名和启动login程序。

然而,要为你的FreeBSD系统配置终端,你需要以root来执行下面的步骤:

1.    如果它不在那儿,你需要为串行端口在/dev目录下添加一行记录到/etc/ttys

2.    指定/usr/libexec/getty在端口上运行,然后从/etc/gettytab文件指定适当的getty类型。

3.    指定默认的终端类型。

4.    设置端口为on

5.    确定端口是否为secure

6.    迫使init重新读取/etc/ttys文件。

作为可选的步骤,你可以通过在/etc/gettytab中建立一个记录,在第2步创建一个定制的getty类型来使用。这章不会介绍如何做。你可以看看gettytabgetty的联机手册了解更多信息。

添加一个记录到/etc/ttys

/etc/ttys文件列出了你FreeBSD系统上允许登陆的所有端口。例如,第一个虚拟控制台ttyv0在这个文件中有一个记录。你可以使用这个记录登陆进控制台。这个文件也包含其他虚拟控制台的记录,串口,和伪ttys终端。对于一个硬连线的终端,只要列出串行端口的/dev记录而不需要/dev部分(例如,/dev/ttyv0可以被列为ttyv0)。

默认的FreeBSD安装包括一个支持最初四个串口ttyd0 ttyd3/etc/ttys文件。如果你从那些端口中某一个使用终端,你不需要添加另一个记录。

 

15-1.添加终端记录到/etc/ttys

假设我们连接两个终端给系统:一个Wyse-50和一个老的运行Procomm终端软件模拟一个VT-100终端的286IBM PC。在/etc/ttys文件中的相应的记录是这样的:

    ttyd1   “/usr/libexec/getty std.38400”   wy50   on   insecure

    ttyd5   “/usr/libexec/getty std.19200”  vt100  on  insecure

·           第一部分指定了终端指定文件的名称,它可以在/dev中找到。

*  第二部分是在这行执行的命令,通常是gettygetty初始化然后打开一行,设置速度,用户名的命令和执行登陆程序。

       getty程序在它的命令行接收一个参数(可选的),getty类型。一个getty类型会在终端行描述一个特征,像bps rateparitygetty程序从/etc/gettytab文件读取这些特征。

       文件/etc/gettytab包含了许多老的和新的终端行记录。在很多例子中,启动文本std的记录将用硬连线终端来工作。这些记录忽略了奇偶性。这是一个从110115200 bit/sstd记录。当然,你可以添加你自己的记录到这个文件。Gettytab的联机手册提供了更多的信息。

       当在/etc/ttys中设置getty类型的时候,确信在终端上的通信设置匹配。在我们的例子中,Wyse-50不使用奇偶性,用38400 bit/s来连接。286 PC不使用奇偶性,用19200bit/s来连接。

*  第三部分是通常连接到那个tty行的终端类型。对于拨号端口,unknowndialup通常被用在这个地方。对于硬连线的终端,终端类型不会改变,所以你可以从termcap数据库文件中放置一个真正的终端类型。

在我们的例子中,Wyse-50使用真正的终端类型,而运行Procomm286 PC将被设置成在VT-100上的模拟。

*  如果端口被启用,可以指定第四个部分。在第二部分,把它放在这儿将执行初始化进程来启动程序getty。如果你在这部分拖延,将没有getty,在端口上因此就没有登陆。

*  最后部分被用来指定端口是否安全。标记一个安全的端口意味着你信任它允许用root帐户从那个端口登陆。不安全的端口不允许root登陆。在一个不安全的端口上,用户必须用无特权的帐户登陆,然后使用su或一个相似的机制来获得超级用户的权限。

 

重新读取/etc/ttys来强制init

/etc/ttys文件做一个必要的修改后,你必须发送一个SIGHUP信号给初始化进程来迫使它重新读取配置文件,例如:

    # kill -HUP 1

注意:init总是系统运行时的第一个进程,因此它总是PID 1

如果能够正确设置,所有的线缆都是适当的,终端将可以启用了,然后一个getty进程将在每个终端运行,你将在你的终端上看到登陆命令行。

15.3.3你的连接可能出现的问题

即使你小心翼翼地注意细节,你仍然可能会在设置终端时出错。这儿有一个有关问题和解决办法的列表:

1.         没有登陆命令出现:

确定终端被嵌入和打开了。如果把一台个人计算机充当一个终端,确信终端模拟软件运行在正确的串口上。

确信线缆被稳固地连接在终端和FreeBSD计算机上。确信用了正确的电缆。

确定终端和FreeBSD的传输速度和奇偶设置已经一致了。如果你有一个图像显示终端,确信对比度已经调节好了。如果它是一个可打印的终端,确信纸张和墨水已经准备好了。

确定一个getty进程正在运行和服务终端。例如,可以用ps命令得到运行getty程序的列表,键入:

    # ps -axww|grep getty

你将看到一个终端的记录。例如,下面的显示表明一个getty正在第二个串行端口ttyd1运行,正在/etc/gettytab中使用std.38400的记录:

    22189  d1  Is+    000.03 /usr/libexec/getty std.38400 ttyd1

如果没有getty进程运行,确信你已经在/etc/ttys中启用了端口。在修改完ttys文件后,记得运行kill -HUP 1

2.         出现一个垃圾而不是一个登陆命令行

确信终端和FreeBSD使用相同的bit/s传输率和奇偶校验设置。检查一下getty进程确信当前使用正确的getty类型。如果没有,编辑/etc/ttys然后运行kill -HUP 1

3.         当键入密码时,字符两个两个出现

将终端(或终端模拟软件)从“half duplex”“local echo”换成“full duplex”

15.4拨入服务

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

15.4.1外置vs.内置modem

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

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

Modem和线缆

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

             Transmitted DataSD

             Received DataRD

             Request to SendRTS

             Clear to SendCTS

             Data Set ReadyDSR

             Data Terminal ReadyDTR

             Carrier DetectCD

             Signal GroundSG

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

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

15.4.2串行接口的考虑

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

15.4.3 快速预览

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

     4850 ??  I      000.09 /usr/libexec/getty V19200 ttyd0

当一个用户拨上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-232 modem的方法是随着远程用户连接的速度的变化而变化。例如,连接到modemV.32bis14.4 Kbit/s)连接可以使modem19.2 Kbit/s上运行RS-232接口,而连接使得RS-232接口运行在2400 bit/s上。

因为getty不了解任何特殊的modem的连接速度报告,getty会给出一个登陆:在一个初始速度和检测字符的信息会作出回应。如果用户看到垃圾,假定它们知道它们键入了enter键,知道他看到了一个熟悉的命令行界面。

如果数据速度不相匹配,getty会把用户键入的任何东西都看作“junk”,设法回到下面的速度,然后给出登陆:命令行界面。很明显,这个登陆顺序看起来不如locked-speed的方法,但一个连接在低速度上的用户将更好地交互接收来自全屏幕程序的回应。

/etc/gettytab

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

锁定速度的配置

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

匹配速度的配置

你将需要在/etc/gettytab中设置一个记录来给出getty的你希望用到modem上有关速度的信息。如果你有一个2400 bit/smodem,可以使用已存在的D2400的记录。

    #

    # Fast dialup terminals 2400/1200/300 rotary can start either way

    #

    D2400|d2400|Fast-Dial-2400\

            nx=D1200tc=2400-baud

    3|D1200|Fast-Dial-1200\

            nx=D300tc=1200-baud

    5|D300|Fast-Dial-300\

            nx=D2400tc=300-baud

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

    #

    # Additions for a V.32bis Modem

    #

    um|V300|High Speed Modem at 3008-bit\

            nx=V19200tc=std.300

    un|V1200|High Speed Modem at 12008-bit\

            nx=V300tc=std.1200

    uo|V2400|High Speed Modem at 24008-bit\

            nx=V1200tc=std.2400

    up|V9600|High Speed Modem at 96008-bit\

            nx=V2400tc=std.9600

    uq|V19200|High Speed Modem at 192008-bit\

            nx=V9600tc=std.19200

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

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

    #

    # Additions for a V.32bis or V.34 Modem

    # Starting at 57.6 Kbit/s

    #

    vm|VH300|Very High Speed Modem at 3008-bit\

            nx=VH57600tc=std.300

    vn|VH1200|Very High Speed Modem at 12008-bit\

            nx=VH300tc=std.1200

    vo|VH2400|Very High Speed Modem at 24008-bit\

            nx=VH1200tc=std.2400

    vp|VH9600|Very High Speed Modem at 96008-bit\

            nx=VH2400tc=std.9600

    vq|VH57600|Very High Speed Modem at 576008-bit\

            nx=VH9600tc=std.57600

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

/etc/ttys

/etc/ttys文件的配置在例15-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正确地配置并连接好。

锁定速度的配置

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

    ttyd0   “/usr/libexec/getty std.19200”   dialup on

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

匹配速度的设置

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

    ttyd0   “/usr/libexec/getty V19200”   dialup on

/etc/rc.serial

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

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

    # Serial port initial configuration

    stty -f /dev/ttyid1 crtscts

    stty -f /dev/cuai01 crtscts

15.4.5 Modem设置

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

             CD asserted when connected

             DTR asserted for operation; dropping DTR hangs up line and resets modem

             CTS transmitted data flow control

             Disable XON/XOFF flow control

             RTS received data flow control

             Quiet mode no result codes

             No command echo

请读读你的modem的文档找到你需要用什么命令和DIP接口设置。例如,要在一个USRobotics Sportster 14400的外置modem上设置上面的参数,可以用下面这些命令:

    ATZ

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

你也可能想要在modem上寻找机会调节这个设置,例如它是否使用V.42bis MNP5压缩。USR Sportster 14400外置modem也有一些用来设置的DIP开关,也许你可以使用这些设置作为一个例子:

             Switch 1 UP -- DTR Normal

             Switch 2 Do not careVerbal Result Codes/Numeric Result Codes

             Switch 3 UP -- Suppress Result Codes

             Switch 4 DOWN -- No echooffline commands

             Switch 5 UP -- Auto Answer

             Switch 6 UP -- Carrier Detect Normal

             Switch 7 UP -- Load NVRAM Defaults

             Switch 8 Do not careSmart Mode/Dumb Mode

锁定速度的配置

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

    ATZ

    AT&B1&W

匹配速度的配置

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

    ATZ

    AT&B2&W

检查modem的配置

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

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

15.4.6 问题解答

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

检查FreeBSD系统

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

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

      114 ??  I      000.10 /usr/libexec/getty V19200 ttyd0

      115 ??  I      000.10 /usr/libexec/getty V19200 ttyd1

如果你看到是这样的:

      114 d0  I      000.10 /usr/libexec/getty V19200 ttyd0

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

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

尝试接入

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

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

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

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

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

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

如果你做了好几次,它仍然无法工作,打断一会,等会再试试。如果还不能工作,也许你应该发一封电子邮件给<[email protected]>寻求帮助。

15.5拨出设备

下面将让你的主机通过modem连接到另一台计算机上。这只要适当地建立一个终端作为远程主机就可以。

这可以用来登陆进一个BBS

如果你用PPP有问题,那这种连接可以用来从internet上下载一个文件。如果你必须FTP一些东西,而PPP断了,使用终端会话来FTP它们。然后使用zmodem来把它们传输到你的机器上。

15.5.1 我的Stock Hayes Modem不被支持,我该怎么办?

事实上,联机手册对于这个的描述已经过期了。有一个通用的Hayes拨号已经建立在里面了。只要在你的/etc/remote文件中使用at=hayes

Hayes驱动器不够聪明只能认出一些比较新的modem的高级特性——BUSYNO DIALTONE,或CONNECT 115200的信息将被搞乱。当你使用的时候,你必须把这些信息关掉。

另外,拨号的延迟是60秒。你的modem可能使用另外的时间或提示认为有其他的通信问题。试试ATS7=45&W

注意:实际上tip不支持所有的Hayes modems。解决方法是编辑/usr/src/usr.bin/tip/tip目录中的tipconf.h文件。很明显,你需要它的源代码才能这样做。

把行#define HAYES 0修改成#define HAYES 1。然后makemake install。这样就好了。

15.5.2我如何键入这些AT命令?

/etc/remote文件中编译一个叫做“direct“的记录。例如,如果你的modem连接在第一个串行端口,/dev/cuaa0,就加入下面这行:

    cuaa0dv=/dev/cuaa0br#19200pa=none

使用br命令来启用你modem支持的最高传输速度。然后键入tip cuaa0,你就可以连接到你的modem了。如果在你的系统上没有/dev/cuaa0,可以这样:

    # cd /dev

    # MAKEDEV cuaa0

或以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|Dial any phone number at 115200 bit/s\

            dv=/dev/cuaa0br#115200at=hayespa=nonedu

    tip57600|Dial any phone number at 57600 bit/s\

            dv=/dev/cuaa0br#57600at=hayespa=nonedu

然后,你可以这样:

    # tip -115200 5551234

如果你更喜欢cu而不是tip,使用一个通用的cu记录:

    cu115200|Use cu to dial any number at 115200bit/s\

            dv=/dev/cuaa1br#57600at=hayespa=nonedu

然后键入:

        # cu 5551234 -s 115200

15.5.5通过一个终端服务器我能访问许多主机

不用等待,除非你每次连接需要键入CONNECT <host>,使用tipcm功能。例如,在/etc/remote中的这些记录:

    pain|pain.deep13.com|Forrester's machine\

            cm=CONNECT pain\ntc=deep13

    muffin|muffin.deep13.com|Frank's machine\

            cm=CONNECT muffin\ntc=deep13

    deep13Gizmonics Institute terminal server\

            dv=/dev/cuaa2br#38400at=hayesdupa=nonepn=5551234

将让你键入tip paintip muffin来连接主机pain muffin,和tip deep13连接到终端服务器。

15.5.6我通过一个终端服务器访问了很多主机。

除非每次都要等到你连接到主机然后键入CONNECT <host>,否则使用tipcm功能。例如,在/etc/remote中的这些记录:

pain|pain.deep13.com|Forrester's machine:\

:cm=CONNECT pain\n:tc=deep13:

muffin|muffin.deep13.com|Frank's machine:\

:cm=CONNECT muffin\n:tc=deep13:

deep13:Gizmonics Institute terminal server:\

:dv=/dev/cuaa2:br#38400:at=hayes:du:pa=none:pn=5551234:

将让你键入tip paintip muffin连接到主机painmuffin,和tip deep13连接到终端服务器。

15.5.7 tip能为每个站点试用多个线路吗?

经常有一个问题,一个大学有几个modem线路,和几千个学生设法使用它们....../etc/remote中为你的大学作一个记录,然后为pn功能使用@标记:

big-university:\

:pn=\@:tc=dialout

dialout:\

:dv=/dev/cuaa3:br#9600:at=courier:du:pa=none:

接着,在/etc/phones中列出大学的电话号码:

big-university 5551111

big-university 5551112

big-university 5551113

big-university 5551114

Tip将按顺序试用每一个,然后就停止。如果想继续测试,隔一段时间再运行tip

15.5.8为什么我必须键入Ctrl+P两次才发送Ctrl+P一次?

Ctrl+P是默认的强制字符,被用来告诉tip下一个字符是文字的数据。你可以用~s给任何其他的字符设置强制字符,这意思是设置一个变量

在新的一行键入~sforce= single-charsingle-char是任何简单的字符。如果你遗漏了single-char,那强制字符就是空字符,这可以键入Ctrl+2Ctrl+Space来完成。一个更好的single-charShift+Ctrl+6,这只被使用在一些终端服务器上。

通过在你的$HOME/.tiprc文件中指定下面这行,就可以得到你想要的任何强制字符:

force=<single-char>

15.5.9 突然我键入的每一样东西都变成了大写??

你必须已经键入了Ctrl+Atip“raise character”,会临时地指定成坏掉的caps-lock键。

使用上面的~s来合理地设置各种raisechar。事实上,如果你从来不想使用这些特性的话,你可以用同样的方法设置强制字符,

这儿有一个很好的.tiprc文件的例子,对Emacs用户来说,必须键入Ctrl+2Ctrl+A

force=^^

raisechar=^^

^^Shift+Ctrl+6

15.5.10我如何用tip做文件传输?

如果你正在与另一台UNIX系统对话,你可以用~p(put)~t(take)发送和接收文件。这些命令可以在远程系统上运行catecho来接收和发送文件。语法是这样的:

~p local-file [remote-file]

~t remote-file [local-file]

不需要错误检查,所以你使用另外一个协议,如zmodem

15.5.11 我如何用tip运行zmodem

要接收这些文件,可以在远程终端启动发送程序。然后,键入~C rz在本地开始接收他们。要发送文件,可以在远程终端启动接收程序。然后,键入~C rz files把他们发送到远程系统。

15.6设置串行控制台

15.6.1 介绍

FreeBSD可以通过一个串口只使用一个哑(dumb)终端就可以启动一个系统。这样一种配置只有两种人能使用:希望在机器上安装FreeBSD的系统管理员,他没有键盘或显示器,还有就是要调试内核或设备驱动程序的开发人员。

就象第7章描述的,FreeBSD可以使用一个三步的启动过程。最先两步被储存在FreeBSD启动磁盘的启动slice的启动代码块中。启动块然后就被加载,接着运行第三步启动引导器(/boot/loader)。

为了设置串行控制台,你必须配置启动代码块,启动引导器代码和内核。

15.6.2串行控制台的设置

1.    准备一个串行线缆。

你需要使用一个null-modem的线缆或一个标准的串行线和一个null-modem适配器。看看第15.2.2节有关串行线的讨论。

2.    拔去你的键盘。

绝大多数的PC在开机检测的时候会检测到键盘,如果键盘没有被检测到,将会出现一个错误。一些机器会提示丢失键盘,就不会继续引导系统。

如果你的计算机出现错误,但仍能继续启动,你可以不必理它。

如果你的计算机没有键盘拒绝启动,那你需要配置BIOS来避免这个错误。看看你的主板的使用说明了解更多细节。

提示:BIOS中设置键盘Not installed并不意味着你不能使用键盘。这样做只是告诉BIOS不要在机器开机检测时检测键盘,以至不会提示说系统找不到键盘。即使你设置了Not installed,只要把你的键盘插上去仍然可以使用。

注意:如果你的系统有一个PS/2鼠标,如果机会好的话,你也可以象键盘一样把它拔下来,这是因为PS/2鼠标与键盘的一些硬件是共享的,你的鼠标插上去,系统会认为键盘仍在那儿。

3.    插一个哑(dumb)终端到COM1:(sio0)。

如果你没有一个哑终端,你可以使用一个比较老的带有一个modem程序的PC/XT机器,或在其他UNIX机器上的串口。如果你没有COM1:(sio0),去找一个。这时,你没有办法只能选择COM1:来启动系统。如果你已经在另一台设备上使用COM1:,你必须临时删除那个设备,然后安装一个新的系统启动块和内核。

4.    确信你的内核配置文件已经为COM1:(sio0)设置了适当的标记:

有关的标记是:

0x10

启用控制台支持。其他的控制台标记会被忽略,除非它被设置了。现在,绝大多数的设置都有控制台的支持。这个标记的第一个就是首选的。这个单独选项是不能确保串口适用于控制台的,设置下面的标记或加上下面描述的-h选项,和这个放在一起。

0x20

不管下面有没有讨论,都迫使这个选项支持控制台。这个标记在FreeBSD 2.X中替换了COMCONSOLE选项。标记0x20必须和0x10一起使用。

0x40

保存这个设置,确保这个设置不能用于普通访问。你不要把这个标记放在你要使用的串口设置中。这个标记的唯一的用处是在进行远程内核调试时用于指派单位。看看开发人员手册了解更多信息。

注意:FreeBSD 4.0-CURRENT和以后的版本中,标记0x40通常是不同的,有另一个标记可以来指定一个串口用于远程调试。

例如:

    device sio0 at isa? port “IO_COM1” tty flags 0x10 irq 4

看看sio的联机手册了解更多信息。如果标记没有被设置,你必须运行UserConfig或重新编译内核。

5.    在启动磁盘的a分区的根目录创建一个boot.config文件。

这个文件将指导启动块代码如何启动系统。为了激活串行控制台,你必须有一个或多个下面的选项——如果你要多个选项,在同一行必须都包含它们:

-h

切换内部和串行控制台。你使用这个来交换控制台设备。例如,如果你从内部控制台启动,你可以使用-h来直接使用启动引导器和内核来使用串口作为它的控制台设备。另外,如果你从串口启动,你可以使用-h来告诉启动引导器和内核使用显示设备作为控制台。

-D

切换单一和双重控制台配置。在单一配置中,控制台将是本机的控制台(显示设备)或串口。在双重控制台配置中,显示设备和串口将同时成为控制台,无论-h的选项的情形。然而,双控制台配置只在启动块运行的过程中起作用。一旦启动引导器获得控制,由-h选项指定的控制台将成为唯一的控制台。

-P

在启动时,探测键盘。如果键盘找不到,-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中的选项。

选项

定位信息

none

internal console

-h

serial console

-D

serial and internal consoles

-Dh

serial and internal consoles

-P keyboard present

internal console

-P keyboard absent

serial console

 

出现上面信息后,在启动块加载启动引导器和更多信息被映到屏幕之前将有一个小小的停顿。在通常情况下,你不需要打断启动进程,但为了确信设置是否正确,你也可以这样做。

键入任何键,而不是Enter,控制台会打断启动进程。启动块将进入命令行模式。你看到:

           >> FreeBSD/i386 BOOT

           Default 0wd0a/boot/loader

           boot

检验上面出现的信息,可能是串口,或内部控制台,或两个都是,完全取决于你在/boot.config中的选项。如果信息出现在正确的控制台,键入Enter继续启动进程。

如果你要使用串行控制台,但你没有看到命令行,那可能设置有问题。这时,你键入-h然后单击Enter/Return来告诉启动块(然后是启动引导器和内核)选择串口作为控制台。一旦系统起来了,回去检查一下是什么出问题了。

启动引导器加载完后,你将进入启动进程的第三步,你仍然可以在启动引导器通过设定你喜欢的环境来切换内部控制台和串行控制台。看看第15.6.5节。

15.6.3 摘要

这是几个在这章要讨论的几个设置和选择的控制台的摘要。

1 你为sio0设置标记为0x10

    device sio0 at isa? port “IO_COM1” tty flags 0x10 irq 4

 

/boot.config中的选项

启动块过程中的控制台

启动引导器过程中的控制台

内核中的控制台

 

nothing

internal

internal

internal

-h

serial

serial

serial

-D

serial and internal

internal

internal

-Dh

serial and internal

serial

serial

-Pkeyboard present

internal

internal

internal

-Pkeyboard absent

serial and internal

serial

serial

 

2:你为sio0设置标记为0x30

    device sio0 at isa? port “IO_COM1” tty flags 0x30 irq 4

/boot.config中的选项

启动块过程中的控制台

启动引导器过程中的控制台

内核中的控制台

 

nothing

internal

internal

serial

-h

serial

serial

serial

-D

serial and internal

internal

serial

-Dh

serial and internal

serial

serial

-Pkeyboard present

internal

internal

serial

-Pkeyboard absent

serial and internal

serial

serial

 

15.6.4串行控制台的提示

设置一个快速的串口速度

默认的串口被设置成9600波特,8位,没有奇偶校验,1个停止位。如果你希望改变速度,你必须重新编译启动块。在/etc/make.conf中添加下面一行,然后编译新的启动块:

    BOOT_COMCONSOLE_SPEED=19200

如果串行控制台用其他方法来配置而不是在启动时用-h,或内核使用的串行控制台与启动块使用的不同,那你必须在内核配置文件中添加下面这行,然后编译内核:

    options CONSPEED=19200

使用串口而不是sio0作为控制台

使用串口而不是sio0作为控制台需要做一些重编译。如果你无论如何都要使用另一个串口,重新编译启动块,启动引导器和内核。

1.         得到内核源代码(看第19章)。

2.         编辑/etc/make.conf文件,然后设置BOOT_COMCONSOLE_PORT作为你要使用(0x3F8 0x2F80x3E8 or 0x2E8)端口的地址。只有sio0sio3COM1through COM4:)能被使用。多接口串行卡将不会工作。不需要任何中断设置。

3.         创建一个定制的内核配置文件,在你要使用的串口添加合适的标记。例如,如果要将sio1COM2:)作为控制台:

device sio1 at isa? port “IO_COM2” tty flags 0x10 irq 3

device sio1 at isa? port “IO_COM2” tty flags 0x30 irq 3

其他端口的控制台标记也不要设。

4.         重新编译和安装启动块:

# cd /sys/boot/i386/boot2

# make

# make install

5.         重编译和安装启动引导器:

# cd /sys/boot/i386/loader

# make

# make install

6.         重建和安装内核。

7.         disklabel将启动块写到启动磁盘上,然后从新内核启动。

通过串行线键入DDB调试器

如果你想通过串行控制台进行内核调试,你需要在编译内核时加上下面选项:

    options BREAK_TO_DEBUGGER

    options DDB

在串行控制台上得到一个登陆命令行

你可能希望通过串行线得到一个登陆命令行,现在你可以看到启动信息,通过串行控制台键入内核调试信息。可以这样做。

用一个编辑器打开/etc/ttys文件,然后定位到下面的行:

    ttyd0 “/usr/libexec/getty std.9600” unknown off secure

    ttyd1 “/usr/libexec/getty std.9600” unknown off secure

    ttyd2 “/usr/libexec/getty std.9600” unknown off secure

    ttyd3 “/usr/libexec/getty std.9600” unknown off secure

ttyd0ttyd3相当于COM1COM4。可以打开或关闭某个端口。如果你已经改变了串口的速度,你必须修改标准的9600与当前的例如19200相匹配。

你也可以改变终端的类型从不知名的到你串行终端的真实类型。编辑完这个文件,你必须kill -HUP 1来使这个修改生效。

15.6.5从启动引导器修改控制台

前面一节描述了如何通过调整启动块来设定串行控制台。这节将讲到在启动引导器中通过键入一些命令和环境变量来指定控制台。由于启动引导器会被启动进程的第三步所调用,启动块以后,在启动引导器中的设置将忽略在启动块中的设置。

设定串行控制台

你可以很容易地指定启动引导器和内核来使用串行控制台,只需要在/boot/loader.rc中写入下面这行:

    set console=comconsole

你最好把上面一行放在文件的第一行,以至于尽早地在启动时看到串行控制台的启动信息。同样地,你可以指定内部控制台为:

    set console=vidconsole

如果你不设置启动引导环境变量控制台,启动引导器和内核将使用在启动块时用-h选项指定的控制台。

在版本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的联机手册了解更多信息。

使用串口而不是sio0作为控制台

你需要使用一个串口而不是sio0重新编译启动引导器作为串行控制台。下面的步骤跟第15.6.4.2节描述的相似。

15.6.6 警告

这篇文章本意是想告诉人们如何设定没有显示设备或键盘的专用服务器。不幸的是,绝大多数系统没有键盘可以让你启动,而没有显示设备就不让你启动。使用AMI BIOS的机器可以通过在CMOS中将“graphics adapter”项设为“Not installed”来在启动时不需要显示适配器。然而,许多机器不支持这个选项,如果你的系统没有显示硬件就拒绝启动。对于这些机器,即使你没有显示器,你也必需在机器上插上显示适配器。建议你试试采用AMI BIOS的机器。******