出处: http://echo.sharera.com/blog/BlogTopic/67915.htm

 

最近一次项目上让同事帮忙采购串口心跳线,跑了N趟电脑城,终于买回了一根线,却不料在服务器上百般尝试,也无法让两台机器的串口开始通讯;

于是乎,从不信任串口开始不信任操作系统,折腾了许久,终于搞清楚是怎么一回事了。

首先,采购串口心跳线这个特殊物事时,有点儿讲究的,以下是规格叫法及线序

串口心跳线应该叫做 ”null modem cable” ,去购买时可以问下卖线缆的商户有没有这种线,一般电脑城这种线是不太好找到的,如果没有也可以找专门做线缆的 ( 一般卖线缆的他们都可以做 ) 做一根,做线的时候选两端用九针的母头再用一根九芯的线缆按规范焊接在头上就行了。
 
null modem cable  的规范如下表,说明:两端的对应关系是这样的,两个头的第 9 针什么也不接、 3 接对端 2 2 接对端 3 7 接对端 8 8 接对端 7 5 接对端 5 1 6 接对端 4 4 接对端 1 6

Signal Name
DB-9 Pin
 
DB-9 Pin
 
 
9
X
9
 
TD (Transmit Data)
3
-
2
RD
RD (Receive Data)
2
-
3
TD
RTS (Request To Send)
7
-
8
CTS
CTS (Clear To Send)
8
-
7
RTS
SG (Signal Ground)
5
-
5
SG
DSR (Data Set Ready)
6
-
4
DTR
CD (Carrier Detect)
1
-
4
DTR
DTR (Data Terminal Ready)
4
-
1
CD
DTR (Data Terminal Ready)
4
-
6
DSR

细细,是不是很清楚了?这是俺同事分享给大家的经验,同样,为了以后自己查找方便,我又借用sharera宝地来存放资料啦。

但是,同事按照如上的线序要求电脑城给做了一条线以后,接到服务器上还是无法让2台服务器通过串口正常通讯,郁闷哪。。。

此时,另外一位同事经过研究发现,这跟redhat 5上缺省启动xen服务有关。由于xen虚拟机控制台占用了串口ttyS0,所以导致无法通讯。

以下是解决的方案:

修改grub启动的配置文件/etc/grub.conf,需要修改的内容以红色粗体字标识
 
# more /etc/grub.conf
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE:  You have a /boot partition.  This means that
#          all kernel and initrd paths are relative to /boot/, eg.
#          root (hd0,0)
#          kernel /vmlinuz-version ro root=/dev/sda5
#          initrd /initrd-version.img
#boot=/dev/sda
default=1
timeout=5
splashp_w_picpath=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title Red Hat Enterprise Linux Server (2.6.18-8.el5)
        root (hd0,0)
        kernel /vmlinuz-2.6.18-8.el5 ro root=LABEL=/1 rhgb quiet
        initrd /initrd-2.6.18-8.el5.img
title Red Hat Enterprise Linux Server (2.6.18-8.el5xen)
        root (hd0,0)
        kernel /xen.gz-2.6.18-8.el5 console=vga xencons=ttyS16 console=ttyS16
        module /vmlinuz-2.6.18-8.el5xen ro root=LABEL=/1 rhgb quiet xencons=tty
        module /initrd-2.6.18-8.el5xen.img
 
最后说一下如何测试心跳线是否联通:
 
分别登陆两台服务器,在主机A的终端输入以下内容:
shell> cat
 
在主机B的终端输入以下内容:
 
Shell> echo hello >/dev/ttyS0
 
主机A的终端会有以下反馈:
 cat
hello      
       则表明主机A 主机B之间的串口心跳线已经可以通讯,心跳线已经生效。