一种通过BootCode修复硬盘ROM的方法

文档序号:9865347阅读:3802来源:国知局
一种通过Boot Code修复硬盘ROM的方法
【技术领域】
[0001 ]本发明涉及信息安全技术领域,特别涉及一种通过Boot Code修复硬盘ROM的方法。
【背景技术】
[0002]随着硬盘容量和技术的发展,固件的组织架构已经发生了变化。固件内部结构越发复杂和多变。硬盘正常工作所需要的微代码越来越多,需要加载到硬盘缓存的固件内容也越来越多。
[0003]希捷硬盘的日常使用中,由于R0M中引导代码加载时出错或版本不稳定,可能会导致无法正确读取固件区起始地址以及硬盘段位信息。由于坏道引起固件的错误,可能会导致硬盘固件区出错,严重的导致无法读取固件信息,无法使其加载到缓存中去。

【发明内容】

[0004]本发明针对现有技术的缺陷,提供了一种通过BootCode修复硬盘ROM的方法,能有效的解决上述现有技术存在的问题。
[0005]一种通过Boot Code修复硬盘ROM的方法,包括下面步骤:
[0006]S1:使用故障盘COM口通过Boot Code方式读取硬盘ROM;
[0007]S2:找到ROM中SAP、RAP、CAP和SHELL数据体,并将上述数据体覆盖到适配ROM中,形成新的ROM;
[0008]S3:将适配之后的ROM重新回写硬盘。
[0009]所述SI的详细步骤如下:
[0010]SlOl:检查硬盘COM口是否连接正常;
[0011]S102:判断硬盘是否处于boot code下,若是则执行S103;若不是则重新开电并连续向硬盘发送“U”指令,让硬盘进入boot code,执行S103 ;
[0012]S103:偏移地址“0x100000” ;
[0013]S104:从该偏移地址开始,读取512个字节,并将返回的数据存入Buf fer I;
[0014]S105:判断buff erl中偏移OxAC位置的值是否小于“0x200000”,若是则执行S106,若否则在boot code写入引导文件,初始化boot code;
[0015]S106:通过S105中OxAC位置的值和“OxFFFFFFOO”进行“与操作”,获得重取地址;
[0016]S107:偏移至重取地址,通过AP “Ox重取地址”偏移;
[0017]S108:读取重取地址后的512字节,并将返回数据存入buff er2;
[0018]S109:在buff erl中取偏移OxAC处的低位一个字节与“OxFF"进行“与操作”,得到的低位一个字节作为Buffer2中用于确定重读的512字节的偏移位置;
[0019]S110:从该位置向后取16字节长度的内容和“00 00 CO Cl Cl 81 01 40 C301 03CO 02 80 C2 41”比较;如果相等执行Slll,如果不相等则修改引导文件使其能够正常读取R0M,执行Slll;
[0020]SI 11:将引导文件写入硬盘,定位到“0x401”,输入1024次GO获取返回ROM内容。
[0021]作为优选,所述S2的详细步骤如下:
[0022]S201:找到ROM数据体内的SAP、RAP、CAP和SHELL数据体的存储位置;
[0023]S202:计算SAP、RAP、CAP和SHELL数据体的大小,并提取;所述大小的计算方法为4个字节为一组,SAP、RAP、CAP和SHELL特征后的一组数据的后三个字节减去SAP、RAP、CAP和SHELL特征后三个字节的值等于SAP、RAP、CAP和SHELL数据体的大小;
[0024]S203:找一种低版本的适配ROM代码,找到适配ROM的SAP、RAP、CAP和SHELL数据体,将故障盘SAP、RAP、CAP和SHELL数据体覆盖到适配ROM中,组成新的R0M,并将新ROM写入故障盘。
[0025]所述S3的详细步骤如下:
[0026]S301:检查硬盘COM 口是否连接正常;
[0027]S302:判断硬盘是否处于boot code下,若是则执行S303;若不是则重新开电并连续向硬盘发送“U”指令,让硬盘打断它正常的引导进入boot code,重新执行S302;
[0028]S304:检查ROM完成性,是否为512kb大小,若是则执行S305,若不是则表示ROM不正常,重新执行S203;
[0029]S305:定位地址0x1000000;
[0030]S306:从该位置开始读256个字节返回到buf f er3 ;
[0031 ] S307:在buf fer3的OxAC处取4个字节进行判断,如果大于0x200000,则修改写入的引导文件使其可以正常写入执行S308,反之则无需修改执行S309;
[0032]S308:定位地址到0x400处,写入修改好的引导文件;
[0033]S309:接着定位地址到0x401处,开始ROM数据的写入。
[0034]与现有技术相比本发明的优点在于:修复硬盘成功率高,减少因硬盘故障导致数据丢失所带来的损失。
【具体实施方式】
[0035]为使本发明的目的、技术方案及优点更加清楚明白,以下举实施例,对本发明做进一步详细说明。
[0036]一种通过Boot Code修复硬盘ROM的方法,包括下面步骤:
[0037]S1:使用故障盘COM口通过Boot Code方式读取硬盘ROM;
[0038]S2:找到ROM中SAP、RAP、CAP和SHELL数据体,并将上述数据体覆盖到适配ROM中,形成新的ROM;
[0039]S3:将适配之后的ROM重新回写硬盘。
[0040]所述SI的详细步骤如下:
[0041 ] SlOl:检查硬盘COM口是否连接正常;
[0042]S102:判断硬盘是否处于boot code下(通过是否能获取Boot Cmds:字符串确定,能获取则代表是处于boot code下),若是则执行S103;若不是则重新开电并连续向硬盘发送“U”指令,让硬盘打断它正常的引导进入boot code,执行S103;
[0043]S103:偏移地址“0x100000” ;
[0044]S104:从该偏移地址开始,读取512个字节,并将返回的数据存入Bufferl;
[0045]S105:判断buf fer I中偏移OxAC位置的值是否小于“0x200000”,若是则执行S106,若否则在boot code写入引导文件,初始化boot code;
[0046]S106:通过S105中OxAC位置的值和“OxFFFFFFOO”进行“与操作”,获得重取地址;
[0047]S107:偏移至重取地址,通过AP “Ox重取地址”偏移;
[0048]S108:读取重取地址后的512字节,并将返回数据存入buff er2;
[0049]S109:在buf fer I中取偏移OxAC处的低位一个字节与“OxFF"进行“与操作”,得到的低位一个字节作为Buffer2中用于确定重读的512字节的偏移位置;
[0050]SI 10:从该位置向后取16字节长度的内容和“00 00 CO Cl Cl 81 01 40 C301 03CO 02 80 C2 41”比较;如果相等执行S111,如果不相等则修改引导文件(引导文件是用于在Boot Code下读取ROM,事先编写的文件)使其能够正常读取ROM,执行Sill;
[0051 ] SI 11:将引导文件写入硬盘,定位到“0x401”,输入1024次GO获取返回ROM内容;
[0052]所述S2的详细步骤如下:
[0053]需要注意的是下面出现的“XX”为随机数;
[0054]S201:找到ROM数据体内的SAP、RAP、CAP和SHELL数据体的存储位置;这里找到SAP的存放地址有两种方式,第一种为:找ROM头部,以4个字节为一组,找到SAP特征“05 XX XXXX”、RAP特征 “04
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1