第二十九章 串行通信29.1. 简介29.2. 串行术语和硬件29.2.1. 串行电缆和端口29.2.2. 串口配置29.3. 终端29.3.1. 终端设置29.3.2. 连接故障排除29.4. 拨入服务29.4.1. 调制解调器设置29.4.2. 排错29.5. 拨出服务29.5.1. 使用Stock Hayes调制解调器29.5.2. 使用AT命令29.5.3. @符号不起作用29.5.4. 从命令行拨号29.5.5. 设置bps速率29.5.6. 通过终端服务器访问多个主机29.5.7. tip 使用多行29.5.8. 使用Force角色29.5.9. 大写字符29.5.10. 使用 tip 传输文件29.5.11. 将zmodem与 tip 结合使用?29.6. 设置串行控制台29.6.1. 快速串行控制台配置29.6.2. 深入串行控制台配置29.6.3. 设置更快的串行端口速度29.6.4. 从串行线进入DDB调试器
UNIX®一直支持串行通信,因为最早的UNIX®机器依赖串行线进行用户输入和输出。与普通终端由每秒10个字符的串行打印机和键盘组成的时代相比,情况发生了很大变化。本章介绍了在FreeBSD上使用串行通信的一些方法。
阅读本章以了解:
• 如何将终端连接到FreeBSD系统。 • 如何使用调制解调器拨出到远程主机。 • 如何允许远程用户使用调制解调器登录FreeBSD系统。 • 如何从串行控制台启动FreeBSD系统。
在阅读本章之前: • 知道如何配置和安装自定义内核。 • 了解FreeBSD的权限和流程。 • 可以访问FreeBSD使用的串行硬件的技术手册。
串行通信中经常使用以下术语:
bps
每秒比特数(Bits per Second,bps)是数据传输的速率。
DTE
数据终端设备(Data Terminal Equipment,DTE)是串行通信中的两个端点之一。一个例子是计算机。
DCE
数据通信设备(Data Communication Equipment,DCE)是串行通信中的另一个端点。通常,它是调制解调器或串行终端。
RS-232
定义硬件串行通信的原始标准。此后更名为 TIA-232 。
当提及通信数据速率时,本节不使用术语 baud(波特)。Baud是指在一段时间内进行的电气状态转换的次数,而 bps 是正确的术语。
要将串行终端连接到FreeBSD系统,需要计算机上的串行端口和连接到串行设备的正确电缆。已经熟悉串行硬件和布线的用户可以安全地跳过本节。
有几种不同类型的串行电缆。最常见的两种类型是零调制解调器电缆和标准RS-232电缆。硬件文件应描述所需的电缆类型。
这两种类型的电缆在电线连接到连接器的方式上有所不同。每条线代表一个信号,定义的信号汇总在【表41. RS-232C信号名称】中。标准串行电缆直接传递所有RS-232C信号。例如,电缆一端的“传输数据”引脚连接到另一端的“发送数据”引脚。这是用于将调制解调器连接到FreeBSD系统的电缆类型,也适用于某些终端。
零调制解调器(null-modem)电缆将一端连接器的“传输数据”引脚与另一端的“接收数据”引脚切换。连接器可以是DB-25或DB-9。
零调制解调器电缆可以使用【表42. DB-25至DB-25零调制解调器电缆】、【表43. DB-9至DB-9零调制解调器电缆】和【表44. DB-9至DB-25零调制解调器电缆】中总结的引脚连接来构建。虽然标准要求使用直通引脚1到引脚1的“保护接地”线,但通常会被省略。一些端子仅使用引脚2、3和7工作,而另一些则需要不同的配置。如有疑问,请参阅硬件文档。
表41. RS232C信号名称
| 首字母缩写 | 名称 |
|---|---|
| RD | Received Data(接收数据) |
| TD | Transmitted Data(发送数据) |
| DTR | Data Terminal Ready(数据终端就绪) |
| DSR | Data Set Ready(数据集就绪) |
| DCD | Data Carrier Detect(数据载体检测) |
| SG | Signal Ground(信号地) |
| RTS | Request to Send(请求发送) |
| CTS | Clear to Send(清除以发送) |
表42. DB-25至DB-25零调制解调器电缆
| 信号 | 引脚号 | 引脚号 | 信号 | |
|---|---|---|---|---|
| SG | 7 | 连接至 | 7 | SG |
| TD | 2 | 连接至 | 3 | RD |
| RD | 3 | 连接至 | 2 | TD |
| RTS | 4 | 连接至 | 5 | CTS |
| CTS | 5 | 连接至 | 4 | RTS |
| DTR | 20 | 连接至 | 6 | DSR |
| DTR | 20 | 连接至 | 8 | DCD |
| DSR | 6 | 连接至 | 20 | DTR |
| DCD | 8 | 连接至 | 20 | DTR |
表43. DB-9至DB-9零调制解调器电缆
| 信号 | 引脚号 | 引脚号 | 信号 | |
|---|---|---|---|---|
| RD | 2 | 连接至 | 3 | TD |
| TD | 3 | 连接至 | 2 | RD |
| DTR | 4 | 连接至 | 6 | DSR |
| DTR | 4 | 连接至 | 1 | DCD |
| SG | 5 | 连接至 | 5 | SG |
| DSR | 6 | 连接至 | 4 | DTR |
| DCD | 1 | 连接至 | 4 | DTR |
| RTS | 7 | 连接至 | 8 | CTS |
| CTS | 8 | 连接至 | 7 | RTS |
表44. DB-9至DB-25零调制解调器电缆
| 信号 | 引脚号 | 引脚号 | 信号 | |
|---|---|---|---|---|
| RD | 2 | 连接至 | 3 | TD |
| TD | 3 | 连接至 | 2 | RD |
| DTR | 4 | 连接至 | 6 | DSR |
| DTR | 4 | 连接至 | 8 | DCD |
| SG | 5 | 连接至 | 7 | SG |
| DSR | 6 | 连接至 | 20 | DTR |
| DCD | 1 | 连接至 | 20 | DTR |
| RTS | 7 | 连接至 | 5 | CTS |
| CTS | 8 | 连接至 | 4 | RTS |
xxxxxxxxxx当一端的【一个】引脚连接到另一端的【一对】引脚时,通常用一根短线连接连接器中的这对引脚,用一根长线连接另一个引脚。串行端口是FreeBSD主机和终端之间传输数据的设备。存在几种串行端口。在购买或建造电缆之前,请确保它适合终端和FreeBSD系统上的端口。
大多数终端都有DB-25端口。个人电脑可能有DB-25或DB-9端口。多端口串行卡可以具有RJ-12或RJ-45端口。有关端口类型的规格,请参阅硬件随附的文档,或目视验证端口类型。
在FreeBSD中,每个串行端口都是通过 /dev 中的一个条目访问的。有两种不同类型的条目:
call-in 端口名为 /dev/ttyuN ,其中 N 是端口号,从零开始。如果终端连接到第一个串行端口(COM1),请使用 /dev/ttyu0 来指代该终端。如果终端位于第二个串行端口(COM2)上,请使用 /dev/ttyu1 ,依此类推。通常,呼入(call-in)端口用于终端。呼入端口要求串行线断言“数据载体检测”信号才能正常工作。call-out 端口命名为 /dev/cuauN ,在FreeBSD 7.X及更低版本上命名为 /dev/cuadN 。呼出(call-out)端口通常不用于终端,而是用于调制解调器。如果串行电缆或终端不支持"Data Carrier Detect"(数据载体检测)信号,则可以使用呼出端口。FreeBSD还提供初始化设备(/dev/ttyuN.init 和 /dev/cuauN.init 或 /dev/cuadN.init )和锁定设备(/dev/ttyuN.lock 和 /dev/cuauN.lock 或 /dev/cuadN.lock )。初始化设备用于在每次打开端口时初始化通信端口参数,例如用于使用RTS/CTS信令进行流控制的调制解调器的 crtscts 。锁定装置用于锁定端口上的标志,以防止用户或程序更改某些参数。有关终端设置、锁定和初始化设备以及设置终端选项的信息,请分别参阅 termios(4) 、uart(4) 和 stty(1) 。
默认情况下,FreeBSD支持四个串行端口,通常称为COM1、COM2、COM3和COM4。FreeBSD还支持哑多端口串行接口卡(dumb multi-port serial interface cards),如BocaBoard 1008和2016,以及更智能的多端口卡,如Digiboard制造的卡。但是,默认内核只查找标准COM端口。
要查看系统是否识别串行端口,请查找以 uart 开头的系统启动消息:
xxxxxxxxxx# grep uart /var/run/dmesg.boot如果系统无法识别所有需要的串行端口,可以在 /boot/device.hints 中添加其他条目。此文件已包含COM1的 hint.uart.0.* 条目和COM2的 hint.uart.1.* 条目。为COM3添加端口条目时,使用 0x3E8 ,为COM4添加端口条目的时候,使用 0x2E8 。常见的IRQ地址是COM3的 5 和COM4的 9 。
要确定端口使用的默认终端I/O设置集,请指定其设备名称。此示例确定COM2上呼入端口的设置:
xxxxxxxxxx# stty -a -f /dev/ttyu1串行设备的系统范围初始化由 /etc/rc.d/serial 控制。此文件影响串行设备的默认设置。要更改设备的设置,请使用 stty 。默认情况下,更改的设置将一直有效,直到设备关闭,当设备重新打开时,它将恢复到默认设置。要永久更改默认设置,请打开并调整初始化设备的设置。例如,要为ttyu5打开 CLOCAL 模式、8位通信和 XON/XOFF 流控制,请键入:
xxxxxxxxxx# stty -f /dev/ttyu5.init clocal cs8 ixon ixoff为防止应用程序更改某些设置,请调整锁定装置。例如,要将ttyu5的速度锁定为57600 bps,请键入:
xxxxxxxxxx# stty -f /dev/ttyu5.lock 57600现在,任何打开ttyu5并试图更改端口速度的应用程序都将被限制在57600 bps。
终端提供了一种方便且低成本的方式,可以在不在计算机控制台或连接的网络上访问FreeBSD系统。本节介绍如何将终端与FreeBSD一起使用。
最初的UNIX®系统没有控制台。相反,用户通过连接到计算机串行端口的终端登录并运行程序。
在串行端口上建立登录会话的能力仍然存在于今天几乎所有类似UNIX®的操作系统中,包括FreeBSD。通过使用连接到未使用的串行端口的终端,用户可以登录并运行任何通常可以在控制台或xterm窗口中运行的文本程序。
许多终端可以连接到FreeBSD系统。旧的备用计算机可以用作连接到运行FreeBSD的更强大计算机的终端。这可以将原本可能是单用户计算机的东西变成一个强大的多用户系统。
FreeBSD支持三种类型的终端:
Dumb terminals —— 哑终端
哑终端是通过串行线连接到计算机的专用硬件。它们被称为“哑巴”,因为它们只有足够的计算能力来显示、发送和接收文本。这些设备上无法运行任何程序。相反,哑终端连接到运行所需程序的计算机。
许多制造商制造了数百种哑终端,几乎任何一种都可以与FreeBSD兼容。一些高端终端甚至可以显示图形,但只有某些软件包可以利用这些高级功能。
哑终端在工人不需要访问图形应用程序的工作环境中很受欢迎。
Computers Acting as Terminals —— 计算机充当终端
由于哑终端具有足够的显示、发送和接收文本的能力,因此任何备用计算机都可以成为哑终端。只需要合适的电缆和一些终端仿真软件即可在计算机上运行。
这种配置可能很有用。例如,如果一个用户正忙于在FreeBSD系统的控制台上工作,另一个用户可以同时从作为终端连接到FreeBSD系统的功能较弱的个人计算机上执行一些纯文本工作。
FreeBSD的基础系统中至少有两个实用程序可用于通过串行连接工作:cu(1) 和 tip(1) 。
例如,要从运行FreeBSD的客户端系统连接到另一个系统的串行连接:
xxxxxxxxxx# cu -l /dev/cuauN端口从零开始编号。这意味着COM1是 /dev/cuau0 。
通过端口集合可以使用其他程序,如 comms/minicom 。
X Terminals —— X终端
X终端是目前最复杂的终端类型。它们通常连接到以太网等网络,而不是连接到串行端口。它们可以显示任何Xorg应用程序,而不是仅限于文本应用程序。
本章不涉及X终端的设置、配置或使用。
本节介绍如何配置FreeBSD系统以在串行终端上启用登录会话。它假设系统识别终端连接的串行端口,并且终端连接了正确的电缆。
在FreeBSD中,init 读取 /etc/ttys 并在可用终端上启动 getty 进程。getty 进程负责读取登录名并启动 login 程序。FreeBSD系统上允许登录的端口列在 /etc/ttys 中。例如,第一个虚拟控制台 ttyv0 在此文件中有一个条目,允许在控制台上登录。此文件还包含其他虚拟控制台、串行端口和伪tty(pseudo-ttys)的条目。对于硬连线终端,串行端口的 /dev 条目列出时没有 /dev 部分。例如,/dev/ttyv0 被列为 ttyv0 。
默认的 /etc/ttys 配置了对前四个串行端口 ttyu0 到 ttyu3 的支持:
xxxxxxxxxxttyu0 "/usr/libexec/getty std.115200" dialup off securettyu1 "/usr/libexec/getty std.115200" dialup off securettyu2 "/usr/libexec/getty std.115200" dialup off securettyu3 "/usr/libexec/getty std.115200" dialup off secure将终端连接到其中一个端口时,修改默认条目以设置所需的速度和终端类型,打开设备,并在需要时更改端口的安全设置。如果终端连接到另一个端口,请为该端口添加一个条目。
【示例:配置终端条目】在 /etc/ttys 中配置两个终端。第一个条目配置了连接到COM2的Wyse-50。第二项配置运行模拟VT-100终端的Procomm终端软件的旧计算机。计算机连接到多端口串行卡上的第六个串行端口。
示例:配置终端条目
xxxxxxxxxxttyu1 "/usr/libexec/getty std.38400" wy50 on insecurettyu5 "/usr/libexec/getty std.19200" vt100 on insecuregetty 初始化并打开线路,设置线路速度,提示输入用户名,然后执行 login 程序。可选的 getty type 配置终端线路上的特性,如bps速率和奇偶校验。可用的getty类型列在 /etc/gettytab 中。在几乎所有情况下,以 std 开头的getty类型都适用于硬连线终端,因为这些条目忽略了奇偶校验。从110到115200的每个bps速率都有一个 std 条目。有关更多信息,请参阅 gettytab(5) 。设置getty类型时,请确保与终端使用的通信设置相匹配。对于这个例子,Wyse-50不使用奇偶校验,以38400 bps的速度连接。计算机不使用奇偶校验,以19200 bps的速度连接。unknown 或 dialup ,因为用户几乎可以使用任何类型的终端或软件拨号。由于硬接线端子的端子类型不变,因此可以指定 /etc/termcap 中的实际端子类型。对于这个例子,Wyse-50使用真实的终端类型,而运行Procomm的计算机被设置为模拟VT-100。on 。secure 意味着它足够受信任,允许 root 从该端口登录。不安全的端口不允许 root 登录。在不安全的端口上,用户必须从无权限帐户登录,然后使用 su 或类似机制获得超级用户权限,如【3.3.1.3.超级用户帐户】所述。出于安全原因,建议将此设置更改为 insecure 。在对 /etc/ttys 进行任何更改后,向 init 进程发送SIGHUP(hangup)信号,迫使它重新读取其配置文件:
xxxxxxxxxx# kill -HUP 1由于 init 始终是系统上运行的第一个进程,因此它的进程ID始终为 1 。
如果一切设置正确,所有电缆都已就位,终端已通电,那么现在每个终端上都应该运行 getty 进程,并且每个终端上应该都有登录提示。
即使对细节进行了最细致的关注,在设置终端时仍然可能会出现问题。以下是常见症状列表和一些建议的修复方法。
ps 确保 getty 进程正在运行并为终端提供服务。例如,以下清单显示 getty 正在第二个串行端口 ttyu1 上运行,并使用 /etc/gettytab 中的 std.38400 条目:xxxxxxxxxx# ps -axww|grep ttyu22189 d1 Is+ 0:00.03 /usr/libexec/getty std.38400 ttyu1getty 进程正在运行,请确保在/etc/ttys中启用了端口。记得在修改 /etc/ttys 后运行 kill -HUP 1 。getty 进程正在运行,但终端仍然不显示登录提示,或者如果它显示提示但不接受键入的输入,则终端或电缆可能不支持硬件握手。尝试将 /etc/ttys 中的条目从 std.38400 更改为 3wire.38400 ,然后在修改 /etc/ttys 后运行 kill -HUP 1 。3wire 入口类似于 std ,但忽略了硬件握手。使用 3wire 时,可能还需要降低bps或启用软件流控制,以防止缓冲区溢出。getty 进程,确保使用了正确的getty类型。如果没有,编辑 /etc/ttys 并运行 kill -HUP 1 。"half duplex 或 local echo切换到 full duplex 。为拨入服务配置FreeBSD系统类似于配置终端,除了使用调制解调器而不是终端设备。FreeBSD支持外部和内部调制解调器。
外部调制解调器更方便,因为它们通常可以通过存储在非易失性RAM中的参数进行配置,并且它们通常提供指示灯,显示重要RS-232信号的状态,指示调制解调器是否正常工作。 内部调制解调器通常缺少非易失性RAM,因此其配置可能仅限于设置DIP开关。如果内部调制解调器有任何信号指示灯,当系统盖就位时,很难看到它们。
使用外部调制解调器时,需要合适的电缆。标准RS-232C串行电缆就足够了。
FreeBSD需要RTS和CTS信号以2400 bps以上的速度进行流量控制,CD信号用于检测呼叫何时被应答或线路何时被挂断,DTR信号用于在会话完成后重置调制解调器。有些电缆没有连接所有所需的信号,因此如果线路挂断时登录会话没有消失,则电缆可能有问题。有关这些信号的更多信息,请参阅【29.2.1. 串行电缆和端口】。
与其他类UNIX®操作系统一样,FreeBSD使用硬件信号来确定何时应答了呼叫或挂断了线路,并在呼叫后挂断和重置调制解调器。
FreeBSD避免向调制解调器发送命令或监视调制解调器的状态报告。FreeBSD支持基于NS8250、NS16450、NS16550和NS16550A的RS-232C(CCITT V.24)通信接口。8250和16450设备具有单字符缓冲区。16550设备提供了一个16个字符的缓冲区,可以提高系统性能。普通16550设备中的错误会阻止使用16个字符的缓冲区,因此如果可能的话,请使用16550A设备。由于单字符缓冲设备比16字符缓冲设备需要更多的操作系统工作,因此首选基于16550A的串行接口卡。如果系统有许多活动串行端口或负载很重,基于16550A的卡更适合低错误率通信。
本节的其余部分将演示如何配置调制解调器以接收传入连接,如何与调制解调器通信,并提供一些故障排除提示。
与终端一样,init 为用于拨入连接的每个配置的串行端口生成一个 getty 进程。当用户拨打调制解调器的线路并且调制解调器连接时,调制解调器会报告“Carrier Detect(载波检测)”信号。内核注意到已检测到载体,并指示 getty 打开端口,以指定的初始行速显示 login: 提示符。在典型的配置中,如果收到垃圾字符,通常是由于调制解调器的连接速度与配置的速度不同,getty 会尝试调整线路速度,直到收到合理的字符。在用户输入登录名后, getty 执行 login ,通过询问用户的密码并启动用户的shell来完成登录过程。
关于拨号调制解调器有两种思想流派。+
getty 不理解任何特定调制解调器的连接速度报告,它以初始速度发出 login: 消息,并观察返回的响应字符。如果用户看到垃圾,他们应该按 Enter 键,直到看到可识别的提示。如果数据速率不匹配, getty 会将用户键入的任何内容视为垃圾,尝试下一个速度,并再次给出 login: 提示符。这个过程通常只需要一两个按键,用户就会看到一个好的提示。这种登录顺序看起来不像锁定速度方法那么干净,但低速连接的用户应该从全屏程序中获得更好的交互响应。当将调制解调器的数据通信速率锁定在特定速度时,不需要更改 /etc/gettytab 。然而,对于匹配的速度配置,可能需要额外的条目来定义调制解调器使用的速度。此示例使用8位无奇偶校验连接配置了一个最高接口速度为19.2 Kbps的14.4 Kbps调制解调器。它配置 getty 以19.2 Kbps的速度启动V.32bis连接的通信速率,然后循环9600 bps、2400 bps、1200 bps、300 bps,最后回到19.2 Kbps。通信速率循环是通过 nx= (next table)功能实现的。每行使用 tc= (table continuation)条目来获取特定数据速率的其余设置。
xxxxxxxxxx## 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:对于28.8 Kbps调制解调器,或要利用14.4 Kbps调制解调器上的压缩,请使用更高的通信速率,如本例所示:
xxxxxxxxxx## 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 Kbps的速度下产生 uart “silo(筒仓)”错误。
/etc/ttys 的配置类似于【示例40. 配置终端条目】,但传递给 getty 的参数不同,dialup 用于终端类型。将xxx替换为 init 将在设备上运行的进程:
xxxxxxxxxxttyu0 "/usr/libexec/getty xxx" dialup ondialup 终端类型可以更改。例如,将 vt102 设置为默认终端类型允许用户在其远程系统上使用VT102仿真。
对于锁定速度配置,请使用 /etc/gettytab 中列出的有效类型指定速度。此示例适用于端口速度锁定在19.2Kbps的调制解调器:
xxxxxxxxxxttyu0 "/usr/libexec/getty std.19200" dialup on在匹配的速度配置中,条目需要引用 /etc/gettytab 中相应的起始“autobaud”条目。要继续以19.2 Kbps开始的匹配速度调制解调器的示例,请使用以下条目:
xxxxxxxxxxttyu0 "/usr/libexec/getty V19200" dialup on编辑 /etc/ttys 后,等待调制解调器正确配置和连接,然后再发送 init 信号:
xxxxxxxxxx# kill -HUP 1
高速调制解调器,如V.32、V.32bis和V.34调制解调器,使用硬件(RTS/CTS)流控制。使用 stty 为调制解调器端口设置硬件流控制标志。此示例在COM2的拨入和拨出初始化设备上设置 crtscts 标志:
xxxxxxxxxx# stty -f /dev/ttyu1.init crtscts# stty -f /dev/cuau1.init crtscts本节提供了一些提示,用于排除无法连接到FreeBSD系统的拨号调制解调器的故障。
将调制解调器连接到FreeBSD系统并启动系统。如果调制解调器有状态指示灯,请注意当系统控制台上出现 login: 提示时,调制解调器的DTR指示灯是否亮起。如果它亮起,这应该意味着FreeBSD已经在相应的通信端口上启动了 getty 进程,并正在等待调制解调器接受呼叫。
如果DTR指示灯不亮,请通过控制台登录FreeBSD系统并键入 ps ax ,查看FreeBSD是否在正确的端口上运行 getty 进程:
xxxxxxxxxx114 ?? I 0:00.10 /usr/libexec/getty V19200 ttyu0如果第二列包含 d0 而不是 ?? 并且调制解调器尚未接受呼叫,这意味着 getty 已完成通信端口的打开。这可能表明布线有问题或调制解调器配置错误,因为在调制解调器发出载波检测信号之前,getty 不应该打开通信端口。
如果没有 getty 进程等待打开端口,请仔细检查 /etc/ttys 中的端口条目是否正确。此外,检查 /var/log/messages ,查看是否有来自 init 或 getty 的日志消息。
接下来,尝试拨入系统。确保在远程系统上使用8位、无奇偶校验和1个停止位。如果提示没有立即出现,或者提示显示垃圾,请尝试每秒按一次 Enter 键。如果仍然没有 login: 提示,请尝试发送 BREAK 。使用高速调制解调器时,请在锁定拨号调制解调器的接口速度后再次尝试拨号。
如果仍然没有 login: 提示,请再次检查 /etc/gettytab ,并仔细检查:
nx= 条目都与另一个gettytab功能名称匹配。tc= 条目都与另一个gettytab功能名称匹配。如果FreeBSD系统上的调制解调器没有应答,请确保调制解调器配置为在DTR被断言(asserted)时应答电话。如果调制解调器似乎配置正确,请通过检查调制解调器的指示灯来验证DTR线路是否已断言(asserted)。
如果它仍然不起作用,请尝试向FreeBSD一般问题邮件列表发送一封电子邮件,描述调制解调器和问题。
以下是让主机通过调制解调器连接到另一台计算机的提示。这适用于与远程主机建立终端会话。
如果使用PPP时出现问题,这种连接有助于在互联网上获取文件。如果PPP不起作用,请使用终端会话通过FTP传输所需的文件。然后使用zmodem将其转移到机器上。
tip 内置了一个通用的Hayes拨号器。在 /etc/remote 中使用 at=hayes 。
Hayes驱动程序不够聪明,无法识别较新调制解调器消息的一些高级功能,如 BUSY、NO DIALTONE 或 Connect 115200 。在 ATX0&W 中使用 tip 时关闭这些消息。
tip 的拨号超时为60秒。调制解调器应该少用一些东西,否则 tip 会认为有通信问题。尝试 ATS7=45&W 。
在 /etc/remote 中创建一个 direct 条目。例如,如果调制解调器连接到第一个串行端口 /dev/cuau0 ,请使用以下行:
xxxxxxxxxxcuau0:dv=/dev/cuau0:br#19200:pa=none使用 br 功能中调制解调器支持的最高bps速率。然后,键入 tip cuau0 连接到调制解调器。
或者,使用 cu 作为 root ,并执行以下命令:
xxxxxxxxxx# cu -lline -sspeedline 是串行端口,如 /dev/cuau0 ,speed 是速度,如 57600 。输入完AT命令后,键入 ~. 退出。
@ 符号在电话号码功能中告诉 tip 去 /etc/phones 中查找电话号码。但是,@ 符号也是 /etc/remote 等功能文件中的一个特殊字符,因此需要用反斜杠转义:
xxxxxxxxxxpn=\@在 /etc/remote 中输入一个 generic 条目。例如:
xxxxxxxxxxtip115200|Dial any phone number at 115200 bps:\ :dv=/dev/cuau0:br#115200:at=hayes:pa=none:du:tip57600|Dial any phone number at 57600 bps:\ :dv=/dev/cuau0:br#57600:at=hayes:pa=none:du:现在,这.应该奏效了:
xxxxxxxxxx# tip -115200 5551234喜欢 cu 而不是 tip 的用户可以使用通用 cu 条目:
xxxxxxxxxxcu115200|Use cu to dial any number at 115200bps:\ :dv=/dev/cuau1:br#57600:at=hayes:pa=none:du:然后输入:
xxxxxxxxxx# cu 5551234 -s 115200输入 tip1200 或 cu1200 的条目,但请继续使用 br 功能适用的任何bps速率。tip 认为一个好的默认值是1200 bps,这就是它寻找 tip1200 条目的原因。不过,不必使用1200 bps。
与其每次都等到连接并键入 CONNECT host ,不如使用 tip 的 cm 功能。例如, /etc/remote 中的这些条目允许输入 tip pain 或 tip muffin 连接到主机 pain 或 muffin ,并输入 tip deep13 连接到终端服务器。
xxxxxxxxxxpain|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/cuau2:br#38400:at=hayes:du:pa=none:pn=5551234:tip 使用多行当一所大学有几条调制解调器线路和数千名学生试图使用它们时,这通常是一个问题。
在 /etc/remote 中输入一个条目,并使用 @ 表示 pn 功能:
xxxxxxxxxxbig-university:\ :pn=\@:tc=dialoutdialout:\ :dv=/dev/cuau3:br#9600:at=courier:du:pa=none:然后,在 /etc/phones 中列出电话号码:
xxxxxxxxxxbig-university 5551111big-university 5551112big-university 5551113big-university 5551114tip 会按照列出的顺序尝试每个数字,然后放弃。要继续重试,请在 while 循环中运行tip 。
Ctrl+P 是默认的“force”字符,用于告诉 tip 下一个字符是文字数据。强制字符可以通过 ~s 转义设置为任何其他字符,这意味着“set a variable”。
键入~sforce=single-char ,后跟换行符。 single-char 是任何单个字符。如果省略了 single-char ,则强制字符是空字符,可以通过键入 Ctrl+2 或 Ctrl+Space 来访问。single-char 的一个很好的值是 Shift+Ctrl+6 ,它仅在某些终端服务器上使用。
要更改force字符,请在 ~/.tiprc 中指定以下内容:
xxxxxxxxxxforce=single-char当按下 Ctrl+A 时,就会发生这种情况,这是 tip 的“raise character”,专为 caps-lock 键断裂的人设计。使用 ~s 将 raisechar 设置为合理的值。如果两个特征都不使用,则可以将其设置为与强制角色相同。
这是一个示例 ~/.tiprc ,适用于需要键入 Ctrl+2 和 Ctrl+a 的Emacs用户:
xxxxxxxxxxforce=^^raisechar=^^^^ 是 Shift+Ctrl+6
tip 传输文件当与另一个类UNIX®操作系统通信时,可以使用 ~p(put)和 ~t(take)发送和接收文件。这些命令在远程系统上运行 cat 和 echo 以接受和发送文件。语法为:
~p local-file [remote-file] ~t remote-file [local-file]
没有错误检查,因此可能应该使用另一种协议,如zmodem。
tip 结合使用?要接收文件,请在远程端启动发送程序。然后,键入 ~C rz 开始在本地接收它们。
要发送文件,请启动远程端的接收程序。然后,键入 ~C sz 文件将其发送到远程系统。
FreeBSD能够将串行端口上的哑终端作为控制台引导系统。此配置对于希望在没有连接键盘或显示器的机器上安装FreeBSD的系统管理员以及希望调试内核或设备驱动程序的开发人员非常有用。
如【15. FreeBSD引导过程】中所述,FreeBSD采用三阶段引导。前两个阶段位于引导块代码中,该代码存储在引导磁盘上FreeBSD切片的开头。然后,引导块加载并运行引导加载程序作为第三阶段代码。
为了设置从串行控制台引导,需要配置引导块代码、引导加载程序代码和内核。
本节提供了设置串行控制台的快速概述。当哑终端连接到COM1时,可以使用此过程。
步骤:在COM1上配置串行控制台
将串行电缆连接到COM1和控制端子。
要配置启动消息以在串行控制台上显示,请以超级用户身份发出以下命令:
xxxxxxxxxx# echo 'console="comconsole"' >> /boot/loader.conf编辑 /etc/ttys ,将 off 更改为 on ,然后 dialup 到 vt100 获取ttyu0条目。否则,通过串行控制台连接将不需要密码,从而导致潜在的安全漏洞。
重新启动系统,查看更改是否生效。
如果需要不同的配置,请参阅下一节以获取更深入的配置说明。
本节更详细地解释了在FreeBSD中设置串行控制台所需的步骤。
步骤:配置串行控制台
准备一根串行电缆。 使用零调制解调器电缆或标准串行电缆和零调制解调器适配器。有关串行电缆的讨论,请参阅【29.2.1. 串行电缆和端口】。
拔下键盘。
许多系统在开机自检(Power-On Self-Test,POST)期间探测键盘,如果未检测到键盘,则会产生错误。有些机器在键盘插入之前会拒绝启动。
如果计算机抱怨错误,但仍然启动,则不需要进一步配置。
如果计算机在未连接键盘的情况下拒绝启动,请配置BIOS,使其忽略此错误。有关如何执行此操作的详细信息,请参阅主板手册。
xxxxxxxxxx尝试在BIOS中将键盘设置为“Not installed”。此设置告诉BIOS在开机时不要探测键盘,因此如果键盘不在,它就不应该抱怨。如果BIOS中不存在该选项,请查找“Halt on Error”选项。将其设置为“All but keyboard”或“No Errors”将具有相同的效果。如果系统有PS/2®鼠标,请将其拔下。PS/2®鼠标与键盘共享一些硬件,将鼠标插上可能会欺骗键盘探头,使其认为键盘仍然存在。
xxxxxxxxxx虽然大多数系统可以在没有键盘的情况下启动,但也有不少系统在没有图形适配器的情况下无法启动。通过将BIOS配置中的“graphics adapter”设置更改为“Not installed”,可以将某些系统配置为在没有图形适配器的情况下启动。其他系统不支持此选项,如果系统中没有显示硬件,将拒绝启动。对于这些机器,即使只是一块破旧的单板,也要插上某种图形卡。不需要连接显示器。将哑终端、带有调制解调器程序的旧计算机或另一个UNIX®机器上的串行端口插入串行端口。
在 /boot/device.hints 中为串行端口添加适当的 hint.uart.* 条目。一些多端口卡还需要内核配置选项。有关每个支持的串行端口的所需选项和设备提示,请参阅 uart(4) 。
在启动驱动器上分区的根目录中创建 boot.config 。
此文件指示引导块代码如何引导系统。为了激活串行控制台,需要以下一个或多个选项。使用多个选项时,将它们全部包含在同一行中:
-h
在内部控制台和串行控制台之间切换。使用此功能切换控制台设备。例如,要从内部(视频)控制台启动,请使用 -h 命令引导加载程序和内核将串行端口用作其控制台设备。或者,要从串行端口启动,请使用-h告诉引导加载程序和内核将视频显示器用作控制台。
-D
在单控制台和双控制台配置之间切换。在单配置中,控制台将是内部控制台(视频显示器)或串行端口,具体取决于 -h 的状态。在双控制台配置中,视频显示器和串行端口将同时成为控制台,而与 -h 状态无关。但是,双控制台配置仅在引导块运行时生效。一旦引导加载程序获得控制权,由 -h 指定的控制台将成为唯一的控制台。
-P
使启动块探测键盘。如果没有找到键盘,将自动设置 -D 和 -h 选项。
xxxxxxxxxx由于当前版本的引导块中的空间限制,-P只能检测扩展键盘。可能无法检测到少于101个键且没有F11和F12键的键盘。由于此限制,某些笔记本电脑上的键盘可能找不到。如果是这样的话,不要使用-P。使用 -P 自动选择控制台,或使用 -h 激活串行控制台。有关更多详细信息,请参阅 boot(8) 和 boot.config(5) 。
除 -P 之外的选项都传递给引导加载程序。引导加载程序将通过检查 -h 的状态来确定是内部视频还是串行端口应成为控制台。这意味着,如果在 /boot.config 中指定了 -D ,但未指定 -h ,则串行端口只能在引导块期间用作控制台,因为引导加载程序器将使用内部视频显示器作为控制台。
启动机器。
当FreeBSD启动时,引导块会将 /boot.config 的内容回显到控制台。例如:
xxxxxxxxxx/boot.config: -PKeyboard: no第二行仅在 -P 位于 /boot.config 中时出现,表示键盘是否存在。根据 /boot.config 中的选项,这些消息会发送到串行控制台或内部控制台,或两者都发送:
| 选项 | 消息转到 |
|---|---|
| none | 内部控制台 |
| -h | 串行控制台 |
| -D | 串行和内部控制台 |
| -Dh | 串行和内部控制台 |
| -P,键盘存在 | 内部控制台 |
| -P,键盘缺失 | 串行控制台 |
消息发出后,在引导块继续加载引导加载程序之前以及在将任何进一步的消息打印到控制台之前,将有一个小的暂停。在正常情况下,不需要中断引导块,但可以这样做以确保设置正确。
按控制台上除 Enter 以外的任何键中断启动过程。然后,引导块将提示采取进一步行动:
xxxxxxxxxx>> FreeBSD/i386 BOOTDefault: 0:ad(0,a)/boot/loaderboot:根据 /boot.config 中的选项,验证上述消息是否出现在串行或内部控制台上,或同时出现在两者上。如果消息出现在正确的控制台中,请按 Enter 键继续启动过程。
如果串行终端上没有提示,则设置有问题。输入 -h ,然后输入 Enter 或 Return ,告诉引导块(然后是引导加载程序和内核)为控制台选择串行端口。系统启动后,返回并检查出了什么问题。
在引导过程的第三阶段,仍然可以通过在引导加载程序中设置适当的环境变量在内部控制台和串行控制台之间切换。有关更多信息,请参阅 loader(8) 。
xxxxxxxxxx/boot/loader.conf或/boot/loader.conf.local中的此行配置引导加载程序和内核将其引导消息发送到串行控制台,而不管/boot.config中的选项如何: console="comconsole"该行应该是/boot/loder.conf的第一行,以便引导消息尽早显示在串行控制台上。如果该行不存在,或者设置为console=“vidconsole”,则引导加载程序和内核将使用引导块中-h指示的任何控制台。有关更多信息,请参阅loader.conf(5)。目前,引导加载程序在引导块中没有相当于-P的选项,也没有根据键盘的存在自动选择内部控制台和串行控制台的规定。xxxxxxxxxx虽然不是必需的,但可以通过串行线提供登录提示。要配置此项,请使用【29.3.1. 终端配置】中的说明编辑/etc/ttys中串行端口的条目。如果串行端口的速度已更改,请更改std.115200以匹配新设置。默认情况下,串行端口设置为115200波特、8位、无奇偶校验和1个停止位。要更改默认控制台速度,请使用以下选项之一:
编辑 /etc/make.conf 并将 BOOT_COMCONSOLE_SPEED 设置为新的控制台速度。然后,重新编译并安装引导块和引导加载程序:
xxxxxxxxxx# cd /sys/boot# make clean# make# make install如果串行控制台是以其他方式配置的,而不是使用 -h 引导,或者如果内核使用的串行控制台与引导块使用的不同,请以所需的速度将以下选项添加到自定义内核配置文件中,并编译一个新内核:
xxxxxxxxxxoptions CONSPEED=19200将 -S19200 引导选项添加到 /boot.config ,用要使用的速度替换 19200 。
在 /boot/loder.conf 中添加以下选项。用要使用的速度替换 115200 。
xxxxxxxxxxboot_multicons="YES"boot_serial="YES"comconsole_speed="115200"console="comconsole,vidconsole"要配置从串行控制台进入内核调试器的能力,请将以下选项添加到自定义内核配置文件中,并使用【10. 配置FreeBSD内核中】的说明编译内核。请注意,虽然这对远程诊断很有用,但如果在串行端口上生成虚假的BREAK,这也是危险的。有关内核调试器的更多信息,请参阅 ddb(4) 和 ddb(8) 。
xxxxxxxxxxoptions BREAK_TO_DEBUGGERoptions DDB