Mctrain's Blog

What I learned in IT, as well as thought about life

当串口输出乱码

| Comments

该博文仅用于向洪博(福尔.史塔克.洪)表示膜拜,同时记录下我们在配置串口时遇到的一些坑,以及尝试过的和最后可行的解决方案。

上周实验室新买了一个Intel E5-2620 V4的处理器,以及超微(supermicro)的主板(型号为X10SRA),想试试其中某些新的硬件特性。然后我们就像往常一样在上面配置串口,想用来调试Xen。然而从串口中出来的数据一直显示的是乱码,就是那种打印出来一堆?,时不时还出现几个毫无意义的中英文字符的乱码。

基于这个问题,我们尝试了以下解决方案:

  • 尝试过不同的波特率(baud rates)和内核启动时的console的配置参数;
  • 换过在其它机器上可用的串口和串口线;
  • 参阅文档,在BIOS中进行了各种不同的配置;
  • 重新买了一个PCI插槽的串口卡(原先采用的是主板中自带的COM1口)。

最终无果,甚至打算重新买一个主板,或者买一个组装好的服务器,再不行就找客服了。

这个时候,实验室的“全栈洪”,或者也可以叫福尔(Full).史塔克(Stack).洪站了出来,拯救了世界,也拯救了我们。

根据这个博客,他发现超微主板的串口针脚定义顺序和我们所使用的一般的串口线(IDC-10 / DB-9)不一致,具体来说,一般的串口线是长这样的:

IDC-10 and DB-9 cable and plate

而它们的针脚顺序如下图所示:

IDC-10 and DB-9 pin

然而,超微主板COM1的串口针脚顺序则如下所示:

supermicro pin

一般情况下我们在连接串口的时候,都是把IDC-10直接插入COM1中,从上面两张图我们发现IDC-10的针脚顺序是这样的:

2 4 6 8 X
1 3 5 7 9

而超微主板中的COM1的针脚顺序却是这样的:

6 7 8 9 X
1 2 3 4 5

两个如果直接连接,这相当于牛头不对马嘴。

因此根据这个博客中的说法,在这种情况下你需要买一个超微自己的串口线(CBL-0010L)。

这个时候,我们强大的全栈洪又站了出来!他自己动手做了一个适配器,根据上面两张图的说明硬生生地把COM1和IDC-10连了起来,瞬间熟悉的英文字符就从串口中流了出来显示在了屏幕上方:

full stack hong 1

full stack hong 2

而全栈洪这个时候一个潇洒的转身,留下我们无尽的惊叹,以及那传说中无双的功与名。

full stack hong 3

Comments