首先,因为Linux系统的版本不一样,重定向规则也稍有不同。所以这里只以Fedora13版的Linux系统来说明。下文以Linux自称。
Linux从启动到启动完成的所有输出均复制到Com口上,一共需要修改3个文件。在此之前还要确认/sbin/agetty文件是否存在,此文件用来把系统的输入输出映射到其它设备上。
1.首先在 /etc/inittab里面添加如下内容:
最后一行另加一行加上:sc:2345:respawn:/sbin/agetty ttyS0 1152000,115200 xterm
“sc”为改行ID,“2345”指改行的运行级别是2、3、4、5级;“respawn”是使命令退出后再执行一次,以便其他用户能够登录;“/sbin/agetty ttyS0 9600 vt100”表示具体的命令,即通过他来执行打开串口/dev/ttyS0(COM1),后面是波特率和终端模式
xterm是一个X Window System上的标准虚拟终端。用户可以在同一个显示器上开启许多xterm,每一个都为其中运行的进程提供独立的输入输出(一般来说此进程是Unix shell)。
2.修改/etc/securetty里面的内容:
第2行另加一行加上:ttyS0
该文件是允许root身份登录的tty设备列表,这些设备由/bin/login程序读取,为了使用户能以root身份通过串口登录,需要在该文件中添加“ttyS0”,说明系统认为这里的COM1是安全的;
3.修改/etc/grub.conf文件里面的内容:
重定向grub:
在#Enable Serial Console下另加一行(有时可能有误差)加上:
serial --unit=0 --speed=115200 --word=8 --paity=no --stop=1
terminal --timeout=10 serial console
serial
初始化一个串口设备。
重定向console:
在/etc/grub.conf文件中kernel语句本行加上:
console=tty0 console=ttyS0,115200n8
其中“ttyS0”,“0”表示串口使用COM1;“9600”表示波特率为9600bps;“n”表示无校验位;“8”表示有8位数据位。
其实Linux启动时的信息都是由KERNEL显示的,缺省情况下启动完毕了后init再运行mingetty来提供6个虚拟终端来登陆系统,这可以在/etc/inittab文件中清楚地看到。其实login和内核是没有关系的,所以如果只是在内核中加入参数使其能从COM口交互式地操作并不代表能从超级终端登录系统,我们需要另外运行一个提供从串口登录能力的程序,这个程序就是agetty,它是属于util-Linux软件包中的一员,大家可以参考其man手册页以获得更多的信息,这些信息在其他的文档[1][3]中也都提及到了。
COM口的传输距离有限制,普通的线缆只有15米的有效距离,建议使用5类双绞线,可以扩展到50米仍能正常操作;
一般想使用root从ttyS0登录,默认的这是不行的,我们需要把该终端加入到文件/etc/securetty中,就是说终端ttyS0是安全的终端,可以使用root登录; 如果服务器长时间开着的话,最好每次都使用exit退出该终端,因为如果不退出来的话,下次再登陆可能会出现输入乱码导致终端不可用等问题,而在登录提示符下输入乱码则无关紧要;
如果你是通过这种方法管理一台实际24X7开着的服务器的话,你可能会有时发现在终端中按回车没有任何反映,有一种可能性就是系统在停电后再开机出现不能启动NFS和sendmail之类的服务,就这样卡在那里死锁住了,这在电源不稳定的情况下尤其多见,所以一定要给你的Linux服务器接上UPS不间断电源,或者在系统BIOS里设置断电后不再启动系统(如果它不是太重要的话),在这种情况下只有按键盘重新启动或者直接断电再重新启动一次,检查启动过程到底发生了什么事情,一般只需要检查一遍硬盘就没有问题了;
如果你的ttyS0出现乱码没有办法使用的话,可以尝试着从网络登陆,把/etc/inittab中ttyS0那一行注释,使用"init q"命令停止通过inittab启动的agetty,然后再重新取消/etc/inittab中的注释,再次"init q"命令启动agetty,不出意外就能恢复正常了。