宝贵的串口
串口越来越少了,不单是笔记本很少有串口,甚至不少台式机也没有串口了。就这个问题,我曾经和做主板设计的工程师聊过多次,尽管聊的人不一样,但是对话的过程却都惊人的相似。
“现在谁还用串口?”
“内核调试要用呀。”
“哦,那很少用的吗。”
“是不总用,但是系统出问题的时候要用的,一旦需要往往都是很重大的问题。”
“毕竟不常用的吗。”[笑]
“灭火器也不常用啊,为啥每个楼层都得准备着呢?”
“那是强制的呀!”
......
继续按这个思路说不下去了,是啊,支持调试不是强制的呀!?
“加串口要多少费用?”
“没什么费用,只是引出来就行了。”是啊,其实主板上用来完成Super IO的集成块里几乎都实现了不止一个串口。
“那怎么不加呢?”
“没什么用啊,哈哈。”[笑]
“*&$^/?$#@......”
“但是最终用户不用啊!”
得,没啥继续好说的了。最终用户不用就代表着加这个东西不能增加销量,那加这个东西可不没用?!
但也有他们感觉后悔的时候。那就是当系统出问题无计可施的时候,比如,启动一半蓝屏;系统睡眠后无法唤醒;关机关不掉,就挂在那儿......
“XX操作系统不知道在搞什么?”
[保持沉默]
“硬件都查过了,没发现问题呀...”
[继续沉默]
“你们软件有啥办法吧?”
现在到时候普及一下“可调试性”教育了。“当初*&$^/?$#@...但是*&$^/?$#@...现在*&$^/?$#@...”
问题总是要解决的,即使真的没有串口。这时怎么办呢?一种方案是临时增加串口,就像软件工程师可以在编译好的程序中,直接把某几条指令替换掉一样,硬件工程师可以通过
“飞线”来修改电路(rework)。但这可不那么容易做,看看今天的主板就知道,线路密集无比,寸土必争;元器件大多都是适合流水线工艺的可以“粘贴”到板子上的微小元件。想找个飞线的落脚点真好比是要把一架飞机迫降到一座繁华城市的CBD。
这时要看当初设计电路时是否未雨绸缪留用“扩展”余地了。有时布线本来可能已经有所准备,只是没有上某些元件,那么加上去就比较容易。如果系统中事先故意预留了某种总线接口,比如LPC(Low Pin Count)总线,那么也比较好办的,可以把一个带串口的小电路板通过LPC总线“嫁接”过来。这样嫁接成功后,通常还需要修改BIOS,配置这个“扩展卡”,为其分配必要的资源。
说到这,很多人都会问:“没有其它方式来做内核调试么?”
有,比如1394和USB 2.0端口。对于1394,最大的问题就是不稳定,两端的1394芯片有兼容性问题。对于USB 2.0,姑且不说要专用的Host to Host电缆,而且对目标机器端的USB端口号还有要求。简单来说,并不是所有USB 2.0的端口都可以用来调试,以英特尔的芯片组为例,只有每个EHCI的0号端口才支持内核调试。EHCI一般实现在南桥(ICH)中,ICH9开始包含两个EHCI,此前一般只有一个EHCI,这就意味着,ICH9以前的系统只有一个支持调试的USB端口,使用ICH9的较新系统也只有两个USB端口能用来调试。如何知道哪个端口是0号端口呢?可以使用一个名为UsbView的小程序,启动它后,拿一个USB 2.0的设备,比如优盘,依次插到每个USB端口,然后刷新UsbView,看这个设备所在的端口。当这个设备出现在EHCI(Enhanced Host Controler)下面的端口1(UsbView是从1开始编号的)位置时,恭喜您,调试端口找到了!
也有时候,试过所有可以插入USB设备的端口,都没有发现0号端口,这也是可能的,因为ICH一共提供了8个或者12个端口,通常只有一部分连接到外部可见的端口,有些是不引到外部的。哪些引出,哪些不引出,完全看电路设计。
考虑到它对于内核调试的重要性,UsbView这个小工具目前已经被放入到WinDBG软件包中,默认会安装到WinDBG的程序目录中。
找到支持调试的端口了,接下来需要启用内核的USB调试支持,通常是使用BCDEdit来设置。除了将DebugType设置为USB,并约定一个TargetName外,对于ICH9这样有多个EHCI的系统,还需要指定另外一个参数——busparams,告诉系统调试端口所在EHCI的总线位置,即:
bcdedit -set {current} loadoptions busparams=0.1D.7
上面的0.1D.7便代表EHCI的总线位置,0号总线(Bus),0x1D号设备(Device),7号功能(Function)。如何知道EHCI的总线位置呢?可以在设备管理器中,通过EHCI的设备属性对话框来看。
哇,大家是不是觉得很麻烦呀?是滴。串口简单,但是不总有啊!
在服务器系统中,某些串口外表长的和网口一样,即RJ45形式。这是因为串口接头不像RJ45那么方方正正节约空间。对于这样的串口,只要找一个或者自己做一个转换头就可以了。
啥时候大家都觉得支持调试就像准备灭火器那么必不可少,我们就不用担心没有端口支持调试了。