分页: 1 / 1

【转帖】HP笔记本安装光驱位(IDE-STAT)硬盘托架准完美解决方案

发表于 : 2011年 10月 8日 23:57 星期六
admin
看到一个技术贴,迫不及待地转过来给大家,来自51nb,感谢网友 wertpoiu 分享
------------------------------------------------------------------

HP笔记本安装光驱位(IDE-STAT)硬盘托架准完美解决方案

不少网友反映HP某些型号的笔记本在使用IDE转STAT的硬盘托架的过程中,发现不能向硬盘中写数据(提示“缓存写入失败”)和,读写数据速度较慢的问题。最近在升级nw9440(945PM+ICH-7M)硬盘托架的过程中也遇到了类似问题,经过软硬件上的联合实验,现在找到了问题的原因和比较合适的解决方法。
造成HP光驱位硬盘兼容性差的主要原因是HP对接入光驱的IDE控制器的工作模式进行了限制,使之最高只能工作在Multi-Word DMA的方式(正常工作应该是Ultra DMA Mode x),最高传输速度只有16MB/S,而关键的问题是硬盘托架上的88SA8040芯片对这种工作模式的支持也比较糟糕,于是就出现了前文所述的各种现象。
1.png
HP的BIOS参数选项很少,且在IDE控制器初始化的时候做了限制。破解这种限制的方法理论上有很多,比较容易实现的有3种:

1、
使用“RW-Everything”软件修改IDE控制器的48h-4Bh值为01 00 02 00。
2、
在XP启动之前执行一段程序,修改寄存的值。
3、
在MBR中加入汇编指令,修改寄存的值。
修改后硬盘读写功能正常,可以看到硬盘会工作在Ultra DMA Mode 2,也就是平常我们所说的ATA33,读写平均速度达到29MB/s,CPU占用率仅3%。也不存在跟希捷硬盘不兼容的问题。(关于支持ATA66和ATA100的问题后续讨论)
2.png
方法一:

使用RW- Everything的操作最简单,但是修改结果不能保存,每次开机都需要重新修改。RW的操作过程如下。
1、 从设备管理器中禁用“主要IDE控制器”。(略过此步骤可能导致系统崩溃)
2、 打开RW软件,从菜单中点Access -> PCI。
3、 从左上角的下拉框中选择“Bus 00 …… IDE Controler”
4、 修改地址为48、4A的两个寄存器的值,把原来的00分别改为01和02。
5、 从设备管理器中起用“主要IDE控制器”。
这时,如果光驱位安装的是硬盘托架,可以看到硬盘会工作在Ultra DMA Mode 2,且读写功能正常。
3.png
4.png
方法二:

在XP引导前执行的程序见附件(在DOS下调试通过),工作原理是在XP加载IDE驱动之前,修改这两个配置寄存器。如果在XP引导以后修改这两个寄存器,有可能会导致系统崩溃。在网上看到很多在XP引导前加载应用程序的方法,但是没有试出来能用的。另外由于该程序是运行在DOS模式下的,在Windows下运行会出错。
实现以上两种方法需要用到的软件如下:
1、RW-Everything绿色版V1.3.rar
RW-Everything绿色版V1.3.rar
2、ICH7_IDE_Patch.rar
ICH7_IDE_Patch.rar

方法三:

在主引导记录(MBR)中植入一段代码,修改IDE的配置寄存器。我最后采用的就是这种方案,这种方案操作起来比较麻烦,但是一劳永逸,即使以后重装系统(只要不重写MBR),都不会受到影响。由于该方法不是直接对MBR进行修改,所以操作比较安全,一旦出错,可以随时用备份的MBR恢复。
修改MBR主要用到3个软件:

1、读写MBR的软件,这里用的是“三茗硬盘医生”,该软件在DOS下运行,可以查看、备份、恢复MBR。
2、IDA pro Free(这里用的是5.0版本),这是一个反汇编软件,主要作用的分析MBR中的原有程序,找到合适的插入点,并校验新代码的正确性。
3、UltraEdit,编辑备份的MBR。
操作步骤如下:
1、
使用光盘引导,启动DOS环境。这里不推荐使用U盘引导,因为U盘引导完成以后,很多软件会把U盘默认成系统盘,无法正确导出MBR。
2、
启动“三茗硬盘医生”,备份MBR。MBR备份在同目录下“001.DAT”文件。
3、
重新启动Windows,准备使用IDA分析MBR。这时需要先把三名磁盘医生备份出来的“001.DAT”文件扩展名改为“.exe”。
4、
启动IDA,选择NEW。关闭向导,从菜单选择File -> Open 打开“001.exe”文件。
5.png
5、
在“Load a new file”对话框中选择“Binary file”,点OK。
6.png
6、
在随后弹出的确认使用32位模式的对话框中选择“No”,使用16位模式。
7.png
7、
开始反汇编,把光标放在0000地址,点键盘上的“C”键,右侧的机器码立即被翻译成汇编指令。
8.png
8、
分析MBR,关于MBR的分析,网上有很多,这里不再赘述。如果MBR内容与本文附件中的参考MBR一致,可以略过此步骤。
9、
植入修改寄存器的代码。基本原理如下:
将修改IDE寄存器的代码放在180H开始的一段空间里。代码为:“B8 0C B1 BB F9 00 BF 48 00 B9 01 00 CD 1A B8 0C B1 BB F9 00 BF 4A 00 B9 02 CD 1A”
将1bH的代码移动到修改寄存器的代码后面,原来IbH的位置放置一条跳转指令“E9 62 01”,使程序跳到180H处开始修改寄存器。
执行完修改寄存器的指令后,紧接着执行移动到新位置的(原来在1bH处)的指令,然后在执行跳转指令“E9 7C FE”,使程序跳回原来位置,继续执行。
E9是跳转指令的操作码,后面跟的两个立即数是操作数(如“62 01”),表示跳转偏移(程序计数器指针增加)是0162H,“FE7CH”是以二进制补码形式表示的负数,表示程序向前跳转。
9.png
10、
修改完成后保存,使用IDA校验程序的执行顺序,看是否有错,如果跳转的地址不正确,可以使用IDA再做调整。(需要修改IDA安装目录下的cfg目录中的idagui.cfg文件,把“DISPLAY_PATCH_SUBMENU = NO”改成“DISPLAY_PATCH_SUBMENU = YES”,重启IDA后,把光标放在跳转指令上,从菜单选Edit -> Patch program -> change Byte可以即时修改跳转的参数,直到实验出合适的参数为止,在把这个参数写回UE。)
10.png
11、把改好的文件名重新改为“001.dat”,放到“三茗硬盘医生”目录下。
12、使用光盘引导,启动DOS环境,启动“三茗硬盘医生”,还原MBR。
13、重启Windows,大功告成。(如果失败,则还原成以前的MBR,继续回Windows修改)

参考MBR:
MBR.rar
三茗硬盘医生
三茗硬盘医生21.zip


最后要讨论的就是UDMA2(ATA33)到UDMA4/5(ATA66/100)的问题。

看了从T13上下载的《Information Technology -AT Attachment with Packet Interface - 5》,对于IDE控制器来说,主要就是检测“PDIAG”信号,如果控制器检测到PDIAG是低电平,则认为目前使用的是80芯的扁平电缆,IDE控制器会运行在66或100的模式。我曾经试着在光驱端把nw9440的PDIAG信号拉低,但没有效果,怀疑是HP的硬件工程师为了走线方便,这根线可能就没有接到IDE口上。如果想改主要有几种方案:
1、修改硬件,找出PDIAG,并将之拉低。这样做的问题是风险较大,笔记本上的连接器拆的次数多了就会出现接触不良的问题,导致系统不稳定。
2、修改atapi.sys驱动,理论上讲,如果让驱动无视PDIAG的状态,按照ATA66传输就行了,但是由于没有原码,修改这个驱动工作量会相当大。
3、其他。
由于没有达到最终的ATA100的传输速度,所以我说这个解决方案不能算是完美,只能叫准完美吧。

另外附上光驱IDE接口图纸和88SA8040接口板图纸。
11.gif
12.jpg

8510W/8710W 用的是“Intel PM965+ICH8M”,如果存在Multi-Word DMA Mode 2的问题,理论上也可以用类似的方法解决。基本步骤如下:
1、找出IDE控制器的地址。
2、找出对应的寄存器。可以找一个ThinkPAD同平台的本子,比较寄存器区别。同时Intel网站上有ICH8的DataSheet下载,可以参考。
3、使用RW修改测试,如果测试成功,在进一步修改MBR。

直接修改BIOS当然是最根本的方法,但是难度比较高,不容易短期实现。

Re: 【转帖】HP笔记本安装光驱位(IDE-STAT)硬盘托架准完美解决方案

发表于 : 2011年 12月 6日 12:46 星期二
jmpxwh
很好的帖子,我也想把我的8510W改一下~