Using Serial Console in FreeBSD(使用串口控制FreeBSD)
========================================
作者:黑夜编码人(Matthew)
日期:2003年04月23日
Mail:matthew@linuxforum.net
Web:http://www.arbornet.org/~matthew/
**声明:
作者写这篇文章只是将自己如何配制Serial Console的过程写出来并且希望能给需要的朋友一点帮助,对于文中所写的内容如果对你造成了任何损失概不负责,特此声明!
任何转载或摘抄请保留以上信息。
FreeBSD支持使用Serial Console来远程控制计算机,并且支持在启动的时候就使用Serial Console来对机器进行控制。
好了,费话少说,下面让我们来看看在FreeBSD上如何使用和配制Serial Console。
1)准备Null-Modem连线。
我跑便了整个电脑城都没有买到这种连线,后来没有办法就买了一根”母“COM口的连接线(注意别买成“公”的了,母的连接处应该是针孔,而不是针),然后自己做了一根null-modem连接线。
我制作的是标准Null-Modem连接线,其连接交叉图如下:
2)设置FreeBSD
在设置前请确定你的当前Kernel已经支持Serial Console,你可以使用dmesg | grep sio来查看当前Kernel是否支持Serial Console,如果支持的话将会出现类似以下的信息:
sio0 at port 0x3f8-0x3ff irq 4 flags 0x10 on isa0
sio0: type 16550A
sio1 at port 0x2f8-0x2ff irq 3 on isa0
sio1: type 16550A
如果你没有看到以上信息说明你的Kernel不支持Serial Console,你需要重新配制你的Kernel,在内核配制文件中加入以内存:
device sio0 at isa? port IO_COM1 flags 0x10 irq 4
device sio1 at isa? port IO_COM2 irq 3
然后重新编译你的内核。(如果你不知道如何编译内核,请参阅Handbook)
当内核支持Serial Console并且已经用Null-Modem将两台计算机的COM口连接好以后,你可以使用以下命令来测试你的连接是否已经正常工作:
# cu -l /dev/cuaa0 -s 9600
(注:这里FreeBSD使用的连接端口是COM1,如果你使用的是COM2请将cuaa0换成cuaa1)
如果显示“connected.”表示连接成功,此时你可以使用Windows的超级终端连接到FreeBSD Box,连接时设置端口属性:
每秒位数:9600
数据位:8
奇偶校验:无
停止位:1
数据流控制:硬件
当超级终端连接上FreeBSD Box之后,超终端终上不能看到任何内容,也不能进行任何操作,但你可以在刚才执行的cu -l /dev/cuaa0 -s 9600命令之后输入字符(当然,你在FreeBSD的终端上看不到任何显示),这时这些字符将在超级终端里显示出来,这表明你的硬件设置已经正常工作,可以继续下面的工作了。
编辑/etc/ttys更改其中的ttyd0和ttyd1设置如下:
ttyp0 "/usr/libexec/getty std.9600" unknown on secure
ttyp1 "/usr/libexec/getty std.9600" unknown on secure
这样的设置允许root权限的用户从Serial Console上登录,如果你比较重视安全,你可以将这里的secure改为insecure来限制root权限的用户登录。
编辑/boot/loader.conf并设置默认控制台为Serial Console,你需要加入以下设置:
console="comconsole"
此时打开你的超级终端并且连接上FreeBSD,这里你将看不到任何信息,因为你刚才在FreeBSD上的设置还没有生效。
现在重新启动你的FreeBSD机器。
当机器重新启动后,在FreeBSD上显示出:
Loading /boot/defaults/loader.conf
|
之后,如果此时你的配制正确的话便可以在超级端上看到FreeBSD的启动信息,等启动完成后就可以看到熟悉的login:提示了。
如果你在重新启动的时候没有打开超级端也没有关系,等机器启动完之后,打开超级终端连接上FreeBSD,然后在超级终端里按回车键(注意,一定要按回车来激活),这时login:提示也将出现,你现在便可以登录并管理你的机器了。
如果非常不幸,你并没有在超级终端里面看到任何信息,并且FreeBSD上也一直显示:
Loading /boot/defaults/loader.conf
|
此时请不要慌张,稍等一会儿,因为机器依然在运行,只不过输出的内容全部重定向到Serial Console上去了,所以你在FreeBSD上看不到任何信息,一旦启动完成后FreeBSD本地的login提示就会出来,所以千万不要以为机器死掉了(FreeBSD不会这样脆弱的:p)而重新启动,因为就算你些时重新启动机器结果还是一样。
但是如果你等了很久机器仍然没有任何反应,此时你只有reset你的机器,然后采用以下方法来解决:
重新启动机器,当机器启动出现 "-" 提示的时候按任意键(回车除外)进入"boot :"提示符,输入: boot kernel 此时机器开始启动,这时你便可以进入到系统了。
我们可以看到通过Serial Console比通过telnet/ssh管理要好一些,因为FreeBSD的启动过程也逃不出我们的眼底。
不过细心的朋友可能已经注意这种方式显示的只是加载了loader.conf之后的信息,所以也不能进入单用户模式,以及设置启动选项,那么有没有办法将加载loader.conf之前的信息也显示出来并且可以在启动前设置启动选项呢?答案是肯定的,具体步骤如下:
(提醒:在做以下设置时请确认你的Serial Console已经配制正确,要不然你会看不到任何启动的信息,如果失败请等待机器完成启动并出现login:提示符,千万不要重新启动机器)
在/目录下生成一个文件boot.config,其内容为:
-h
保存,并重新启动你的机器,此时你可以在超级终端上看到类似以下的信息:
Console: Serial port
BIOS drive A: is disk0
BIOS drive C: is disk1
BIOS 638kB/30708kB available memory
FreeBSD/i386 bootstrap loader, Revision 0.8
(root@freebsd-stable.sentex.ca, Thu Apr 3 08:41:45 GMT 2003)
Loading /boot/defaults/loader.conf
/kernel text=0x30b115 data=0x4c268+0x34d8c syms=[0x4+0x43380+0x4+0x4b09b]
-
Hit [Enter] to boot immdiately, or any other key for command prompt.
可以看到这里可以显示出加载loader.conf之前的信息了,并且你还可以选择进入单用户模式了。 :)
到这里,关于如何在FreeBSD使用Serial Console已经讲完了,感觉是不是很简单,只要连接好连线,更改一下设置就可以了。
由于时间和作者的水平有限,文中难免出现错误的地方还请大家原谅和指教。
参考:
FreeBSD Man Pages boot[8]
FreeBSD HandBook