bmc_upgrade
版本信息
| 项目 | 内容 |
|---|---|
| 组件版本 | 1.120.15 |
| 文档作者 | 孙先敏 |
| 最后更新 | 2026-08-11 |
1. 组件概述
1.1 组件简介
bmc_upgrade是BMC固件升级管理组件,负责BMC自身固件的具体升级执行。该组件响应firmware_mgmt发出的升级信号,执行实际的BMC固件升级操作,包括升级包解密、flash写入、分区切换等。
1.2 解决什么问题
bmc_upgrade组件主要解决BMC自身固件升级的具体执行问题,与firmware_mgmt协同工作:firmware_mgmt负责升级流程调度和协调,bmc_upgrade负责BMC固件升级的实际执行。主要解决以下问题:
- BMC固件升级三阶段的具体实现(prepare、process、finish)
- 升级包的解密和flash写入
- 启动分区切换和回滚操作
- BMC固件信息的管理和注册
- 版本号定制化支持
1.3 核心功能
- 固件升级
响应firmware_mgmt发出的UpgradePrepareSignal、UpgradeProcessSignal、UpgradeFinishSignal信号,执行BMC固件升级的三个阶段:
prepare阶段:
验证固件类型是否为BMC升级消息
解析升级配置文件(update.cfg)
解析扩展参数(RestoreFactorySettings、ActiveMode、Platform等)
回复PrepareReply给firmware_mgmt
process阶段:
解密升级包(AES CBC 128算法)
提取升级镜像文件
获取当前启动分区,计算目标写入分区
格式化目标分区并写入镜像
设置启动分区标志
回复ProcessReply给firmware_mgmt
finish阶段:
更新AvailableBMC固件信息到数据库
向firmware_mgmt注册生效动作(ActiveMode)
若需要恢复出厂设置,发送RestoreFactorySettings信号
回复FinishReply给firmware_mgmt
- 固件回滚
响应firmware_mgmt发出的RollbackSignal信号,执行BMC固件回滚:
查询ActiveBMC和AvailableBMC的固件信息
更新AvailableBMC的版本信息
获取当前启动分区,设置启动分区为另一个分区
调用GracefulReset复位BMC
- 固件信息管理
维护BMC固件信息表(BmcFwInfoTable),包括:
ActiveBMC:当前运行的BMC固件信息
AvailableBMC:可用分区的BMC固件信息
ActiveBMCSDK:当前运行的BMC SDK固件信息
向firmware_mgmt注册BMC固件信息
支持版本号定制化(根据Customer获取定制版本)
- 升级管理配置
管理BMC升级相关的配置:
降级控制(DowngradeAllowed)
撤销版本管理(RevokedVersions)
恢复出厂设置选项
1.4 关键术语表
| 术语 | 解释 |
|---|---|
| BMC固件升级 | 将新版本的BMC固件写入BMC的存储介质(eMMC Flash)的过程 |
| 固件回滚 | 将BMC固件从当前版本恢复到之前的版本,通过切换启动分区实现 |
| 分区切换 | BMC通常有rofs-a和rofs-b两个rootfs分区,升级时写入非当前启动的分区 |
| 版本定制化 | 根据客户信息(Customer)定制BMC版本号,支持多版本共存 |
1.5 外部交互边界图
BMC固件升级时序图
bmc_upgrade与firmware_mgmt的交互流程:
firmware_mgmt bmc_upgrade
| |
|------ UpgradePrepareSignal ----->|
| |--- prepare阶段处理
|<----- PrepareReply --------------|
| |
|------ UpgradeProcessSignal ----->|
| |--- process阶段处理
|<----- ProcessReply --------------|
| |
|------ UpgradeFinishSignal ------>|
| |--- finish阶段处理
|<----- FinishReply ---------------|
| |2. API 使用说明与示例
2.1 资源协作接口概览
2.1.1 bmc.kepler.UpdateService.ManagerVersion
path: /bmc/kepler/UpdateService/ManagerVersion
properties
| 属性名 | 数据类型 | 只读 | emitsChangedSignal | 描述 | 示例值 |
|---|---|---|---|---|---|
| MajorVersion | String | ✓ | false | BMC主版本号 | 5 |
| PlatformMajorVersion | String | ✓ | false | 平台主版本号,表征当前版本是iBMC300 | 5 |
| MinorVersion | String | ✓ | false | BMC次版本号 | 11 |
| Version | String | ✓ | false | BMC完整版本号 | 5.11.00.01 |
methods
| 方法名 | 权限 | 描述 | 请求参数 | 响应参数 |
|---|---|---|---|---|
| GetReleaseVersion | ReadOnly | 获取BMC各分区版本号 | 无 | ActiveReleaseVersion: String - 主分区的版本号BackupReleaseVersion: String - 备份分区的版本号AvailableReleaseVersion: String - 可用分区的版本号 |
2.1.2 bmc.kepler.UpdateService.UpdateMgmt
path: /bmc/kepler/UpdateService/UpdateMgmt
properties
| 属性名 | 数据类型 | 只读 | emitsChangedSignal | 描述 | 示例值 |
|---|---|---|---|---|---|
| DowngradeAllowed | Boolean | ✗ | - | 是否允许降级升级,CSR配置项 | false |
| RestoreFactorySettingsOption | U32 | ✗ | - | 恢复出厂设置选项 | 0 |
| RevokedVersions | String | ✓ | - | 撤销版本列表,用于防回退 | "" |
| RevokedVersionEnabled | Boolean | ✗ | - | 撤销版本使能开关 | false |
| ActiveImage | U8 | ✓ | - | 当前活跃镜像分区编号 | 0 |
| LastAction | U8 | ✓ | - | 最后一次升级动作 | 0 |
| LastUpgradeResult | S32 | ✓ | - | 最后一次升级结果,0成功,负数失败 | 0 |
| OnetimeUpdateEnabled | Boolean | ✗ | - | 一次性更新使能开关 | false |
| UpdateStage | U8 | ✓ | - | 更新阶段状态,CSR配置项 | 0 |
| LastUpgradeSuccess | Boolean | ✓ | - | 最后一次升级是否成功 | true |
| ExpectedActivePartition | U8 | ✓ | - | 预期活跃分区编号(持久化) | 0 |
| ExpectedBackupPartition | U8 | ✓ | - | 预期备份分区编号(持久化) | 0 |
methods
| 方法名 | 权限 | 描述 | 请求参数 | 响应参数 |
|---|---|---|---|---|
| AddRevokedVersions | SecurityMgmt | 添加撤销版本 | Versions: String - 撤销版本号 | 无 |
| RemoveRevokedVersions | SecurityMgmt | 移除撤销版本 | Versions: String - 撤销版本号 | 无 |
| ClearRevokedVersions | SecurityMgmt | 清空撤销版本列表 | 无 | 无 |
signals
| 信号名 | 描述 | 参数 |
|---|---|---|
| RestoreFactorySettings | 恢复出厂设置信号,升级后需要恢复出厂设置时发送 | PreserveList: 无 |
2.1.3 bmc.kepler.UpdateService.FirmwareInfo
path: /bmc/kepler/UpdateService/FirmwareInventory/:Id
bmc_upgrade组件负责维护和注册BMC相关的固件信息,包括:
| Id | 描述 |
|---|---|
| ActiveBMC | 当前运行的BMC固件信息 |
| AvailableBMC | 可用分区的BMC固件信息(升级后写入的分区) |
| ActiveBMCSDK | 当前运行的BMC SDK固件信息 |
properties
| 属性名 | 数据类型 | 只读 | emitsChangedSignal | 描述 | 示例值 |
|---|---|---|---|---|---|
| Id | String | ✓ | const | 固件标识 | ActiveBMC |
| Name | String | ✓ | const | 固件名称 | ActiveBMC |
| Version | String | ✗ | - | 固件版本号 | 5.11.00.01 |
| BuildNum | String | ✓ | false | 固件构建版本 | 001 |
| ReleaseDate | String | ✗ | - | 固件发布时间 | 14:14:47 Sep 14 2025 |
| LowestSupportedVersion | String | ✓ | false | 固件支持的最低版本,用于防回退 | 5.00.00.01 |
| SoftwareId | String | ✓ | - | 软件识别标签 | BMC-iBMC |
| Manufacturer | String | ✓ | - | 固件发布厂商名 | Huawei |
| Updateable | Boolean | ✓ | - | 固件是否支持更新 | true |
| Location | String | ✓ | - | 固件加载的位置 | "" |
| State | String | ✗ | - | 当前固件的使能状态,ActiveBMC为Enabled,AvailableBMC为StandbySpare | Enabled |
| Severity | String | ✗ | - | 固件或硬件的健康状态 | Informational |
| ActiveMode | String | ✗ | - | 生效方式 | Immediately |
| ActiveModeSupported | Boolean | ✓ | - | 是否支持延迟重启生效 | true |
| ActiveModeEnabled | Boolean | ✓ | - | 延迟重启生效是否使能 | false |
| Capability | U16 | ✓ | - | 固件支持的能力位图 | 5 |
此接口由bmc_upgrade组件通过调用firmware_mgmt的Add方法添加。
添加案例:
local ctx = require('mc.context').get_context_or_default()
local datas = {
Id = 'ActiveBMC',
Name = 'ActiveBMC',
Version = '5.11.00.01',
BuildNum = '001',
ReleaseDate = '14:14:47 Sep 14 2025',
LowestSupportedVersion = '5.00.00.01',
SoftwareId = 'BMC-iBMC',
Manufacturer = 'Huawei',
Location = '',
State = 'Enabled',
Severity = 'Informational',
ComponentID = '25',
SubComponentID = '4294967295',
TargetUIDs = '',
RelatedItem = '/redfish/v1/Managers/1'
}
obj:Add(ctx, datas, true, 5, 90)添加成功后,存在关键日志:register firmware [ActiveBMC] successfully。
2.2 GetReleaseVersion
功能说明
获取BMC各分区的版本号信息。
| 属性 | 内容 |
|---|---|
| 接口名 | bmc.kepler.UpdateService.ManagerVersion |
| 首发版本 | bmcsdk 25.03 |
| 废弃状态 | 正常可用 |
参数说明
无输入参数。
返回值与异常
| 返回值 | 含义 | 触发条件 | 处理建议 |
|---|---|---|---|
| ActiveReleaseVersion | 主分区版本号 | 正常执行完成 | 无 |
| BackupReleaseVersion | 备份分区版本号 | 正常执行完成 | 无 |
| AvailableReleaseVersion | 可用分区版本号 | 正常执行完成 | 无 |
应用场景
查询BMC各分区的固件版本号,用于升级前确认版本信息或升级后验证版本。
调试示例
命令行调试
busctl --user call bmc.kepler.bmc_upgrade /bmc/kepler/UpdateService/ManagerVersion bmc.kepler.UpdateService.ManagerVersion GetReleaseVersion
响应:sss "5.11.00.01" "5.11.00.01" "5.10.00.01"2.3 AddRevokedVersions
功能说明
添加撤销版本,用于防止固件回退到指定版本。
| 属性 | 内容 |
|---|---|
| 接口名 | bmc.kepler.UpdateService.UpdateMgmt |
| 首发版本 | bmcsdk 25.03 |
| 废弃状态 | 正常可用 |
参数说明
| 参数名 | 方向 | 类型 | 描述 | 取值范围 |
|---|---|---|---|---|
| Versions | 输入 | String | 撤销版本号 | 字符串 |
返回值与异常
无返回值。
应用场景
防止固件回退到已知存在安全漏洞的版本,配合RevokedVersionEnabled使用。
调试示例
命令行调试
busctl --user call bmc.kepler.bmc_upgrade /bmc/kepler/UpdateService/UpdateMgmt bmc.kepler.UpdateService.UpdateMgmt AddRevokedVersions s "5.00.00.01"3. 组件扩展案例
3.1 扩展能力概述
bmc_upgrade组件支持以下扩展能力:
- 版本号定制化:根据Customer信息获取定制版本号
- 恢复出厂设置:升级后可触发恢复出厂设置流程
3.2 版本号定制化
扩展点说明
BMC版本号支持定制化,根据客户信息(Customer)获取对应的定制版本号。
二次开发指导
步骤一
在Package对象中配置Customer属性,指定客户名称。
步骤二
在/opt/bmc/extend/<Customer>/目录下创建version.json文件,内容示例:
{
"Version": "5.11.00.01-Custom"
}验证方法
| 场景 | 预期 | 日志 |
|---|---|---|
| Customer有效且version.json存在 | 使用定制版本号 | customer version is ignored |
| Customer无效 | 使用原始版本号 | customer [%s] is invalid. customer version is ignored |
3.3 恢复出厂设置
扩展点说明
升级时可通过AdditionalOptions参数指定升级后恢复出厂设置。
使用方式
在升级参数中设置RestoreFactorySettings=true:
local para_tab = {
RestoreFactorySettings = "true"
}升级完成后,bmc_upgrade会发送RestoreFactorySettings信号给oms组件处理。
4 CSR配置介绍
4.1 UpdateMgmt对象配置介绍
此对象用于配置BMC升级管理相关参数。
| 属性名 | 数据类型 | 只读 | emitsChangedSignal | 描述 | 示例值 |
|---|---|---|---|---|---|
| DowngradeAllowed | Boolean | ✗ | - | 是否允许降级升级,true允许,false禁止 | false |
| UpdateStage | U8 | ✓ | - | 更新阶段状态 | 0 |
4.2 BmcFwInfoTable对象配置介绍
此对象用于持久化BMC固件信息,由bmc_upgrade组件内部维护。
| 属性名 | 数据类型 | 只读 | emitsChangedSignal | 描述 | 示例值 |
|---|---|---|---|---|---|
| Id | String | ✓ | - | 固件标识,主键 | ActiveBMC |
| Name | String | ✗ | - | 固件名称 | ActiveBMC |
| Version | String | ✗ | - | 固件版本号 | 5.11.00.01 |
| BuildNum | String | ✗ | - | 固件构建版本 | 001 |
| ReleaseDate | String | ✗ | - | 固件发布时间 | 14:14:47 Sep 14 2025 |
| LowestSupportedVersion | String | ✗ | - | 固件支持的最低版本 | 5.00.00.01 |
| SoftwareId | String | ✗ | - | 软件识别标签 | BMC-iBMC |
| Manufacturer | String | ✗ | - | 固件发布厂商名 | Huawei |
| Updateable | Boolean | ✗ | - | 固件是否支持更新 | true |
| Location | String | ✗ | - | 固件加载的位置 | "" |
| Capability | U16 | ✗ | - | 固件支持的能力位图 | 5 |
| State | String | ✗ | - | 当前固件的使能状态 | Enabled |
| ActiveMode | String | ✗ | - | 生效方式 | Immediately |
| ActiveModeSupported | Boolean | ✓ | - | 是否支持延迟重启生效 | true |
| ActiveModeEnabled | Boolean | ✓ | - | 延迟重启生效是否使能 | false |
| Severity | String | ✗ | - | 固件或硬件的健康状态 | Informational |
3. 组件扩展案例
3.1 扩展能力概述
提供客户定制验签、拆包解析方式。
3.2 扩展点说明
客户可以定制hpm解析的接口库(xxx.so),自行实现xxx.so中的内容。详见《固件验签、拆包解析定制要求及使用指导》。
3.3 二次开发指导
步骤一
定制固件验签、拆包解析需要配置CSR,需要在FirmwareCustomConfig对象中配置CustomVerifyEnabled、CustomVerifyLibraryName、CustomParseEnabled、CustomParseLibraryName属性。属性说明见下表:
| 属性名 | 属性类型 | 取值说明 |
|---|---|---|
| CustomVerifyEnabled | Boolean | 客户验签流程定制使能,true:使能;false:禁用,默认值为false |
| CustomVerifyLibraryName | String | 客户验签流程定制库名称,默认值为"hpm_parser" |
| CustomParseEnabled | Boolean | 客户拆包解析流程定制使能,true:使能;false:禁用,默认值为false |
| CustomParseLibraryName | String | 客户拆包解析流程定制库名称,默认值为"hpm_parser",字符串长度约束1~32 |
步骤二
- 验签定制:客户新增定制库
/opt/bmc/luaclib/xxx.so,并实现xxx.so库中的内容,提供方法parse_hpm_file供lua接口调用。 - 拆包解析定制:客户新增定制库
/opt/bmc/luaclib/xxx.so,并实现xxx.so库中的内容,提供方法custom_parse_pkg供lua接口调用。
示例代码
"FirmwareCustomConfig": {
"CustomVerifyEnabled": true, //客户签名定制使能
"CustomVerifyLibraryName": "sign_verify", //客户签名定制库为sign_verify.so
"CustomParseEnabled": true, //客户拆包解析定制使能
"CustomParseLibraryName": "hpm_parser" //客户拆包解析定制库为hpm_parser.so
}验证方法
固件验签
| 场景 | 预期 | 日志 |
|---|---|---|
| 客户定制包解析验证固件成功,需要继续BMC的验签+解析+升级 | 客户验签后,再次验签+解密升级包,最后升级成功 | the custom validate signature module is exist, load it custom verify signature successfully, code 1 |
| 客户定制包解析验证固件成功,需要继续BMC解析+升级 | 客户验签后,仅需解密升级包,最后升级成功 | the custom validate signature module is exist, load it custom verify signature successfully, code 2 |
| 客户定制包解析验证固件成功,需要继续升级 | 客户验签后,无需解密升级包,最后升级成功 | the custom validate signature module is exist, load it Custom Verify Code 3, skip decrypt file |
| 客户定制包解析验证固件失败(返回负数) | 客户验签后,退出升级流程,升级失败 | the custom validate signature module is exist, load it custom verify signature error, code ffffffffffffffff |
| 客户定制包解析验证流程异常(so库异常) | 验签+解密升级包,最后升级成功 | - |
日志说明
| 日志 | 说明 |
|---|---|
| the custom validate signature module is exist, load it | 客户定制的OS库导入正常 |
| the custom validate func is abnormal, can not skip verify. err:%s | 定制的方法内有异常 |
| custom verify signature error, code %x | 定制方法解析失败 |
| custom verify signature successfully, code %x | 定制方法解析成功 |
注意事项
- 确保在指定路径
/opt/bmc/luaclib下新增定制库;- 定制库
xxx.so库中需提供方法parse_hpm_file供lua接口调用,并且入参file_path为hpm包路径;响应返回约定的状态码标识。
拆包解析
| 场景 | 预期 | 日志 |
|---|---|---|
| CustomParseEnabled=true,自定义拆包解析库存在且功能正常 | 升级成功 | custom parse pkg successfully |
| CustomParseEnabled=true,自定义拆包解析库不存在 | 回退标准拆包流程,若包格式与标准格式相同,则升级成功,否则升级失败 | fallback to standard parse |
| CustomParseEnabled=true,自定义拆包解析库异常 | 升级失败 | custom parse pkg func is abnormal |
| CustomParseEnabled=true,自定义拆包解析失败,返回false | 升级失败 | custom parse pkg fail |
| CustomParseEnabled=true,自定义拆包解析后输出目录下缺少必带文件 | 升级失败 | required file not found after custom parse |
| CustomParseEnabled=true,自定义拆包解析后update.cfg格式错误 | 升级失败 | Get Basic Version failedUpdate file num is invalidparse update.cfg content failed |
日志说明
| 日志 | 说明 |
|---|---|
| custom parse pkg successfully | 拆包解析流程正常 |
| fallback to standard parse | 回退标准拆包流程 |
| custom parse pkg func is abnormal | 定制的方法内有异常 |
| custom parse pkg fail | 定制方法解析失败 |
| required file not found after custom parse | 定制方法解析出的数据不全 |
Get Basic Version failedUpdate file num is invalidparse update.cfg content failed | update.cfg格式解析失败 |
注意事项
- 确保在指定路径
/opt/bmc/luaclib下新增定制库;- 定制库
xxx.so库中需提供方法custom_parse_pkg供lua接口调用,并且入参file_path为hpm包路径,output_dir为拆包解析后数据存放目录;响应为true(解析成功)/false(解析失败),且在output_dir下存放必带文件。
4 CSR配置介绍
4.1 FirmwareComponentInfo对象配置介绍
此对象用于配置允许升级的固件,由ComponentID与ComponentIDEx确定唯一的固件,Name用于描述固件的名称
| 属性名 | 数据类型 | 只读 | emitsChangedSignal | 描述 | 示例值 |
|---|---|---|---|---|---|
| ComponentID | U8 | ✓ | false | 固件ID,用于区分固件,范围:0-255 | 25 |
| ComponentIDEx | U32 | ✓ | false | 固件扩展ID,用于细分固件,ComponentID和ComponentIDEx用于区分唯一固件,默认:4294967295 | 1 |
| Name | String | ✓ | false | 固件名称 | "BMC" |
| RevisionNumber | U8 | ✓ | false | 软件sr配置的Revision,用于防回退,0代表无防回退 | 0 |
| RevisionNumber4User | U8 | ✓ | false | 用户设置的Revision,非CSR配置值,用于防回退,0代表无防回退,默认:0 | 0 |
| FirmwareResumeSupported | Boolean | ✓ | false | 是否支持恢复升级,默认:true | true |
| ComponentInitTime | U16 | ✓ | false | 固件初始化时间,达到准备时间后触发升级,默认:0 | 0 |
| TimeoutThreshold | U16 | ✓ | false | 升级管理监控每个固件升级任务的最大超时时间,范围:0-240,默认:120 | 120 |
4.2 ActiveComponentInfo对象配置介绍
此对象用于配置允许生效的固件名称。
| 属性名 | 数据类型 | 只读 | emitsChangedSignal | 描述 | 示例值 |
|---|---|---|---|---|---|
| Name | String | ✓ | false | 允许生效的固件名 | "CPLD" |
| ComponentInitTime | U16 | ✓ | false | 待生效固件初始化时间,达到准备时间后触发生效,默认:0 | 0 |
4.3 MutuallyExclusiveFirmwares对象配置介绍
此对象用于配置禁止固件同时升级的互斥关系,Id的构成方式为ComponentID与ComponentIDEx的组合的U64类型转换成字符串,其中ComponentID占高四字节,举例:"0x0000000505000001"。
| 属性名 | 数据类型 | 只读 | emitsChangedSignal | 描述 | 示例值 |
|---|---|---|---|---|---|
| CurrentFirmwareId | String | ✓ | false | 正在升级的固件ID | 0x0000000500000001 |
| ExclusiveFirmwareIds | String[] | ✓ | false | 禁止升级的固件ID列表 | ["0x0000000500000002", "0x0000000500000003"] |
5. 日志说明
5.1 一键日志收集
| 文件路径 | 内容说明 |
|---|---|
| AppDump/bmc_upgrade/bmc_upgrade_info.txt | 记录BMC固件信息,包括ActiveBMC、AvailableBMC、ActiveBMCSDK的版本信息 |
5.2 关键日志信息
| 日志片段 | 日志级别 | 含义解读 | 建议处理动作 |
|---|---|---|---|
| prepare upgrade: system_id=%d, firmware_type=%s | INFO | 收到升级prepare信号 | 正常流程日志 |
| process upgrade failed, err(%s) | ERROR | 升级process阶段失败 | 检查升级包是否损坏、flash空间是否充足 |
| update AvailableBMC info failed, ret(%s) | ERROR | 更新AvailableBMC信息失败 | 检查数据库操作是否正常 |
| Register active action successfully | NOTICE | 成功向firmware_mgmt注册生效动作 | 正常流程日志 |
| BMC begin to rollback, version from %s to %s | NOTICE | 开始BMC回滚流程 | 正常流程日志 |
| Reboot BMC successfully | NOTICE | BMC重启成功 | 正常流程日志 |
| unzip failed, err(%s) | ERROR | 解压升级包失败 | 检查升级包格式是否正确 |
| secure_tar_unzip failed: -3003 | ERROR | 解压升级包失败,通常是包格式不匹配 | 检查升级包是否正确 |
| customer version is ignored | NOTICE | 忽略客户定制版本,使用原始版本 | 正常流程日志 |
| init_update_mgmt: DowngradeAllowed = %s | NOTICE | 初始化UpdateMgmt配置 | 确认降级配置是否正确 |
6. 问题定界指南
6.1 典型问题定界
| 现象描述 | 是否为本组件问题 | 判断依据 | 关键证据收集方法 |
|---|---|---|---|
| BMC升级失败,提示解压失败 | 是 | bmc_upgrade组件负责升级包解压 | 检查日志中的unzip/secure_tar_unzip错误信息 |
| BMC升级失败,提示写入flash失败 | 是 | bmc_upgrade组件负责flash写入 | 检查日志中的分区格式化、镜像写入错误信息 |
| BMC升级成功但版本号未更新 | 否 | 版本号显示由firmware_mgmt管理 | 检查firmware_mgmt日志 |
| BMC回滚失败 | 是 | bmc_upgrade组件负责回滚执行 | 检查日志中的rollback相关信息 |
| 升级后BMC无法启动 | 是 | 可能是镜像写入不完整或分区设置错误 | 检查升级日志、分区状态 |
| 不允许降级升级 | 否 | DowngradeAllowed由CSR配置或用户设置 | 执行busctl --user get-property bmc.kepler.bmc_upgrade /bmc/kepler/UpdateService/UpdateMgmt bmc.kepler.UpdateService.UpdateMgmt DowngradeAllowed命令查询 |
6.2 错误码速查表
| 错误码 | 含义 | 可能原因 | 排查建议 |
|---|---|---|---|
| E_FAILED (-1) | 升级失败 | 升级包解密、解压或写入失败 | 检查升级包完整性和flash空间 |
| -3003 | 解压失败 | 升级包格式不匹配或损坏 | 检查升级包是否为正确格式 |
6.3 调试方法
开启调试日志
可通过查看bmc_upgrade服务日志获取调试信息:
journalctl -u bmc_upgrade -f查询版本信息
# 查询ManagerVersion属性
busctl --user get-property bmc.kepler.bmc_upgrade /bmc/kepler/UpdateService/ManagerVersion bmc.kepler.UpdateService.ManagerVersion Version
# 查询各分区版本号
busctl --user call bmc.kepler.bmc_upgrade /bmc/kepler/UpdateService/ManagerVersion bmc.kepler.UpdateService.ManagerVersion GetReleaseVersion查询升级管理配置
# 查询是否允许降级
busctl --user get-property bmc.kepler.bmc_upgrade /bmc/kepler/UpdateService/UpdateMgmt bmc.kepler.UpdateService.UpdateMgmt DowngradeAllowed
# 查询撤销版本配置
busctl --user get-property bmc.kepler.bmc_upgrade /bmc/kepler/UpdateService/UpdateMgmt bmc.kepler.UpdateService.UpdateMgmt RevokedVersions7. 常见问题解答
7.1 BMC升级失败如何排查?
- 检查升级包格式是否正确
- 检查flash空间是否充足(需预留90MB以上tmp空间)
- 查看bmc_upgrade日志定位具体失败阶段
- 确认是否允许降级(DowngradeAllowed配置)
7.2 如何配置防回退?
通过CSR配置DowngradeAllowed=false禁止降级,或通过RevokedVersions配置撤销版本列表。
7.3 如何查看BMC各分区版本?
调用GetReleaseVersion方法或查询ManagerVersion属性。
更多问题请查阅《升级常见问题指南》。
附录
附录A 参考资料
附录B 修订记录
| 版本 | 日期 | 修订人 | 修订内容 |
|---|---|---|---|
| v1.0 | 2026-05-08 | mkdlf | 修改文档格式,补充API、日志说明、常见问题解答 |
| v1.1 | 2026-08-11 | mkdlf | 更正文档内容为bmc_upgrade组件实际功能 |