一、模块功能与定位
- 核心作用
01模块 是西数硬盘固件区的 核心目录表,记录所有固件模块的位置(ABA地址)、大小、副本信息及校验值,相当于固件区的“地图”。- 重要性:若01模块损坏,硬盘无法定位其他固件模块(如编译器、SMART表),导致启动失败、不识别或敲盘
。
- 重要性:若01模块损坏,硬盘无法定位其他固件模块(如编译器、SMART表),导致启动失败、不识别或敲盘
- 与0B/20B模块的关系
- 0B/20B模块(ROM模块目录)负责指定01模块的加载地址,而01模块进一步定位其他服务区模块(如微代码、编译器、ID模块等)。
- 启动流程:ROM → 0B/20B → 01模块 → 其他固件模块。
二、模块结构解析
1. 通用头部(0x00-0x17)
| 偏移 | 长度 | 含义 | 示例/说明 |
|---|---|---|---|
0x00-0x03 |
4字节 | 模块标识 | 52 4F 59 4C(ASCII:”ROYL”) |
0x06-0x07 |
2字节 | 有效数据起始地址 | 通常为 0x30(后续条目表起点) |
0x08-0x09 |
2字节 | 模块ID | 0x0001(01模块自身ID) |
0x0A-0x0B |
2字节 | 模块长度 | 单位:扇区(需转换为十进制) |
0x0C-0x0F |
4字节 | 校验值 | 用于验证模块完整性 |
0x10-0x17 |
8字节 | 版本信息 | 固件版本号或修订标识 |
2. 条目表控制字段(0x30-0x33)
0x30-0x31:条目数量(2字节),包含01模块自身。
示例:7E 01(十六进制)→ 382个条目(十进制)。0x32:单个条目长度(1字节),常见为0x0C(12字节)或0x0E(14字节)。0x33:副本数量(1字节),与磁头数相关(如双磁头硬盘通常有2份副本)。
3. 条目表结构(从0x34开始)
每个条目记录一个固件模块的信息,结构因条目长度不同而异:
- 12字节条目(常见):
偏移 长度 含义 0x00-0x012字节 模块ID(如 0x0002为ID模块)0x02-0x032字节 模块大小 0x04-0x074字节 校验码 0x08-0x0B4字节 Copy0的ABA地址 0x0C-0x0F4字节 Copy1的ABA地址 - 14字节条目:
前2字节用途未知,后续字段与12字节条目一致,但地址偏移后移(如Copy0地址在0x3E-0x41)。
三、关键操作与数据恢复应用
1. 模块屏蔽
- 原理:修改条目中的模块ID(如改为无效值
0xFFFF),使硬盘忽略该模块。 - 步骤:
- 定位目标模块的条目;
- 修改ID并更新校验值;
- 回写01模块并重校验整个模块。
2. 固件地址偏移
- 场景:固件区存在坏道时,需将模块迁移至新位置(如11模块损坏常见)。
- 步骤:
- 修改条目中的 ABA地址(指向新位置);
- 更新模块校验值;
- 回写01模块及迁移后的目标模块。
3. 磁头屏蔽
- 结合 0A模块(磁头位图) 修改使用中的磁头数(如屏蔽损坏磁头),需同步更新01模块中依赖磁头的副本地址。
四、校验机制
01模块的完整性依赖两级校验:
- 条目级校验:每个条目的4字节校验码(
0x04-0x07)验证模块数据。 - 模块级校验:头部校验值(
0x0C-0x0F)通过算法生成(如累加和取补),修改后必须重新计算。- 算法示例:
python
checksum = 0x100000000 - (sum of all DWORDs in module)
- 算法示例:
五、注意事项
- 兼容性
修改01模块需确保固件版本、家族号匹配,否则可能导致启动失败。 - 备份优先
操作前务必备份原始01模块及关联模块(如0B/20B),避免误操作导致不可逆损坏。 - 工具依赖
需通过PC3000、MRT等专业工具读写固件区,并支持校验值自动计算。
模块结构简化示意图
plaintext
| 头部 (0x00-0x17) | 条目表 (N×12/14字节) |
|-------------------------------|-------------------------------|
| 标识"ROYL"、长度、校验值... | 条目1: ID+大小+地址+校验 |
| 条目数量、副本数、条目长度 | 条目2: ID+大小+地址+校验 |
| ... | ... (共N条) |


