26.6. 设置串行控制台

Contributed by Kazutaka YOKOTA.
Based on a document by Bill Paul.

FreeBSD 可以用串行端口上的傻瓜终端作为控制台来启动系统。这种配置对于希望在没有键盘或显示器的机器上安装FreeBSD的系统管理员,以及希望调试内核或设备驱动程序的开发人员来说是非常有用的。

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

为了设置从串行控制台启动,需要配置引导块代码、引导加载器代码和内核。

26.6.1. 快速串行控制台配置

本节提供设置串行控制台的简单描述。当哑终端连接到COM1时,可以参考此过程。

过程 26.1. 配置串行控制台COM1
  1. 连接串行数据线到 COM1 来控制终端。

  2. 要配置引导信息显示在串行控制台上,请以超级用户的身份执行以下命令:

    # sysrc -f /boot/loader.conf console=comconsole
  3. 编辑/etc/ttys,并将ttyu0条目的off改为on,将dialup改为vt100。否则,通过串行控制台连接时将不需要密码,导致潜在的安全漏洞。

  4. 重启系统让配置生效。

若需进一步配置,请阅读下一章,有更深入的讲解。。

26.6.2. 深入序列Console设定

本节更详细地介绍了在 FreeBSD 中设置串行控制台所需的步骤。

过程 26.2. 设置串行控制台
  1. 准备串行电缆。

    使用空调制解调器电缆或标准串行电缆和空调制解调器适配器。相关讨论参见 第 26.2.1 节 “序列线与端口”

  2. 拔出键盘。

    许多系统会在开机自检(POST)过程中探测键盘,如果没有检测到键盘,则会报错。有些机器会拒绝开机,直到将键盘插上电源插头后才开机。

    如果计算机报错,但还是启动了,就不需要进一步配置了。

    如果计算机在没有连接键盘的情况下拒绝启动,请配置BIOS,使其忽略此错误。有关如何执行此操作的详细信息,请参考主板手册。

    提示:

    尝试在BIOS中将键盘设置为未安装。此设置会告诉BIOS在开机时不探测键盘,因此如果键盘不存在,它应该不会报错。如果BIOS中没有该选项,请查找Halt on Error选项。将其设置为 除键盘外的所有选项无错误,效果一样。

    如果系统有PS/2®鼠标,拔掉它。PS/2® 鼠标和键盘共享一些硬件,而将鼠标插入会使键盘探测器误以为键盘仍然存在。

    注意:

    虽然大多数系统在没有键盘的情况下启动,但相当多的系统在没有显卡的情况下无法启动。某些系统可以通过将BIOS配置中的graphics adapter设置更改为 未安装来启动。其他系统不支持此选项,如果系统中没有显示硬件,则将拒绝启动。若使用这些机器,可以插个垃圾显卡。可以不用连接监视器。

  3. 将一个哑终端,一台带有调制解调器程序的旧电脑,或者是另一个UNIX盒子上的串口插入串口。

  4. /boot/device.hints中为串口添加适当的hint.sio.*条目。有些多端口卡还需要内核配置选项。请参考 sio(4),了解受支持串口所需的选项和设备提示。

  5. 在启动驱动器的a分区的根目录上创建boot.config

    该文件指示引导块代码如何引导系统。为了激活串行控制台,需要使用以下一个或多个选项。当使用多个选项时,请将它们都写在同一行中:

    -h

    在内部控制台和串行控制台之间切换。用这个来切换控制台设备。例如,要从内部(视频)控制台启动,使用 -h引导引导引导程序和内核使用串口作为控制台设备。另外,如果要从串口启动,使用 -h 告诉引导加载器和内核使用视频显示作为控制台设备。

    -D

    在单控制台和双控制台配置之间切换。在单控制台配置中,根据-h的状态,控制台将成为内部控制台(视频显示)或串口,这取决于-h的状态。在双控制台配置中,无论-h的状态如何,视频显示器和串口都将同时成为控制台。但是,双控制台配置只有在引导块运行时才会生效。一旦启动加载器获得控制权,由 -h指定的控制台将成为唯一的控制台。

    -P

    让启动块自动探测键盘。如果找不到键盘,则会自动设置 -D-h 选项。

    注意:

    由于当前版本的启动块空间限制,-P只能检测到扩展键盘。少于101个按键和没有F11和F12键的键盘可能无法被检测到。某些笔记本电脑上的键盘可能会因为这个限制而无法正确识别。如果是这种情况,请不要使用-P

    使用-P自动选择控制台,或使用-h激活串行控制台。有关详细信息,请参阅boot(8)boot.config(5)

    除了-P之外,其他的选项都会传递给引导加载器。启动加载器将通过检查 -h的状态来决定内部视频端口还是串口成为控制台。这意味着,如果在/boot.config中指定了-D,但是-h没有被指定,那么在引导块中,串口只能作为控制台,因为引导加载器会把内部显示器作为控制台。

  6. 启动计算机。

    FreeBSD 引导块将 /boot.config 写入控制台,例如:

    /boot.config: -P
    Keyboard: no

    第二行只有在/boot.config中的-P出现的情况下才会出现,并表示是否存在键盘。这些消息会传到串行或内部控制台,或者两者都有,这取决于/boot.config中的选项:

    选项送出消息的设备
    none内部控制台
    -h串行控制台
    -D串口控制台和内部控制台
    -Dh串口控制台和内部控制台
    -P,有键盘内部控制台
    -P,无键盘串行控制台

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

    Press any key, other than Enter, at the console to interrupt the boot process. The boot blocks will then prompt for further action:

    >> FreeBSD/i386 BOOT
    Default: 0:ad(0,a)/boot/loader
    boot:

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

    If there is no prompt on the serial terminal, something is wrong with the settings. Enter -h then Enter or Return to tell the boot block (and then the boot loader and the kernel) to choose the serial port for the console. Once the system is up, go back and check what went wrong.

在引导过程的第三阶段,通过在引导加载程序中设置适当的环境变量,仍然可以在内部控制台和串行控制台之间切换。详细信息请参阅loader(8)

注意:

此行在/boot/loader.conf/boot/loader.conf.local中配置引导加载程序和内核将其引导消息发送到串行控制台,而不考虑/boot.config中的选项:

console="comconsole"

此行应为/boot/loader.conf的第一行,以便尽早地在启动时看到串口控制台的启动信息。

如果该行不存在,或者如果设置为console="vidconsole",引导加载程序和内核将使用由-h在引导块中。更多详细信息请参阅loader.conf(5)

目前,引导加载程序没有等效于-P在引导块中,并且没有根据键盘的存在自动选择内部控制台和串行控制台的预配。

提示:

虽然不是必需的,但可以通过串行线路登入服务。要配置此,请使用第 26.3.1 节 “终端机设定”中的说明编辑/etc/ttys中的串行端口的条目。如果串行端口的速度已更改,则更改std.9600以匹配新设置。

26.6.3. 设置更快的串行端口速度

默认情况下,串行端口设置为 9600bps、8 位、无奇偶校验和 1 个停止位。这里有几个选项修改默认控制台速度:

  • 编辑/etc/make.conf并将BOOT_COMCONSOLE_SPEED设置为新的控制台速度。然后,重新编译并安装引导块和引导加载程序:

    # cd /sys/boot
    # make clean
    # make
    # make install

    如果串口控制台已配置为使用 -h 以外的其它方式引导, 或者内核使用的速率与引导块不同, 则必需在内核配置文件中加入下述设置, 并重新联编新内核:

    options CONSPEED=19200
  • 添加-S19200 内核引导选项到/boot.config,将19200替换为所需速度值。

  • 添加以下选项到/boot/loader.conf,将115200替换为所需速度值。

    boot_multicons="YES"
    boot_serial="YES"
    comconsole_speed="115200"
    console="comconsole,vidconsole"

26.6.4. 从序列线路(Serial Line)进入DDB除错程序

要配置从串行控制台放入内核调试器的功能,请将以下选项添加到自定义内核配置文件中,并参考第 8 章 配置 FreeBSD 内核编译内核。请注意,虽然这对远程诊断很有用,但如果在串行端口上生成虚假的 BREAK,则也很危险。有关内核调试器的详细信息,请参阅ddb(4)ddb(8)

options BREAK_TO_DEBUGGER
options DDB

本文档和其它文档可从这里下载: ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

如果对于FreeBSD有问题,请先阅读 文档,如不能解决再联系 <questions@FreeBSD.org>.

关于本文档的问题请发信联系 <doc@FreeBSD.org>.