配置实现通过串口(com 口、RS232 接口)终端控制 Linux 系统
开始之前,请确认机器有串口(com口, RS232接口),如果没有,那就没有办法达到通过串口控制机器的目的了。当然,也可以额外给机器安装一个带串口的 PCI 模块,然后想办法将模块驱动起来(内核默认能驱动就最好了),这样机器就有可用的串口了。
串口终端特别适合用在不方便接显示器和键盘鼠标的 linux 机器上,特别是用在用作 交换机、路由器等用途的 linux 系统上。配置好串口终端后,可以拆掉系统的显示卡,用RS232 线缆连接受控机器(配置好串口终端的 Linux 机器)和控制机器,然后在控制机器上通过超级终端、minicom 等就可以操作受控机器了。
下面的步骤讲述如何配置一台串口终端控制的 Linux 机器,即受控机器。
1、首先找到计算机的串口命名
执行命令:
dmesg|greptty
将得到类似以下的输出
serial8250:ttyS0atI/O0x3f8(irq=4)isa16550A
00:0c:ttyS0atI/O0x3f8(irq=4)isa16550A
ttyS0 便是串口命名,如果有多个串口,还会有 ttyS1 等等2、检查是使用agetty还是getty命令
有的系统没有getty命令,那初始化虚拟终端时就要使用agetty命令,
最好使用绝对路径 /sbin/getty 或者 /sbin/agetty3、配置grub,让启动信息也输出到串口。如果启动信息不需要输出到串口,
则忽略这一步
打开/boot/grub/grub.conf(也可能是其他路径)找到以下面字符开始的一行
kernel/vmlinuz-***roroot=LABEL=/
修改成以下形式
kernel/vmlinuz-***roroot=LABEL=/console=tty0console=ttyS0,115200n8
即添加了相关参数
console=ttyS0,115200n8console=tty0
ttyS0是串口命名,115200是波特率,无校验,数据位8;同时指定启动信息也要
输出到第一个终端 tty04、配置 init, 让其初始化串口终端。这里分两种情况: 老版本的 init 和 upstart
4.1、老版本的 init (sysvinit)
打开/etc/inittab,如果出现以下内容,则可以确认是老版本的init,否则
请看4.2
1:2345:respawn:/sbin/mingettytty1
2:2345:respawn:/sbin/mingettytty2
3:2345:respawn:/sbin/mingettytty3
4:2345:respawn:/sbin/mingettytty4
5:2345:respawn:/sbin/mingettytty5
6:2345:respawn:/sbin/mingettytty6
添加一行初始化串口的内容即可,添加后如下:
1:2345:respawn:/sbin/mingettytty1
2:2345:respawn:/sbin/mingettytty2
3:2345:respawn:/sbin/mingettytty3
4:2345:respawn:/sbin/mingettytty4
5:2345:respawn:/sbin/mingettytty5
6:2345:respawn:/sbin/mingettytty6
co:2345:respawn:/sbin/agettyttyS0115200vt102
注意如果系统没有/sbin/agetty,则要改成/sbin/getty或其它。vt102是
常用的 Linux 虚拟终端4.2、新的 upstart。ubuntu 使用 upstart 替代了 sysvinit,并且其他的发行版也有
采用upstart的(fedora9和之后的版本)
打开/etc/inittab,如果没有出现4.1中的内容,则说明系统使用的是upstart
进入/etc/event.d/目录,创建文件/etc/event.d/ttyS0,并加入以下内容:
######################################################################
#ttyS0-getty
#
#ThisservicemaintainsagettyonttyS0fromthepointthesystemis
# started until it is shut down again.start on runlevel 2
startonrunlevel3
startonrunlevel4
start on runlevel 5stop on runlevel 0
stoponrunlevel1
stop on runlevel 6respawn
exec/sbin/agetty-L115200ttyS0vt102
######################################################################
保存退出即可5、赋予串口终端root登录权限
在文件/etc/securetty末尾加入如下一行(注意行前面没有空格)
ttyS0
加入上面一行后,root将可以直接通过串口终端登录系统,否则只有普通用户可以
通过串口终端登录系统6、注意
串口命名(ttyS0ttyS1等)一定要和系统识别的一致,不能想当然乱编。
确认系统有/sbin/agetty,/sbin/getty或其他初始化终端的命令,有哪个就用哪个。
终端波特率设置都要一致,用115200则全部都要用115200.据我的经验,9600有一
次就是不行,原因未知。可用的波特率如下
300/600/1200/2400/4800/9600/19200/38400/57600/115200/230400等等
如果确认配置没错, 但就是无法工作, 可以换不同的波特率尝试一下 :)7、配置好后,重启系统,用其他windows机器的超级终端或者linux机器的minicom连接即可。
记得设置好波特率,无校验,数据位8
连接时两端都用 RS232 线缆(console 线,购买交换机、路由器都会随机带的那种线缆)即可。8、关于 grub
通过步骤3配置的grub,只能让部分启动信息输出到串口终端,包括grub菜单接口在
内的另外一部分信息都无法输出到串口终端。要让grub完整的支持串口终端,需要重新编译
grub,相关内容请参照完整的grub文档:
http://www.gnu.org/software/grub/manual/grub.html
http://www.gnu.org/software/grub/manual/grub.html#Serial-terminal
http://www.gnu.org/software/grub/manual/grub.html#Preset-Menu