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 print 或 fru 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 print 或 fru 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 固件开发人员确认正确的写入命令。

扩展域要按照key=value格式写入

应该是Description=KP920 24C

ipmitool raw 0x30 0x90 0x04 0x46 0x02 0x06 0x00 0x15 0x44 0x65 0x73 0x63 0x72 0x69 0x70 0x74 0x69 0x6f 0x6e 0x3d 0x4b 0x50 0x39 0x32 0x30 0x20 0x32 0x34 0x43

只有product域支持格式定制吗,board域没支持吗

这块的格式校验是在闭源代码里吗?看代码发现frudata/src/lualib-src/l_frudata_intf.c的很多调用找不到实现

c代码大部分是闭源组件实现的所以搜不到调用,扩展域写入格式为:key=vlaue格式,中间需要写入一个等号