红联Linux门户
Linux帮助

Linux重定向console口控制台

发布时间:2015-02-07 10:40:21来源:linux网站作者:yhai_lee

首先,因为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,不出意外就能恢复正常了。