FRU_BOARD_EXTRA区域更改问题

当前使用命令:ipmitool raw 0x30 0x90 0x03 0x70 0xAA擦除了CpuBoard1中Board Extra的数据

现在Board Extra中是没有数据的

现在使用命令:ipmitool raw 0x30 0x90 0x05 0x46 0x02 0x06 0x00 0x0A来写Board Extra,无法写入,报错如下

请问我现在应该如何写Board Extra

答案内容由AI生成,仅供参考:

关于写入 FRU Board Extra 区域的分析与指导

根据您提供的信息和知识库中的相关规范,您尝试使用命令 ipmitool raw 0x30 0x90 0x05 0x46 0x02 0x06 0x00 0x0A 写入 CpuBoard1 的 Board Extra 区域,但写入失败。以下分析和建议基于现有知识。

1. 命令 0x30 0x90 0x05 的作用

知识库明确指出,0x30 0x90 0x05 是一条用于访问和修改 BMC 中 FRU 信息字段的 IPMI 命令。该命令可以修改 FRU 数据条目,包括 Board Extra 区域。因此,命令本身是正确的,但参数格式可能存在问题。

2. 正确的写入参数格式参考

根据知识库中的 FRU 写入规范(文档块4),写入 FRU 数据时应遵循以下格式(以 0x30 0x90 0x05 为例):

  • 命令头0x30 0x90 0x05
  • 后续参数(依次为):
    • FRU ID(设备编号,如 0x00 表示第一个 FRU,CpuBoard1 可能为其他值)
    • Area/Field 标识:用于指定要写入的目标区域。Board Extra 属于 Board 区域,其 field 编号为 6(标准 FRU 中 Board Extra 对应 field 6)。
    • 偏移量:写入数据在区域内的起始偏移(通常从 0 开始)。
    • 长度:写入数据的字节数。
    • 数据内容:要写入的实际二进制数据。

知识库中的示例(写电子标签):
ipmitool raw 0x30 0x90 0x05 0x00 0x03 0x06 0x00 0x0C 0x31 0x32 ...
其中 0x00 为 FRU ID,0x03 为区域号?该处的具体映射可能需参考 BMC 的 FRU 数据结构。

3. 您当前命令的问题分析

您的命令 0x30 0x90 0x05 0x46 0x02 0x06 0x00 0x0A 中:

  • 0x46(十进制 70)作为偏移量,可能不是 Board Extra 区域的起始偏移。Board Extra 数据位于 FRU 内部,其偏移取决于之前字段的长度(如 Board Mfg Date、Board Manufacturer 等)。通常需要先通过 fru printfru read 工具查询当前的 FRU 结构,确定 Board Extra 区域的实际偏移。
  • 0x02 可能被误认为是 FRU ID,但通常 FRU ID 应为单字节(如 0x00, 0x01 等)。
  • 0x06 作为 field 编号是正确的(Board Extra)。
  • 0x00 表示写入偏移(从 0 开始?但已在前面指定了偏移 0x46,存在重复)。
  • 长度 0x0A(10 字节)在 Board Extra 字段限制内(最大 48 字节)。

可能的原因:参数顺序或偏移值与 BMC 期望的格式不匹配。

4. 正确写入的建议步骤

由于知识库未提供该平台 BMC 的完整命令字节映射,建议按以下通用方法操作:

  1. 确认 FRU 设备 ID:CpuBoard1 通常为 FRU ID 2(可通过 ipmitool fru printfru list 确认)。

  2. 查询当前 FRU 结构:使用 ipmitool raw 0x30 0x90 0x04(读取 FRU 信息)获取完整的 FRU 二进制数据,解析出 Board Extra 区域的实际偏移和长度。

  3. 使用标准写入格式

    ipmitool raw 0x30 0x90 0x05 <FRU_ID> <Area> <Field> <Offset_within_field> <Length> <Data...>
    
    • <FRU_ID>: 如 CpuBoard1 为 2(0x02)
    • <Area>: Board 区域通常为 0x02(标准 IPMI FRU 中 Board area = 2)
    • <Field>: Board Extra 对应 field 6(0x06)
    • <Offset_within_field>: 从该 field 的起始位置开始偏移(通常为 0)
    • <Length>: 不超过 48 字节
    • <Data>: 要写入的十六进制数据

    例如,向 FRU ID 2 的 Board Extra 写入 10 字节数据 31 32 33 34...(假设):

    ipmitool raw 0x30 0x90 0x05 0x02 0x02 0x06 0x00 0x0A 0x31 0x32 0x33 0x34 0x35 0x36 0x37 0x38 0x39 0x30
    
  4. 检查命令是否被禁用:知识库中提到某些 raw 0x30 0x92 命令因“命令禁用”而失败。虽然您使用的是 0x30 0x90,但如果 BMC 安全策略限制了 FRU 写入,可能需要先执行:

    ipmitool raw 0x30 0x90 0x21 0xf0   # 启用 BMC 定制模式(用于修改 FRU/BIOS 数据)
    

    再执行写入命令。

  5. 验证写入结果:使用 ipmitool fru print 2(指定 FRU ID)查看 Board Extra 内容是否生效。

5. 注意事项

  • 写入长度限制:Board 区域的每个 field(除 field 0 为 3 字节外)最多支持 48 字节(知识库中明确)。
  • 顺序写入要求:若需多次写入同一区域,必须从头到尾按顺序写入,不能乱序。
  • 跨平台差异:实际命令格式需以 BMC 的 FRU 协议实现为准,建议参考该产品的 FRU 编程手册或 BMC 日志(如 frudata 日志)中的错误提示。

如果按照上述建议修改后仍无法写入,可能是 BMC 限制了 FRU 写入操作(如仅允许通过系统自带工具 WriteFRUData 等方法进行),此时建议联系 BMC 固件开发人员确认正确的写入命令。