File Upload对应的ipmi命令执行报错Parameter out of range

问题描述

执行FileUpload对应的ipmi命令失败,报错为 Unable to send RAW command (channel=0x0 netfn=0x30 lun=0x0 cmd=0x93 rsp=0xc9): Parameter out of range

环境信息

  • 操作系统:[如 Ubuntu 24.04]

  • 软件版本:[如 OpenUBMC2509]

重现步骤

执行以下命令
ipmitool raw 0x30 0x93 0xdb 0x07 0x00 0x69 0x28 0x00 0x00 0x00 0x00 0x01 0x5c 0x89 0x00
回显为:
Unable to send RAW command (channel=0x0 netfn=0x30 lun=0x0 cmd=0x93 rsp=0xc9): Parameter out of range

实际结果

Unable to send RAW command (channel=0x0 netfn=0x30 lun=0x0 cmd=0x93 rsp=0xc9): Parameter out of range

定位过程

根据对应的ipmi oem文档,是可以查询到对应的File Upload


同时定位得到,该命令涉及的组件为bmc_upgrade,但是该组件未开源,不清楚具体实现

收取涉及的日志为:

2026-01-26 08:35:03.510188 bmc_upgrade ERROR: bmc_upgrade_ipmi.lua(276): upload failed, invalid ResouceId [31]
2026-01-26 08:35:03.511721 bmc_upgrade WARNING: init.lua(97): nil:-1 > reg_command.lua:196 > bmc_upgrade_ipmi.lua:277: Parameter out of range

期望结果

对应的ipmi命令能够正常使用,推测问题原因应该是ResouceId未支持到28h 主界面机型展示图片
那么具体的支持时间是会是什么时候?
此ipmi涉及的功能通过白牌包也可以实现,但是由于会有多种形态,需要更新主界面机型展示等其他图片,所以也需要该命令的支持。

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

文件上传IPMI命令报错“Parameter out of range”问题分析与定位

问题描述

执行 File Upload 对应的 IPMI 原始命令时失败,返回错误码 0xc9,提示信息为:

Unable to send RAW command (channel=0x0 netfn=0x30 lun=0x0 cmd=0x93 rsp=0xc9): Parameter out of range

该问题出现在使用 ipmitool raw 发送自定义 OEM 命令进行文件上传的过程中。


涉及的IPMI命令详情

属性 内容
NetFn 0x30
CMD 0x93
Sub Command 0x69 (File Upload)
Operation 00h Write Prepare, 01h Write Data, 03h Write Finish
Manufacturer ID 3字节,小端序(LSB first)

根据文档和接口定义,该命令用于向 BMC 上传文件,通常用于固件更新前的准备阶段。

从知识库中《IPMI OEM 命令索引集合》可知,NetFn 0x30hOEM 类命令 的统一功能码,不同子命令通过 CMD 和 SubCmd 区分。其中:

  • CMD=93h:包含 Set VNC Configuration (SubCmd=67h)Set Account Interface (SubCmd=68h)File Upload (SubCmd=69h) 等。

错误码解析:0xc9 - Parameter out of range

根据知识库中提供的《IPMI 标准命令索引集合》中的“标准完成码”说明:

IPMI 完成码 说明
C9h Parameter out of range

含义:请求中某个参数值超出了合法范围。

该错误码并非表示命令不支持,而是表示 参数校验失败,即某个字段传入了系统不接受的值。


定位过程与关键线索

1. 日志分析

从用户提供的日志可获取关键信息:

2026-01-26 08:35:03.510188 bmc_upgrade ERROR: bmc_upgrade_ipmi.lua(276): upload failed, invalid ResouceId [31]
2026-01-26 08:35:03.511721 bmc_upgrade WARNING: init.lua(97): nil:-1 > reg_command.lua:196 > bmc_upgrade_ipmi.lua:277: Parameter out of range

明确指出问题原因

  • invalid ResouceId [31]无效的 ResourceId
  • 实际传入的 ResourceId 为 0x28(十进制 40),但系统返回 [31] 可能为日志记录错误,或实际传参解析为 0x1F(31)

注意:用户命令中传入的 ResourceId 是 0x28(第5字节),对应十进制 40,而日志提示“invalid ResouceId [31]”,推测存在以下两种可能:

  • 日志打印错误,实际应为 40;
  • 或系统对 ResourceId 的最大值限制为 31,超限即报错。

2. 参数验证:Resource ID 超出允许范围

命令结构分析(用户输入):

ipmitool raw 0x30 0x93 0xdb 0x07 0x00 0x69 0x28 0x00 0x00 0x00 0x00 0x01 0x5c 0x89 0x00
字节位置 含义
1-3 Manufacturer ID 0xdb 0x07 0x00 = 0x0007DB = 华为
4 SubCmd 0x69 = File Upload
5 ResourceId 0x28 (40) :white_check_mark: 问题点
6 Reserved 0x00
7 Operation 0x01 = Write Data
8 DataLen 0x5c = 92 字节数据
9-12 Offset 0x89 0x00 0x00 0x00 = 偏移量 137(LSB)
13+ Data 实际数据

结论:ResourceId 设置为 0x28 (40),但系统仅允许 ResourceId ≤ 31。

根据《frudata问题定位手册》[id:1] 中的案例五

“写扩展域多次报错0xc9(Parameter out of range)”
原因:扩展域最长写入501字节,超过则报错0xc9

说明此类 0xc9 错误常见于参数超出预定义范围或长度限制


根本原因总结

:cross_mark: 根本原因

传入的 ResourceId = 0x28 (40) 超出了 BMC 系统对该字段的合法范围限制,导致 IPMI 命令在处理时返回 0xc9 - Parameter out of range

虽然命令本身是支持的(在 OEM 命令表中有定义),但具体实现中对 ResourceId 字段做了硬性范围检查,当前版本仅允许 ResourceId < 32(即最多支持 32 个资源槽位)。


解决方案建议

:white_check_mark: 方案一:修改 ResourceId 为合法范围内的值

尝试将 ResourceId 改为小于等于 31 的值,例如:

# 修改第5个参数为 0x1F (31)
ipmitool raw 0x30 0x93 0xdb 0x07 0x00 0x69 0x1F 0x00 0x00 0x00 0x00 0x01 0x5c 0x89 0x00

逐步测试可用范围(如 0x00 ~ 0x1F)。


:white_check_mark: 方案二:确认 ResourceId 的具体用途并映射

ResourceId 通常代表一个预定义的资源槽位(如升级包、配置文件、证书等)。
若必须使用编号 40 的资源,需确认:

  1. 当前系统是否支持动态注册 ResourceId;
  2. 是否需要先通过其他命令(如 Initialize Upload)分配资源句柄;
  3. 是否应使用保留 ID 或特定业务 ID。

可参考 PICMG 规范中 Upload Firmware Block (NetFn:2Ch, Cmd:32h) 的设计模式:先通过 Initial Upgrade Action 获取资源句柄,再上传数据。


:white_check_mark: 方案三:升级软件版本或补丁修复

由于 bmc_upgrade 组件未开源,无法直接查看逻辑。但根据日志路径:

bmc_upgrade_ipmi.lua(276): upload failed, invalid ResouceId [31]

说明该限制由 Lua 脚本代码显式判断造成,属于可配置性限制,非协议强制。

推荐措施:

  • 联系 bmc_upgrade 模块负责人或 Larry_Li(活跃于 openUBMC 社区)确认是否可在后续版本中放宽限制;
  • 查询当前 OpenUBMC 版本(如 25.09) 是否已知此限制;
  • 升级至更高版本(如 25.12 或以上),部分问题已在新版本中修复(如 Larry_Li 提到“问题在 25.12 已解决”)。

关于“主界面机型展示图片更新”需求的说明

用户提到:

此功能用于更新主界面机型展示等其他图片,所以也需要该命令的支持。

建议:

  1. 为“界面资源上传”分配固定的、低编号的 ResourceId(如 0x05);
  2. 在系统设计中预留 ResourceId 映射表,避免硬编码冲突;
  3. 如有批量上传需求,考虑使用 Redfish 接口 替代 IPMI Raw 命令,更安全灵活。

结论与建议

项目 内容
错误码 0xc9 - Parameter out of range
根本原因 传入的 ResourceId = 0x28 (40) 超出系统允许的最大值(可能是 31)
解决方案 将 ResourceId 修改为 ≤31 的有效值进行测试
长期建议 提交需求至 bmc_upgrade 团队,在后续版本中支持更大范围的 ResourceId 或提供动态资源管理机制
支持时间 若属已知限制,预计在 OpenUBMC 25.12 及以后版本 中可修复(参考 Larry_Li 反馈历史)

推荐下一步操作
使用 ResourceId=0x1F 重试命令,并捕获日志验证是否成功;同时提交功能增强请求,推动系统支持更多资源槽位。

相关链接:

  1. 【教学培训篇】新增IPMI命令
  2. 怎么获取ipmi命令的参数
  3. 9500-8iraid卡获取控制器信息的命令执行失败
  4. ipmi fru write命令疑问
  5. frudata问题定位手册 | 文档中心 | openUBMC

根据File Upload命令定义, 第8个字节为本帧数据长度,你给的命令里第8个字节为0x00,不对。

我是参照V2中白牌定制的脚本,生成的命令。本帧数据长度,应该是指带本帧中数据段的长度吧(也就是第十三个字节后的内容长度),同时这段,第7个字节指代Write Prepare,也没有第十三个字节,为0x00应该是正常的,执行完这个后,才去执行Write Data,这时候才有本帧数据长度。

当前ResouceId未支持28h,可以参与一下bmc_core SIG例会提相关诉求

已提bmc_core SIG组希望能支持27h,28h,29h三个

下附 鲲鹏服务器主板 BMC IPMI 接口参考链接
https://support.huawei.com/enterprise/zh/doc/EDOC1100372760/8e4436da#ZH-CN_TOPIC_0000001176440227_mMcCpPsS_table1955121635813

好的