minsoft
驱动小牛
驱动小牛
  • 注册日期2001-07-30
  • 最后登录2007-03-06
  • 粉丝0
  • 关注0
  • 积分8分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2006回复:2

BIOS排错十法之陷井法

楼主#
更多 发布于:2004-02-12 18:38
三、 陷井法
陷井――我想各位都不陌生,小的时候谁没用它逮过麻雀或捉过小鱼,就连大文豪鲁迅先生也用过了。陷井法,也就是在“猎物”的必经之路上做好手脚,或引诱或等待“猎物”中套。这里的“猎物”就是BUG――具体的说是引起BUG的代码段。
在一个新的BIOS刚刚走完它的全程时,最大的考验就是瘟到死的安装过程,最常见的就是安装过程中猝死(蓝屏)或怠工(那种象陷入死循环的死机)。这种BUG由于BIOS已经顺利运行完毕,用前面的“排雷法”已经没有机会,用“比较法”又找不到合适的可比较的BIOS或者每根毫毛都比过了BUG还没有走开。这时,只好考虑动点心思布“陷井”了。
在具体布“陷井”之前,先谈谈“陷井”的制作。非常之简单,象前面讲的“排雷法”一样,间插一些往DEBUG卡第二端口上丢自定义的CODE的代码――我将这些代码称之为“陷井”。通过在各个可疑的代码路径上布一些“陷井”,配以相应的DEBUG卡,从而判断出最后一次对BIOS的调用是哪些代码(段),再进一步分析这些“最后值守的可疑分子”不难找出“真凶”。这里提醒一点,DEBUG卡最好是那种数码显示不受系统复位影响的那种,因为有些BUG的现象就是系统复位,如果数码显示也被系统复位给清掉了,就看不清最后一个CODE是什么了。
熟手已经想到,这种BUG应该属BIOS Runtime模块的BUG。但Runtime代码没有约定的执行流程,完全取决于应用层对其的调用。那我们的陷井布哪呢?其实,BIOS的Runtime代码主要集中:PCI/PnP、INT15、SMI、INT10和INT13。其中INT10和INT13分别是显示和磁盘的ISR,这些代码产生的BUG都比较直观,或者显示出错但系统可照常运行或者是磁盘I/O发生错误,而且这两个模块也容易使用各种测试软件测出。我们要布的陷井集中在PCI/PnP、INT15和SMI的处理代码中,瘟到死安装过程产生的系统宕机也常是深藏于上述代码中的BUG引起。对AMI BIOS(我只能以AMI BIOS为例,因为它的源码已经公开过,不会有版权之虞)这三功能的总入口点就分别在RT.ASM、INT15.ASM、SMI.ASM。不妨先在此三个总入口处布下陷井,看看“猎物”走的是哪一条道,而后再逐步分清它走的是哪一条子道,耐心点重复几次,不难发现其藏身之处。本人就曾使用此方法解决过好几个因为PnP处理代码中的BUG导致瘟到死98安装失败,又因USB SMI处理代码的BUG导致瘟到死2000安装USB DRV后“蓝屏猝死”的案例。
陷井法的原理就是这样,使用过程中就看各人的手法了,几点还是提出来给大家参考:
1、 布陷井之前可以充分使用setup的设置功能关闭/打开一些设备,以排除一些不必布陷的代码,(不至于要介绍一种排除法吧)提高陷井的命中率。
2、 陷井法与前面的排雷法之本质区别在于陷井法首先是找路,就如在一个交通错综复杂的城市,先确定“猎物”是否经过某条代码路径,只是找到路径后才可以利用排雷法定位具体的代码段。
3、 瘟到死安装过程中的BUG,可以借助ghost这个工具,将发生问题之前的系统备份下来,免去每次重新安装。
4、 如果你的DEBUG卡允许(不允许的时候可以使用BDA[Bios Data Area]中一些未定义的内存,我常这样干),你尽量将一些现场密切相关的寄存器值也丢出来,为下一次布陷井提供更多的参考,如一些中断状态值或子功能号等.

有大虾看后提出,找出BUG只是第一步,解决这些BUG才是关键。我认为“找到故障”是方法,“解决故障”是知识。如何解决一个故障是有章可循的,如USB有USB规范,ACPI、PCI、APM以及硬件原理等都是“章”,而我想总结的只是如何找到故障,在找的过程有什么方法可参考,而这些都是前辈的经验积累,无书可查的。
当然,如果有时间的话,我会考虑从PCI系统架构原理、BIOS的功能模块机制、BIOS运行流程、几大必读规范等方面写些体会,以互相学习。但在此前,我必须坚持完成这十法。
少了e,就少了全部
kermit
驱动小牛
驱动小牛
  • 注册日期2002-11-29
  • 最后登录2010-03-29
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望2点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-02-16 10:23
看来你是bios专业人员.
大家去看看我的USB BIOS下载卡,给点意见啊.

www.eyeteck.com
wcapc
驱动牛犊
驱动牛犊
  • 注册日期2001-12-07
  • 最后登录2010-04-18
  • 粉丝0
  • 关注0
  • 积分220分
  • 威望22点
  • 贡献值0点
  • 好评度22点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-02-16 13:04

   哎呀,自己人~~~~~~~~~
   "如果有时间的话,我会考虑从PCI系统架构原理、BIOS的功能模块机制、BIOS运行流程、几大必读规范等方面写些体会,以互相学习。但在此前,我必须坚持完成这十法。"
   全力支持!!!可以跟你交流一下吗?
天行健,君子以自强不息
游客

返回顶部