5.6 IBM驱动器固件
本节将介绍IBM驱动器固件的相关知识。
5.6.1 IBM驱动器固件结构
IBM驱动器固件由存储在ROM中的固件、NV-RAM中的配置数据以及可从磁盘服务数据区加载的带有数据的固件部分(DISK Firmware,磁盘固件)组成,如图5-16所示。固件通过版本号和版本码进行识别,版本号反映开发进度,版本码实际上是工程代号。
图5-16 IBM驱动器固件结构
存储在掩膜ROM中的固件不能被修改(出货驱动器固件不存储在掩码ROM中,代之的是从串行Flash ROM中加载)。整个现代化的固件是由“NV-RAM+DISK FW”对来完成的。因此,IBM专家提出了如下规则来鉴别固件的新版本:固件版本号改变而版本码不变;只改变版本号的第三个和第四个字符。例如,版本号修改之前可能是A46A,更新后将变为A4 xx, “xx”表示另外两个字符。
不同属系的IBM驱动器的固件不能互相替换。
因此,符合以下条件的“ROM+NV-RAM+Disk F/W”集就是兼容的。
ROM、NV-RAM及DISK F/W的固件版本码相同。
NV-RAM和DISK F/W中的μ-Code码相匹配。
存储在ROM中的固件版本号与NV-RAM和DISK FW中的固件版本号只有最后两个字符不同。
5.6.2 电路板兼容性
PCB的兼容性可以方便地通过IDE接口处的标签来加以识别。IDE接口处的标签代码也记录在PIDM“开放”模块中。如果前两行的第一个符号相匹配,电路板通常就是兼容的,完全可以互换。对兼容性更精确的判断方法是通过ROM或NV-RAM中的信息(由于NV-RAM中的数据可能损坏或错误可能被重写,所以依赖ROM中的信息会更安全一些)来完成。IDE接口处的标签如图5-17所示。
图5-17 IDE接口处的标签
NV-RAM中包含磁头映射数据,因此同一属系不同型号驱动器的PCB不兼容。为了使PCB兼容,可以把相应型号驱动器的NV-RAM写入PCB中,但是微处理器的掩膜ROM版本应该匹配NV-RAM版本和固件模块版本。
可以在“Work with NV-RAM”(NV-RAM操作)菜单中通过“View NV-RAM data”(查看NV-RAM数据)命令来查看PCB固件版本。固件μ-Code码形如“ER2OA41A”,其中,“ER”代表驱动器属系码,“2”代表物理磁头数,“A41A”代表固件版本号。此外,“Work with ROM”(ROM操作)菜单下的“View ROM data”(查看ROM数据)命令用于查看基本固件版本号及其版本码。给定ROM设置的实际记录是该ROM芯片内的最小固件数据,也就是在这里看到的基本版本。
5.6.3 固件结构介绍和故障时访问固件区的方法
和很多其他驱动器一样,IBM驱动器的固件记录位于隔离区域的服务磁道,由很多模块组成。唯一较大的区别是,IBM驱动器的PCB使用了串行访问的非易失存储芯片(Non-volatile Memory, NV-RAM),存储容量为256字节或512字节。此存储芯片内包含一个用于将驱动器调整为特定型号的设置信息的附加服务模块。另一个区别表现在IBM驱动器总存在着不需要将驱动器转换到工厂模式就可以读写的“开放”(Open)服务模块。大部分“开放”模块列表都来自USAG。此外,开放模块(Open Modules)列表中还包括厂商分发的故障诊断工具使用的附加模块。大部分附加模块对驱动器来说都不是必需的,有些空间仅仅分配给了模块,但是没有内容,尝试读取这样的空间时会产生错误,所有主要功能都位于USAG模块里描述的一个受保护的固件区域内。
固件区数据可以细分为以下4类。
RSVD模块:包含在模块表中,标记服务磁道的起始位置。
USAG表中列出的模块:所有模块对于驱动器的运行都至关重要。
没有记录在USAG表中的部分:参与驱动器工厂自测。
开放固件数据的一部分:与USAG中的模块组不相交(包含在开放模块列表中,但与工厂测试应用功能涉及的大量其他USAG模块相分离)。
执行“Check firmware structure”(检查固件结构)命令后,关闭的和开放的固件都将被读取。此外,主要的和附加服务磁道里的空白空间也将被检查(空白空间是服务磁道的一部分,它不被列表中的任何模块占用)。“RD”标签指示模块是否可读。读出了模块,将出现“RD:√”的提示信息,否则会显示“RD: -”的提示信息。“ID”标签反映一个模块的模块表中的标识与包含在实际模块体里的模块标识是否相符。应该注意:与其他模块不同,开放模块表里包含的是模块的别名(例如,RDMT模块在开放模块表中的主复本名称为“RDM1”,因此其复本名称就是“RDM2”)。该命令也用于输出区域分配表和其他参数。一些固件模块的用途列在表5-4和表5-5中。
表5-4 Closed(关闭)模块的标识与用途
表5-5 Open(开放)模块的标识与功能
在分析固件时要注意,IBM驱动器的模块没有校验和,因此判断固件模块结构是否损坏比较困难。
IBM驱动器可以在PCB部分初始化的情况下读/写固件数据(要对模块进行操作,从磁盘服务数据区加载固件不是必需的,但从NV-RAM初始化是必需的)。因此,对固件区某些模块不可读这种问题,通过审核固件区结构报告就可以很容易地识别出来。在尝试读取固件数据时,如果驱动器不停地敲盘,可按照以下步骤进行操作。
断开PCB和HDA间的主轴马达控制电缆,并一直等到驱动器报告就绪。此方法不适用于120GXP驱动器,因为120GXP驱动器没有HDA就不会报告就绪。对于120GXP驱动器,应该使用另一种方法使之进入就绪状态:关闭驱动器电源,短接NV-RAM的5脚和6脚,在5脚和6脚短接的情况下打开驱动器电源。几秒钟之后,驱动器就会报告就绪。然后,应移除5脚和6脚间的短接线。
依次选择“Work with firmware zone”、“Modify configuration”、“Switch SA access”(转换固件区存取方式)选项。经过这样的操作之后,驱动器已经从NV-RAM正确初始化,但由于使用了不同的版本来读取USAG,所以将终止进一步的加载过程。尽管如此,现在已经可以访问固件区进行分析了。
因此,接下来应该运行固件区诊断。为达到此目的,需要重复使用“Firmware data”、“Work with firmware zone”、“Read modules”命令从驱动器依次读取每个模块。在这个过程中,引起敲盘的那个模块就是损坏的模块。
此外要提到的是IBM驱动器的安全模式。通过专门的跳线设置可将驱动器转换到安全模式。在安全模式下可以读写驱动器的NV-RAM,但是不能对磁盘表面进行操作。因此,可以使用安全模式代替短接电路法来修改NV-RAM。
不同驱动器属系的安全模式对固件区操作的影响不同。对于22GXP、34GXP和37GP属系,当定位固件区读取固件微程序并启动时,要对驱动器进行完全初始化。因此,如果固件区损坏,驱动器就会不停敲盘。而对于40GV及之后属系,访问固件区的尝试将直接被忽略。
因此,安全模式不能用于测试和恢复固件区中损坏的数据。
当对固件区进行操作时,要谨记“Work with ROM”和“Work with firmware zone”菜单的相关要求。
查找故障时,可参照如图5-18所示的思路进行。
图5-18 IBM驱动器维修思路
检查NV-RAM时要注意以下方面。
标识必须是“E2PR”。
固件版本号必须与ROM版本匹配。
固件版本码必须与ROM码匹配。
如果驱动器之前没有进行过磁头交换修理,或者至少我们没有这种感觉,那么驱动器的磁头映射必须与该属系的某一个型号相符。例如,它永远不可能包含一个指向不存在的转接器的连接点(例如33号磁头指向的连接点)。
NV-RAM中包含校验和,如果NV-RAM损坏,驱动器会发现校验和错误而中止加载过程。这种情况可以从数据库写入相应类型和版本的驱动器NV-RAM。如果是NV-RAM结构损坏引起的设备故障,只要一打开驱动器电源,主轴就会起转,并会尝试从磁盘表面加载固件。
依次使用固件区操作、检查固件结构命令可以完成对固件模块的检查,如果某一模块有一部分不可读,程序就报告此模块不可读。这时,可以通过数据库来重写损坏的模块。数据库里的源模块来自固件版本匹配的驱动器。由于IBM驱动器模块没有检验和,因此在判断模块是否损坏时有一点困难。可以使用前面介绍的一个模块一个模块地读取的方式来进行判断。
如果RSVD模块有标识存在,但模块体有垃圾信息,这种RSVD模块损坏的案例值得好好研究。这种情形下,驱动器的表现如同磁头故障,使用通常的方法不可能恢复它的功能。下面描述一下这种情况和修复方案。
问题:驱动器找不到固件,发出典型声音,不能向驱动器写入任何数据,其行为好像所有磁头禁止写入,而且所有固件损坏,所有磁头都不能读数据。
原因:RSVD模块逻辑损坏,RSVD标记尚在原来的位置,但是其他信息无效。
恢复过程:
第1步 设置安全模式跳线(对DJNA、DPTA属系,应断开马达控制电缆),使用另一个磁头代替原来的磁头0(可以尝试使用1号磁头),然后在带有这种磁头映射的情况下生成一个新的引导程序。将跳线跳回正常模式,打开电源并等待驱动器报告就绪。检查一下,NV-RAM可能会有用(以防万一)。
第2步 运行引导程序,以切换磁头分配顺序。
第3步 驱动器应报告就绪,但是会看到模块表不可读的提示信息。
第4步 使用所有磁头清除固件区。
第5步 关闭驱动器电源再打开,再次清除固件区。
第6步 写入原始NV-RAM,清除固件区。
第7步 关闭驱动器电源再打开,再次清除固件区。
a*.写入NV-RAM、正确的RSVD、USAG模块。
b*.写入其他模块。
c*.运行带模块的引导程序(不是转换磁头映射的那个引导程序,而是包含写入模块的那个引导程序,此操作可以保证正常写入模块)。
第8步 写入PSHT、RDMT模块。
第9步 关闭驱动器电源再打开。
a*.清除固件区。
b*.写入RSVD、USAG。
c*.写入其他模块。
d*.运行包含模块的引导程序。
第10步 写入PSHT、RDMT。
注意,以上标有“*”的连续操作必须一次完成,中途不能开关电源或重启修复程序。
5.6.4 驱动器数据的关键模块
PSHT、RDMT、SRVM、ZONE、CNSL、MLBA模块对IBM驱动器来说是关键模块。此外,NV-RAM中的磁头映射数据也要保持一致。