<2024年4月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

文章分类

导航

订阅

宝贵的串口

串口越来越少了,不单是笔记本很少有串口,甚至不少台式机也没有串口了。就这个问题,我曾经和做主板设计的工程师聊过多次,尽管聊的人不一样,但是对话的过程却都惊人的相似。

“现在谁还用串口?”

“内核调试要用呀。”

“哦,那很少用的吗。”

“是不总用,但是系统出问题的时候要用的,一旦需要往往都是很重大的问题。”

“毕竟不常用的吗。”[笑]

“灭火器也不常用啊,为啥每个楼层都得准备着呢?”

“那是强制的呀!”

......

继续按这个思路说不下去了,是啊,支持调试不是强制的呀!?

“加串口要多少费用?”

“没什么费用,只是引出来就行了。”是啊,其实主板上用来完成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那么方方正正节约空间。对于这样的串口,只要找一个或者自己做一个转换头就可以了。

 

啥时候大家都觉得支持调试就像准备灭火器那么必不可少,我们就不用担心没有端口支持调试了。

 

posted on 2009年9月5日 7:42 由 Raymond

# re: 宝贵的串口 @ 2009年9月14日 13:18

灭火器的比喻相当到位:)

baiyanhuang

# re: 宝贵的串口 @ 2010年2月23日 17:18

哈哈, COM, USB, 1394我都用过, 串口最简单, 1394其次, USB最麻烦,也最不容易连接成功.

wowanjinhua

Powered by Community Server Powered by CnForums.Net