【求助】openUBMC使能用户通过带内升级bmc/bios固件的ipmitool raw命令是?

查阅及搜索ipmi相关资料,以下两条命令 :

ipmitool raw 0x30 0x90 0x20 0xdb 0x07 0x00 0x01

ipmitool raw 0x30 0x90 0x20 0xdb 0x07 0x00 0x00

查看它们的介绍:docs/docs/zh/development/specifications/ipmi/details/OEM-30h/Cmd-90h/20h-使能-禁止DFT命令接口(Set-DFT-Mode).md-代码预览-docs:基于 Node.js 的社区文档中心项目 - AtomGit ,貌似可以达到要求 ,但是实际执行并没有达到想要的效果。

执行命令截图:

image

日志见附件

J583G4_2102315RYU10S4100104_20260727-09501.rar.tar (7.7 MB)

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

总结

你的尝试 实际用途 正确方法
0x30 0x90 0x20 … Set DFT Mode(非升级) 使用 0x32 0x02/0x030x30 0x91 命令流程

推荐直接使用 openUBMC 社区已验证的 0x32 命令组合,对于 BIOS 升级只需调整命令中的参数即可。务必注意权限、时机与固件包签名要求。

如果仍有问题,欢迎提供具体的执行回显和日志,可以进一步定位。

点击此处查看详细分析解答

你好!根据你提供的上下文和相关社区讨论,我需要先澄清一点:你提到的两条命令 ipmitool raw 0x30 0x90 0x20 0xdb 0x07 0x00 0x010x00 对应的功能是 Set DFT Mode(使能/禁止 DFT 命令接口),属于诊断测试接口的开关,并非用于使能带内固件升级,因此自然达不到期望的升级效果。

下面为你整理 openUBMC 环境下,正确用于带内升级 BMC/BIOS 固件的 IPMI RAW 命令,信息均来自知识库中的社区经验与文档说明。


一、openUBMC 带内升级 BMC 固件的推荐命令

在 openUBMC 平台(如 25.03+ 版本)上,昆仑太科_王亚洲 在论坛(话题 #2446)中提供了已验证的通用的 IPMI RAW 升级流程,分为两步:

第一步:上传固件包(指定路径)

ipmitool raw 0x32 0x02 0x00 0x02 0x00 0x00 0x01 <文件路径的 ASCII 十六进制字节>

示例(假设固件包位于 /tmp/bmc_1711.hpm):

ipmitool raw 0x32 0x02 0x00 0x02 0x00 0x00 0x01 0x2f 0x74 0x6d 0x70 0x2f 0x62 0x6d 0x63 0x5f 0x31 0x37 0x31 0x31 0x2e 0x68 0x70 0x6d

其中最后的字节序列是路径字符串的 ASCII 编码(/tmp/bmc_1711.hpm)。

第二步:触发升级激活动作

文件上传完成后,执行:

ipmitool raw 0x32 0x03 0x00 0x02 0x00 0x00 0x01

该命令会启动 BMC 固件烧写与自动重启流程。


二、另一种常见标准命令(需厂商 ID)

在话题 #4678 的“带内升级标准流程”中也提到了另一组命令,适用于联想等厂商,且需要传入正确的厂商 ID(小端序 3 字节):

  • 开始升级
    ipmitool raw 0x30 0x91 <厂商ID 3字节> 0x07 0x00 0x06 0xAA
  • 设置自动重启
    ipmitool raw 0x30 0x91 <厂商ID 3字节> 0x07 0x00 0x06 0xCD

例如联想(厂商 ID = 0x0007DB,小端序为 DB 07 00):

ipmitool raw 0x30 0x91 0xDB 0x07 0x00 0x07 0x00 0x06 0xAA

但对于 openUBMC 社区版本,强烈建议优先使用第一部分提到的 0x32 0x02 / 0x32 0x03 命令,这是直接由社区验证可用的方法。


三、BIOS 固件的带内升级

同一回复中指出:“其他固件差不多,需要修改命令里的参数”。因此 BIOS 升级的命令框架与 BMC 类似,同样是使用 0x32 系列命令,但需要调整其中的 资源 ID(ResourceId) 或文件路径。具体参数可参考 OEM 文档或从社区获取。当前知识库中没有给出 BIOS 升级的完整 RAW 命令实例,但你可以先通过 BMC 升级命令掌握流程,再尝试修改对应 ResourceId 进行 BIOS 升级。


四、执行前的重要注意事项

  1. 权限要求
    带内执行上述 RAW 命令通常需要 AdministratorOperator 权限(IPMI 2.0 规范)。如果出现 Insufficient privilege 报错,请确保已经在对应的通道上为用户授予了足够权限(社区版本可能需要显式指定通道号)。

  2. 时机限制
    不能在系统 POST 阶段升级 BMC(话题 #4902 中明确提到“升级BMC时正处于POST阶段,不允许升级”),否则升级会失败。建议在 OS 完全启动后或系统处于空闲电源状态时操作。

  3. 工具版本
    社区推荐使用 ipmitool 1.8.18 及以上版本(话题 #2654),低版本可能因命令封装或安全策略导致部分功能不可用。

  4. 固件包要求

    • 社区包(community 包)需要设置 community_enable:true 并跳过签名校验;
    • 非社区包必须进行加密和签名,否则会出现 Upgrade write config file failed 等错误(搜索结果 #5)。
  5. 文件路径正确性
    确保固件包已上传到设备端,路径无误且存在于 /tmp 等可访问目录,并具备可读权限。

  6. 升级过程中不可中断
    BMC 升级期间禁止断电、断 SSH 或重启,否则可能导致 BMC 变砖。


五、如果命令仍无效

  • 检查 BMC 固件版本与安全策略:某些 RAW 命令被硬编码禁用,需联系厂家或升级到支持该命令的固件版本。
  • 参考 社区带内鉴权失败问题分析(搜索结果 #1):可能需要显式指定通道(如 -m 1 等参数)才能正确绑定权限。

总结

你的尝试 实际用途 正确方法
0x30 0x90 0x20 … Set DFT Mode(非升级) 使用 0x32 0x02/0x030x30 0x91 命令流程

推荐直接使用 openUBMC 社区已验证的 0x32 命令组合,对于 BIOS 升级只需调整命令中的参数即可。务必注意权限、时机与固件包签名要求。

如果仍有问题,欢迎提供具体的执行回显和日志,可以进一步定位。

命令解析 :

1Length

0x8E:二进制 1000 1110

bit[7:0 ]含义

bit71,升级完后自 动重启生效

bit6-bit0:绝对路径名长度,包含/tmp/

2

绝对路径名,转换 为ASCII

例如 /tmp/image.hpmBMC/tmp/目录)

ipmitool raw 0x30 0x91 0xdb 0x07 0x00 0x06 0xaa 0x00 0x00 0x00 0x8E 0x2f 0x74 0x6d 0x70 0x2f 0x69 0x6d 0x61 0x67 0x65 0x2e 0x68 0x70 0x6d

你可能误会了我的意思,我的目的是通过ipmi raw命令 ,可以随时开启或者关闭用户在带内升级bmc/bios固件的权限。即系执行了关闭用户带内升级权限命令后,用户在带内升级固件时会报失败,执行开启用户带内升级权限命令后,用户才可以在带内升级固件。

有没有这方面相关的ipmi raw命令。谢谢~

你好,我的目的是通过ipmi raw命令 ,可以随时开启或者关闭用户在带内升级bmc/bios固件的权限。即系执行了关闭用户带内升级权限命令后,用户在带内升级固件时会报失败,执行开启用户带内升级权限命令后,用户才可以在带内升级固件。

有没有这方面相关的ipmi raw命令。谢谢~

当前问题是要设置BT通道的权限,当前有redfish接口可以设置,只能设置整个通道的权限,请参考:

uri:/redfish/v1/Managers/:managerid/SecurityService
property:IPMIChannelAccess