深入解析IPMI FRU规范:分区结构与字段标识详解
深入解析IPMI FRU规范:分区结构与字段标识详解
一、FRU数据结构与分区原理
1. FRU存储区域划分
根据Intel《Platform Management FRU Information Storage Definition》规范,FRU数据被划分为6个标准区域,每个区域通过Common Header中的偏移量定位:
区域名称 | 功能说明 | 是否必需 |
---|---|---|
Common Header | 定义其他区域的起始偏移量和版本信息,固定8字节 | 是 |
Internal Use Area | 保留给厂商固件使用,通常存放非易失性数据 | 否 |
Chassis Info Area | 记录机箱信息(类型、序列号等),系统唯一 | 否 |
Board Info Area | 存储主板信息(制造商、生产日期、PCB版本等) | 否 |
Product Info Area | 产品级信息(型号、资产标签等),OEM可自定义 | 否 |
MultiRecord Area | 扩展区域,支持传感器校准、厂商自定义数据等 | 否 |
关键特性:
- 每个区域通过偏移量链式定位,Common Header的
0x01-0x06
字节存储各区域起始地址(以8字节为单位)。 - 除Common Header外,其他区域通过类型码(如
0x01
表示Chassis)标识。
2. 分区字段标识规则
每个区域内的字段通过三级标识定位:
(1) 区域级标识
区域 | 类型码(Hex) | 规范章节 |
---|---|---|
Chassis Info | 0x01 | Section 5.3 |
Board Info | 0x02 | Section 6.3 |
Product Info | 0x03 | Section 7.3 |
MultiRecord | 0x04 | Section 8.3 |
(2) 字段级标识
每个区域包含预定义字段,通过字段编号区分。例如Board Area的字段定义:
字段编号 | 字段名称 | 数据类型 | 示例值 |
---|---|---|---|
0x02 | Board Mfg Date | BCD编码 | 0x20 0x25 0x02 0x18 (2025-02-24) |
0x03 | Board Manufacturer | ASCII字符串 | “Huawei” |
0x05 | Board Serial | ASCII字符串 | “2102314QUA10PC100055” |
(3) 子索引标识
- 重复字段(如
Extra
)通过子索引区分(从0开始):ipmitool fru edit 0 field e 0 "RackID-01" # 第一个Extra字段 ipmitool fru edit 0 field e 1 "Location-A" # 第二个Extra字段
二、字段标识实战:从规范到操作
1. 字段定位示例
以修改主板序列号为例:
- 确定区域:属于
Board Info Area
(类型码0x02
) - 查找字段编号:序列号对应字段
0x05
- 执行修改:
ipmitool fru edit 0 field 5 0 "NEW_SERIAL_123"
2. 特殊字段处理
字段类型 | 处理方式 | 示例 |
---|---|---|
BCD日期 | 转换为16进制值 | 2025-02-24 → 0x20 0x25 0x02 0x18 |
多语言字符串 | 首字节定义语言类型(0xC0 表示英文) | 0xC0 0x48 0x65 0x6C 0x6C 0x6F (“Hello”) |
厂商自定义 | 使用MultiRecord Area(类型码0x04 ) | 需厂商提供模板文件 |
三、FRU规范深度技术细节
1. Common Header解析
字节偏移 | 含义 | 示例值 |
---|---|---|
0x00 | 版本号(固定0x01 ) | 0x01 |
0x01-0x06 | 各区域起始偏移(8字节单位) | 0x10 0x20 0x30... |
0x07 | 校验和(其余字节和的补码) | 自动计算 |
2. 数据存储格式
- 字符串:以
NULL
结尾的ASCII码,最大长度255字节。 - 数值:Little-endian格式,如
0x1234
存储为0x34 0x12
。 - 校验和:每个区域末字节为校验和(所有字节和的补码)。
四、厂商实现差异与兼容性
1. 主流厂商扩展
厂商 | 扩展特性 | 工具支持 |
---|---|---|
Dell | 专用FRU格式(加密字段) | racadm getfruinfo |
HPE | iLO扩展MultiRecord类型 | ilorest |
华为 | 自定义Chassis Extra字段 | mmgetfru |
2. 常见问题解决
- 错误:
Invalid FRU field definition
原因:区域校验和错误或字段越界。
修复:使用厂商工具重写FRU(如英特尔sysfwupdt.efi
)。
五、总结与最佳实践
1. 操作黄金法则
- 备份优先:
ipmitool fru read 0 backup.bin
- 规范校验:通过
fru check
验证区域完整性 - 厂商适配:优先使用厂商工具修改加密字段
2. 扩展学习资源
- Intel FRU规范手册
- OpenBMC FRU实现源码
通过理解FRU的分区结构和字段标识规则,可精准管理硬件信息。如需更详细的字段映射表,可参考上述规范文档。