firmware_mgmt

版本信息

项目内容
组件版本1.120.15
文档作者mkdlf
最后更新2026-05-08

1. 组件概述

1.1 组件简介

固件管理为BMC基本功能特性,客户使用场景中主要涉及固件升级、固件生效、固件信息查询、固件回滚等。

1.2 解决什么问题

firmware_mgmt组件主要解决固件升级流程的统一调度与协同问题、智能管理多固件升级的并发与冲突问题、升级过程的安全与信任问题、固件信息与状态的集中化管理问题、升级过程中的资源与异常管理问题以及装备定制化配置的注入问题。

1.3 核心功能

  • 固件升级

固件升级是客户使用过程中常见场景,如对BMC、BIOS、CPLD等固件进行升级。此功能使用频率较高。当前固件管理提供了串行升级和并行升级两种升级方式,功能上包括本地升级和远程升级。

本地升级:固件升级包已存在于BMC本地文件系统(位于 /tmp 目录下),升级时直接从本地路径读取固件包进行升级。

远程升级:固件升级包存储在远程服务器上,BMC通过网络协议(如FTP、TFTP、HTTP、NFS、SCP等)下载固件包到本地后再进行升级。适用于固件包存储在远程服务器,需要通过网络传输获取的场景。

  • 固件生效

当前固件生效存在两种生效方式,一种是被动生效,一种是主动生效。 被动生效为固件管理模块检测到生效条件满足后自动触发生效任务,主动生效为客户通过BMC界面进行生效操作。 当前较危险的生效动作,如BMC升级后重启或者CPLD生效后进行掉电处理,此类操作可能会影响固件之间的生效,导致异常情况,因此由固件管理统一管理。

  • 固件信息查询

当客户需要查询当前系统的固件信息时,如各固件的名称、类型、版本、发布时间等基本信息,此特性可以提供对所有固件信息进行统一管理,方便查询。

  • 镜像回滚

当客户需要回滚到之前的固件版本时,此特性可以提供回滚操作,如BMC主备分区倒换功能。

1.4 关键术语表

术语解释
固件升级固件升级是指将新版本的固件文件写入目标硬件设备的存储介质(如Flash、EEPROM)的过程
固件生效固件生效是使已写入存储的新固件实际运行的过程,通常需特定动作(如复位、下电)来切换硬件运行状态
验签验签(Signature Verification)是指使用公钥对数字签名进行解密和计算,以验证数据完整性和签名者身份的过程。其核心目的是确认数据在传输或存储过程中未被篡改,且确实来自声称的发送方
并行升级并行升级是一种通过同时执行多个升级任务,以显著缩短总体升级时间、提升效率的系统升级策略

1.5 外部交互边界图

固件升级功能时序图

并行升级功能时序图

白牌包升级时序图

2. API 使用说明与示例

2.1 资源协作接口概览

2.1.1 bmc.kepler.UpdateService

path:/bmc/kepler/UpdateService

properties

属性名数据类型只读emitsChangedSignal描述示例值
UpgradeKeyDomainIdU32false固件升级解包使用的密钥的domain id4
UpgradingFlagBoolean-标识当前是否存在升级任务false
ParallelSupportedBoolean-标识当前版本是否支持并行升级true
UpgradeModeStringfalse标识当前升级模式(Serial/Parallel)Serial
TimeoutPolicyU8false升级管理对于升级超时之后的处理策略,0:无动作;1:复位BMC,默认00
ManufacturerValidateEnabledBooleanfalse是否支持升级时进行厂商校验false

methods

方法名权限描述请求参数响应参数
StartUpgradeBasicSetting启动固件升级接口FilePath: String - 升级包路径
AdditionalOptions: Dictionary - 固件升级可选参数,用于各种升级扩展场景
TaskId: U32 - 升级任务ID
ParallelUpdateBasicSetting启动固件并行升级接口UpgradeOptions: Dictionary - 固件并行升级可选参数,对所有Package都生效
Packages: Array - 固件并行升级请求列表,每个元素描述一个升级子任务
TaskId: U32 - 并行升级主任务ID
SubTaskIds: U32[] - 并行升级子升级任务ID列表
PrepareReplyBasicSetting回复prepare动作结果SystemId: S32 - 系统ID
FirmwareType: String - 固件的类型信息,由固件管理统一分配管理
VersionStr: String - 版本字符串
PrepareResult: S32 - 准备结果
AdditionalOptions: Dictionary - 固件升级扩展可选参数字典,用于并行升级等扩展场景
ProcessReplyBasicSetting回复process动作结果SystemId: S32 - 系统ID
FirmwareType: String - 固件的类型信息,由固件管理统一分配管理
ProcessResult: S32 - 处理结果
AdditionalOptions: Dictionary - 固件升级扩展可选参数字典,用于并行升级等扩展场景
FinishReplyBasicSetting回复finish动作结果SystemId: S32 - 系统ID
FirmwareType: String - 固件的类型信息,由固件管理统一分配管理
FinishResult: S32 - 完成结果
AdditionalOptions: Dictionary - 固件升级扩展可选参数字典,用于并行升级等扩展场景
UpdateUpgradeStatusBasicSetting固件子模块上报升级状态SystemId: S32 - 系统ID
FirmwareType: String - 固件的类型信息,由固件管理统一分配管理
ResultCode: S32 - int32结果码,取值:0-OK,-1代表失败
Progress: S32 - 升级进度,为0到100的值
ResultDetail: String - 结果详细表述,对结果码进行更详细的解释,最大长度512
AdditionalOptions: Dictionary - 固件升级扩展可选参数字典,用于并行升级等扩展场景
GetUpgradeStatusBasicSetting获取升级状态TaskId: U32 - 任务标识FirmwareType: String - 固件的类型信息,由固件管理统一分配管理
ResultCode: S32 - 成功为0,失败为-1
Progress: S32 - 进度0-100
ResultDetail: String - 结果详细表述,对结果码进行更详细的解释
GetUpdateProgressReadOnly获取所有升级任务的进度信息UpgradeMode: String - 当前升级模式
UpgradeTasks: Array - 升级任务的进度信息
GetPendingFirmwareListReadOnly获取所有待生效固件信息PendingFirmwareList: Array - 待生效固件信息
RollbackBasicSetting回滚特定固件SystemId: S32 - 系统ID
Id: String - 固件名称,同类型固件名称相同
ExportBasicSetting导出特定固件SystemId: S32 - 系统ID
Id: String - 固件名称,同类型固件名称相同
CheckFirmwareTypeBasicSetting校验升级包的固件类型是否符合预期FilePath: String - 升级包的路径
FirmwareType: String - 升级包的预期固件类型
IsMatch: Boolean - 升级包与预期固件类型是否匹配
ParseFirmwarePackageBasicSetting完成FilePath下的hpm包的完整性校验以及CMS验签FilePath: String - 需要解压的hpm包的路径FirmwareType: String - 解压后的固件包的type
FirmwareDirectory: String - 解压后的固件升级文件的位置
ActiveStagedFirmwaresBasicSetting用于暂存生效FirmwareIds: String[] - 待暂存生效固件ID列表TaskId: U32 - 暂存生效的主任务ID
SubTaskIds: U32[] - 暂存生效的子升级任务ID列表
DiscardStagedFirmwaresBasicSetting弃用待暂存生效固件FirmwareIds: String[] - 待弃用的暂存生效固件ID列表TaskId: U32 - 弃用暂存生效的主任务ID
SubTaskIds: U32[] - 弃用暂存生效的子升级任务ID列表
  • ParallelUpgradePackages详细说明
字段类型描述
FilePathString升级包路径
AdditionalOptionsDictionary固件升级可选参数,用于升级需要的参数扩展
  • UpdateProgress详细说明
Key描述
TaskName升级任务名
Firmware升级固件描述
FirmwareInstance升级固件实例
FileName升级包名称
Percentage升级进度
TaskState升级状态
ErrorCode升级任务错误码
EstimatedRemainingTime固件预计升级的剩余时间
CurrentVersion升级固件当前版本号
TargetVersion升级固件目标版本号
ActivateMode固件生效方式,取值有:NoAction:自动生效、ResetBMC:复位BMC生效、PowerOff:下电生效
  • PendingFirmware详细说明
字段类型描述
SystemIdU8系统ID
FirmwareString待生效固件描述
FirmwareInstanceString待生效固件实例
ActiveStatusString生效状态,当前可有的取值有:'ToBeActivated', 'Activating', 'Activated'
ActiveActionString生效动作

signals

信号名描述参数
UpgradePrepareSignal升级准备信号SystemId: S32 - 系统ID
FirmwareType: String - 固件的类型信息,由固件管理统一分配管理
CfgPath: String - 固件包解析后的配置文件包路径信息
FilePath: String - 固件包的路径信息,用于BIOS/CPLD固件做flash转储场景使用
AdditionalOptions: Dictionary - 固件升级扩展可选参数字典,用于各种子固件扩展场景
UpgradeProcessSignal升级处理信号SystemId: S32 - 系统ID
FirmwareType: String - 固件的类型信息,由固件管理统一分配管理
FileName: String - 固件包的名称
AdditionalOptions: Dictionary - 固件升级扩展可选参数字典,用于并行升级等扩展场景
UpgradeFinishSignal升级完成信号SystemId: S32 - 系统ID
FirmwareType: String - 固件的类型信息,由固件管理统一分配管理
AdditionalOptions: Dictionary - 固件升级扩展可选参数字典,用于并行升级等扩展场景
RollbackSignal回滚信号SystemId: S32 - 系统ID
Id: String - 固件名称,同类型固件名称相同
ExportSignal导出信号SystemId: S32 - 系统ID
Id: String - 固件名称,同类型固件名称相同

2.1.2 bmc.kepler.UpdateService.FirmwareActive

path:/bmc/kepler/UpdateService/FirmwareActive

methods

方法名权限描述请求参数响应参数
StartActiveBasicSetting启动固件生效SystemId: S32 - 系统IDTaskId: U32 - 生效任务标识
StartActiveWithPolicyBasicSetting根据策略启动固件生效SystemId: S32 - 系统ID
AdditionalOptions: Dictionary - 固件生效可选参数字典,用于传递生效策略
TaskId: U32 - 生效任务标识
RegisterActiveActionBasicSetting注册生效动作ActiveAction: Array[KeyValueTable] - 各固件调用此方法向 firmware_mgmt 注册生效条件、生效动作
UpdateActiveStatusBasicSetting更新生效状态ActiveStatus: Array[KeyValueTable] - 各固件调用此方法向 firmware_mgmt 更新生效状态
ActiveProcessReplyBasicSetting回复生效处理结果SystemId: S32 - 系统ID
FirmwareType: String - 固件的类型信息,由固件管理统一分配管理
ProcessResult: S32 - 处理结果

signals

信号名描述参数
ActiveProcessSignal生效处理信号SystemId: S32 - 系统ID
FirmwareType: String - 固件的类型信息,由固件管理统一分配管理

2.1.3 bmc.kepler.UpdateService.FirmwareActiveInfo

path:/bmc/kepler/UpdateService/FirmwareActive/:Id

properties

属性名数据类型只读emitsChangedSignal描述示例值
FirmwareIdString-SystemId+固件类型-
FirmwareTypeString-固件类型-
ActiveConditionString-生效条件-
ActiveModeString-生效模式-
ActiveStatusString-生效状态-
SystemIdString-系统host id-

此接口内容通常是通过bmc.kepler.UpdateService.FirmwareActive下RegisterActiveAction方法添加。

添加案例:

lua
local param = {}
param[#param+1] = {Key = 'FirmwareId', Value = 'CPLD'}
param[#param+1] = {Key = 'FirmwareType', Value = 'CPLD'}
param[#param+1] = {Key = 'ActiveCondition', Value = active_condition}
param[#param+1] = {Key = 'ActiveMode', Value = active_mode}
param[#param+1] = {Key = 'ActiveStatus', Value = active_status}
client:FirmwareActiveFirmwareActiveRegisterActiveAction(context.new(), param)

添加成功后,firmware_mgmt 存在关键日志:register: FirmwareId = xxx ......

2.1.4 bmc.kepler.UpdateService.FirmwareInventory

path:/bmc/kepler/UpdateService/FirmwareInventory

methods

方法名权限描述请求参数响应参数
AddBasicSetting添加固件列表FirmwareInfoTable: Dictionary - 固件基本信息
Updateable: Boolean - 固件是否支持更新
Capability: U16 - 固件支持的能力,每个bit标识一种能力,1 支持,0 不支持:固件信息查询、固件升级生效、固件回滚、固件导出、升级生效分离
MaxPackageSizeMiB: S32 - 此固件升级所需tmp目录最小空间,单位
DeleteBasicSetting删除固件Id: String - 固件名称,同类型固件名称相同
GetAllFirmwareInfoReadOnly获取所有固件信息FirmwareInfoList: Array[FirmwareInfoItem]
GetFirmwareListReadOnly根据筛选条件获取指定固件信息Options: Dictionary - 固件筛选条件FirmwareInfoList: Array[FirmwareInfoItem]
  • FirmwareInfoItem详细说明
字段类型描述
FirmwareIdString固件标识
FirmwareInfoDictionary固件信息

2.1.5 bmc.kepler.UpdateService.FirmwareInfo

path:/bmc/kepler/UpdateService/FirmwareInventory/:Id

properties

属性名数据类型只读emitsChangedSignal描述示例值
IdStringconst固件名称,同类型固件名称相同ActiveBMC
NameStringconst相同固件名称的固件可能有多个,在Description中区分ActiveBMC
VersionString-固件版本号5.11.00.01
BuildNumStringfalse固件构建版本001
ReleaseDateString-固件发布时间14:14:47 Sep 14 2025
LowestSupportedVersionStringfalse固件支持的最低版本,可用于防回退5.00.00.01
SoftwareIdString-软件识别标签BMC-openUBMC
ManufacturerString-固件发布厂商名Manufacturer
UpdateableBoolean-固件是否支持更新true
LocationString-固件加载的位置-
RollbackStatusStringfalse回滚状态Idle
ActiveModeString-生效方式Immediately
ParametersDictionary-升级任务的附加参数0
StateString-当前固件的使能状态Enabled
SeverityString-固件或硬件的健康状态Informational
MaxPackageSizeMiBS32-固件升级所需tmp目录最小空间,单位(MB)90
EstimatedDurationU32false固件预计升级的总时间,单位:秒90
FirmwareTypeString-固件类型Disk
StageSupportedBooleanfalse固件是否支持暂存升级false
RelatedItemString[]false固件应用的设备[]

此接口通常是通过 bmc.kepler.UpdateService.FirmwareInventory 下 Add 方法添加。

添加案例:

lua
local FWINVENTORY_PATH = '/bmc/kepler/UpdateService/FirmwareInventory/'
local FIRMWARE_INFO_INTERFACE = 'bmc.kepler.UpdateService.FirmwareInfo'

...

local obj = mdb.get_object(bus, FWINVENTORY_PATH, FIRMWARE_INFO_INTERFACE)
local param = {
    Id = id,
    Name = name,
    Version = version,
    BuildNum = build_num or '',
    ReleaseDate = release_date or '',
    LowestSupportedVersion = lowest_supported_version or '',
    SoftwareId = software_id or '',
    Manufacturer = manufacturer or '',
    Location = location or '',
    State = state or 'Enabled',
    Severity = severity or 'Informational'
}
obj:Add(context.new(), param, true, 1, 90)
...

添加成功后,firmware_mgmt 存在关键日志:Add firmware inventory successfully, Id:xxx, ......

如果添加失败,常见原因:

  • 固件名称重复,添加失败,关键日志:Already exist the same Id:[xxx] to path xxx

  • 固件信息参数不正确,方法调用失败。Add方法的FirmwareInfoTable签名为a{ss},因此通过FirmwareInfoTable传参给 firmware_mgmt 需要保证内容为字符串(firmware_mgmt 会将字符串转换为资源协作接口定义的类型)

2.2 StartUpgrade

功能说明

启动固件升级。

属性内容
接口名bmc.kepler.UpdateService
首发版本bmcsdk 25.03
废弃状态正常可用

参数说明

参数名方向类型描述取值范围
FilePath输入String升级包路径String
AdditionalOptions输入Dictionarykey:String,value:String
TaskId输出U32升级任务IDU32

AdditionalOptions键值对举例

值范围说明
ForceUpdate“true”:版本号一致的固件升级
“false”:版本号一致的固件不升级
固件是否强制升级
Stage“true”:暂存
“false”:不暂存
固件是否暂存
RestoreFactorySettings“true”(升级完成之后恢复出厂设置)
“false”(升级完成后不恢复出厂设置)
是否恢复出厂设置

返回值与异常

返回值含义触发条件处理建议
U32升级成功正常执行完成

应用场景

启动固件升级。

调试示例

命令行调试
text
busctl --user call bmc.kepler.firmware_mgmt /bmc/kepler/UpdateService bmc.kepler.UpdateService StartUpgrade a{ss}is 3 Interface Busctl UserName Administrator ClientAddr <ip> 1 /tmp/openUBMC.hpm

响应:u 3

2.3 ParallelUpdate

功能说明

启动固件并行升级。

属性内容
接口名bmc.kepler.UpdateService
首发版本bmcsdk 25.06
废弃状态正常可用

参数说明

参数名方向类型描述取值范围
UpgradeOptions输入Dictionary固件并行升级可选参数,对所有Package都生效key:String,value:String
Packages输入Array固件并行升级请求列表,每个元素描述一个升级子任务FilePath:String,升级包路径
AdditionalOptions:Dictionary,件升级可选参数,用于升级需要的参数扩展

UpgradeOptions键值对举例

值范围说明
ForceUpdate“true”:版本号一致的固件升级
“false”:版本号一致的固件不升级
固件是否强制升级
UpdateMode“FullImage”或“OptionalFullImage”升级模式
FullImagePathStringFullImage模式的升级路径
RestoreFactorySettings“true”(升级完成之后恢复出厂设置)
“false”(升级完成后不恢复出厂设置)
是否恢复出厂设置

AdditionalOptions键值对举例

值范围说明
ForceUpdate“true”:版本号一致的固件升级
“false”:版本号一致的固件不升级
固件是否强制升级

返回值与异常

返回值含义触发条件处理建议
抛错FirmwareUpgradeError入参校验失败UpgradeOptions或Packages不是表检查入参UpgradeOptions和Packages格式
抛错ActionNotSupported当前版本不支持并行升级当前版本不支持并行升级更换支持并行升级的版本
抛错ConcurrentReachedLimit当前并行的任务数超过了允许的上限值当前并行的任务数超过了允许的上限值停掉不必要的任务

应用场景

启动固件并行升级。

调试示例

命令行调试

注意: 不建议通过busctl命令直接进行并行升级,推荐使用redfish接口:/redfish/v1/UpdateService/Actions/Oem/{{OemIdentifier}}/UpdateService.ParallelUpdate

3. 组件扩展案例

3.1 扩展能力概述

提供客户定制验签方式。

3.2 扩展点说明

客户可以定制hpm解析的接口库(xxx.so),自行实现xxx.so中的内容。详见《固件验签定制要求及使用指导》

3.3 二次开发指导

步骤一

FirmwareCustomConfig对象中配置CustomVerifyEnabled和CustomVerifyLibraryName属性,分别表示客户验签流程定制使能和客户验签流程定制库名称。

步骤二

客户新增定制库/opt/bmc/luaclib/xxx.so,并实现xxx.so库中的内容,提供方法parse_hpm_file供lua接口调用。

示例代码

json
"FirmwareCustomConfig": {
    "CustomVerifyEnabled": true, //客户签名定制使能
    "CustomVerifyLibraryName": "sign_verify" //客户签名定制库为sign_verify.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定制方法解析成功

注意事项

  1. 确保在指定路径/opt/bmc/luaclib下新增定制库;
  2. 定制库xxx.so库中需提供方法parse_hpm_file供lua接口调用,并且入参file_path为hpm包路径;响应返回约定的状态码标识。

4 CSR配置介绍

4.1 FirmwareComponentInfo对象配置介绍

此对象用于配置允许升级的固件,由ComponentID与ComponentIDEx确定唯一的固件,Name用于描述固件的名称

属性名数据类型只读emitsChangedSignal描述示例值
ComponentIDU8false固件ID,用于区分固件, 范围:0-25525
ComponentIDExU32false固件扩展ID,用于细分固件,ComponentID和ComponentIDEx用于区分唯一固件,默认:42949672951
NameStringfalse固件名称"BMC"
RevisionNumberU8false软件sr配置的Revision,用于防回退,0代表无防回退0
RevisionNumber4UserU8false用户设置的Revision,非CSR配置值,用于防回退,0代表无防回退,默认:00
FirmwareResumeSupportedBooleanfalse是否支持恢复升级,默认:truetrue
ComponentInitTimeU16false固件初始化时间,达到准备时间后触发升级,默认:00
TimeoutThresholdU16false升级管理监控每个固件升级任务的最大超时时间,范围:0-240,默认:120120

4.2 ActiveComponentInfo对象配置介绍

此对象用于配置允许生效的固件名称。

属性名数据类型只读emitsChangedSignal描述示例值
NameStringfalse允许生效的固件名"CPLD"
ComponentInitTimeU16false待生效固件初始化时间,达到准备时间后触发生效,默认:00

4.3 MutuallyExclusiveFirmwares对象配置介绍

此对象用于配置禁止固件同时升级的互斥关系,Id的构成方式为ComponentID与ComponentIDEx的组合的U64类型转换成字符串,其中ComponentID占高四字节,举例:"0x0000000505000001"。

属性名数据类型只读emitsChangedSignal描述示例值
CurrentFirmwareIdStringfalse正在升级的固件ID0x0000000500000001
ExclusiveFirmwareIdsString[]false禁止升级的固件ID列表["0x0000000500000002", "0x0000000500000003"]

5. 日志说明

5.1 一键日志收集

文件路径内容说明
AppDump/firmware_mgmt/firmware_mgmt_info.txt记录FirmwareInventory信息,包括Id、名称、版本好、构建次数、发布日期、最低支持版本、软件Id、厂商、是否可更新、位置

5.2 关键日志信息

日志片段日志级别含义解读建议处理动作
verify signature error, code xxxxxxxxxERROR常见验签失败code及原因根据错误码定位失败原因
rsa_decrypt failedERROR环境上为原始hpm包,但是升级的包为签名+不加密的hpm包(出包有误),因此升级包解密失败(manifest仓库的.bmcgo/config若存在配置[hpm_encrypt]且enable=false,或者不存在[hpm_encrypt]配置,则表示该包为不加密包)重新出包
add pss root certificate failed, code ffffffffERROR常见原因:社区的hpm包为不签名不加密方案,当环境上为社区包时,直接升级原始包会上报添加根证书失败如果环境上是社区包,在升级回原始包前需要先升过渡包
secure_tar_unzip failed: -3003ERROR一般是环境上为社区hpm包,但是升级的包已加密,即[hpm_encrypt]下enable=true重新出包

6. 问题定界指南

6.1 典型问题定界

现象描述是否为本组件问题判断依据关键证据收集方法
升级包版本太低/过旧的升级包失败,环境上允许降级升级属性DowngradeAllowed被置成了false人为修改了环境配置执行busctl --user get-property bmc.kepler.bmc_upgrade /bmc/kepler/UpdateService/UpdateMgmt bmc.kepler.UpdateService.UpdateMgmt DowngradeAllowed命令, DowngradeAllowed查询出的值为false
升级报错:无效升级包,打印日志:FirmwareType is nil, invalid package config没有在vpd仓定义需要升级的固件类型,自发现没分发此固件的对象给firmware_mgmt,导致firmware_mgmt无法识别此固件查看vpd仓中对应的机型的platform.sr中是否定义了要升级的固件类型,没有的话要新增

6.2 错误码速查表

错误码含义可能原因排查建议
88200004证书发布者不存在升级包签名与根证书不对应换用正确的根证书重新签名升级包

6.3 调试方法

开启调试日志

busctl资源协作接口方法调试见文档第二章节。

更多命令请查阅《升级你的BMC》《整包升级指导》

7. 常见问题解答

常见问题解答请查阅《MCU、VRD、CSR、CPLD升级与板卡管理问题指南》《升级常见问题指南》

附录

附录A 参考资料

附录B 修订记录

版本日期修订人修订内容
v1.02026-05-08mkdlf修改文档格式,补充API、日志说明、常见问题解答