整包升级指导
更新时间: 2026/04/17
在Gitcode上查看源码1. 概述
针对产品整机固件升级场景,为解决固件包数量多,固件下载效率低,版本配套管理困难问题,BMC提供产品级固件整包升级能力,避免运维人员由于误操作导致版本不匹配问题,同时提升整机升级效率。
2. 压缩包格式
- 文件格式:
zip - 压缩包大小限制:
- 压缩前:≤ 110 MB
- 压缩后:≤ 150 MB
- 推荐压缩方式:
- windows:7zip
- linux:zip命令
3. 压缩包内容
压缩包内应包含以下内容:
| 类型 | 数量 | 说明 |
|---|---|---|
.hpm 文件 | ≥1 个,最多支持并行升级最大数量 | 固件升级包(HPM: Huawei Package Module) |
full_image_profile.json | ≤1 个 | 用于描述包内各模块信息,不包含该配置文件则默认并行升级所有hpm包 |
✅ 示例结构:
fullimage.zip
├── a.hpm
├── b.hpm
└── full_image_profile.json⚠️ 注意:
- 仅允许包含
.hpm和full_image_profile.json文件。- 禁止包含其他无关文件(如
.txt,.log,.tmp等)。- 禁止包含隐藏文件或目录。
4. 文件命名规范
| 项目 | 规则 |
|---|---|
| 压缩包文件名 | 不超过 128 字节 不包含非法字符(如:`< > : " / \) |
| .hpm 文件名 | 与 full_image_profile.json 中 FileName 字段一致 |
| 所有文件名 | 可由数字、大小写英文字母、空格、圆括号()、点号(.)、下划线(_)和连接号(-)组成 |
| full_image_profile.json | 遵循所有文件名规范 |
5. full_image_profile.json 格式说明
5.1 基本结构
json
{
"Packages": [
{
"Module": "CPLD_EXU",
"FileName": "a.hpm",
"Priority": 1
},
{
"Module": "BMC",
"FileName": "b.hpm",
"Priority": 2
}
]
}5.2 字段说明
| 字段名 | 类型 | 必填 | 说明 |
|---|---|---|---|
Module | string | 是 | 模块标识符,如 BMC, CPLD_EXU 等 |
FileName | string | 是 | 对应 .hpm 文件的文件名,必须与压缩包中一致 |
Priority | number | 否 | 优先级数值,范围:1 ~ 16 |
| 数值越小,优先级越高 | |||
未配置时默认为 16 |
✅ 优先级示例:
Priority: 1→ 最高优先级,最先升级Priority: 16→ 最低优先级,最后升级
⚠️ 注意事项:
- 所有
Priority必须为整数,非数字将导致解析失败。- 若多个模块优先级相同,则它们同时执行并行升级。
6. 并行升级数量限制
- 固件包中
.hpm文件数量应不超过系统支持的并行升级最大数量(可CSR配置,默认为20个)。 - 超出数量将导致升级失败。
- 建议:使用
Packages列表中Priority字段合理调度升级顺序。
7. 注意事项
- 使用Redfish进行整包升级时,由于涉及远程升级,为保证接口响应时间,需要提前创建最大并行升级个数的子任务。在获取到具体固件后,再将子任务与对应固件匹配,多余的子任务状态标记为"exception",多余子任务不影响主任务的升级状态及进度。
8. 接口使用说明
8.1. Redfish接口升级
- URL POST
text
https://<device_ip>/redfish/v1/UpdateService/Actions/Oem/{OemIdentifier}/UpdateService.FullImageUpdate- 请求头:
X-Auth-Token : auth_value
Content-Type : header_type- 请求消息体:
json
{
"ImageURI": image_uri,
"TransferProtocol": transfer_protocol,
"ForceUpdate": force_update
}| 参数 | 参数说明 | 取值 |
|---|---|---|
| device_ip | 登录设备的IP地址 | IPv4或IPv6地址 |
| auth_value | 请求消息的鉴权参数 | 可通过/redfish/v1/SessionService/Sessions创建会话时获得 |
| header_type | 请求消息的格式 | 支持的消息格式包括:application/json或者application/json;charset=utf-8 |
| transfer_protocol | BMC从远程服务器下载升级包时使用的协议 | 取值:HTTPS、SCP、SFTP、CIFS、NFS。本地升级不需要该字段 |
| image_uri | 升级包所在路径,文件为zip格式 | 升级包的URL(支持本地tmp目录升级 例如:“sftp://username:password@10.10.10.191/tmp/package.zip” 本地升级:“/tmp/cpldimage.zip” |
| force_update | 固件是否强制升级 | true:版本号一致的固件升级 false:版本号一致的固件不升级 可选参数,如果不加该参数。默认为版本号一致的固件升级 |
8.2 IPMI接口升级
8.2.1 触发固件整机升级
命令权限: BasicSetting
是否锁定之后可以访问: 是
命令样式:
- 请求:
ipmitool raw 0x30 <ManufacturerID> <SubCmd> <Length> <Filename> - 响应:
<ManufacturerID>
命令请求参数:
| 字节顺序 | 域取值说明 |
|---|---|
| NetFn | 30h |
| Cmd | 93h |
| 1:3 | Manufacturer ID,LB Byte first。长度固定 3 个字节,例如,某厂家ID时 2011,对应十六进制为0x0007DB,则字节序为第1个字节为 DBh,第二个字节为 07h,第三个字节为 00h。 |
| 4 | 94h |
| 5 | Operation type: AA initiate upgrade |
| 6 | Reserved,当前统一填0,为后续可能添加的参数做预留 |
| 7 | Reserved,当前统一填0,为后续可能添加的参数做预留 |
| 8 | Length:路径名长度,大小不超过128字节 |
| 9:N | Filename:绝对路径名 |
命令响应参数:
| 字节顺序 | 域取值说明 |
|---|---|
| 1 | Completion Code |
| 2:4 | Manufacturer ID,LB Byte first。长度固定 3 个字节,例如,某厂家ID时 2011,对应十六进制为0x0007DB,则字节序为第1个字节为 DBh,第二个字节为 07h,第三个字节为 00h。 |
命令示例:样例:开始升级整包/tmp/fullimage.zip
- 请求:
ipmitool raw 0x30 0x93 0xdb 0x07 0x00 0x94 0xaa 0x00 0x00 0x00 0x12 0x2F 0x74 0x6D 0x70 0x2F 0x66 0x75 0x6C 0x6C 0x69 0x6D 0x61 0x67 0x65 0x2E 0x7A 0x69 0x70 - 响应:
0xdb 0x07 0x00
8.2.2 查询整包升级进度
命令权限: ReadOnly
是否锁定之后可以访问: 是
命令样式:
- 请求:
ipmitool raw 0x30 <ManufacturerID> <SubCmd> - 响应:
<ManufacturerID> <SubCmd> <Length> <Data>
命令请求参数:
| 字节顺序 | 域取值说明 |
|---|---|
| NetFn | 30h |
| Cmd | 93h |
| 1:3 | Manufacturer ID,LB Byte first。长度固定 3 个字节,例如,某厂家ID时 2011,对应十六进制为0x0007DB,则字节序为第1个字节为 DBh,第二个字节为 07h,第三个字节为 00h。 |
| 4 | 95h |
| 5 | Reserved,当前统一填0,为后续可能添加的参数做预留 |
| 6 | Reserved,当前统一填0,为后续可能添加的参数做预留 |
命令响应参数:
| 字节顺序 | 域取值说明 |
|---|---|
| 1 | Completion Code |
| 2:4 | Manufacturer ID,LB Byte first。长度固定 3 个字节,例如,某厂家ID时 2011,对应十六进制为0x0007DB,则字节序为第1个字节为 DBh,第二个字节为 07h,第三个字节为 00h。 |
| 5 | Length,返回数据长度 |
| 6:N | 整包中各固件升级进度和状态,每两个字节描述一个固件,其中进度百分比使用低字节,升级状态码使用高字节的低4bit,高字节的高4bit预留,状态码定义如下: 0:正常 1:升级失败 2:未匹配到具体板卡而未升级 如:0x00 0x50固件升级进度为80%,当前状态码为0 0x01 0x00固件升级进度为0%,当前状态码为1 |
命令示例:样例1:查询整包升级进度及状态
- 请求:
ipmitool raw 0x30 0x93 0xdb 0x07 0x00 0x95 0x00 0x00 - 响应:
0xdb 0x07 0x00 0x0a 0x00 0x50 0x00 0x53 0x01 0x00 0x00 0x64 0x02 0x00 - 固件1、2升级到80%,固件3升级失败,固件4升级到100%,固件5未匹配到具体板卡而未升级
8.3 Web Rest接口升级
8.3.1 整包上传接口
uri:
text
/UI/Rest/BMCSettings/UpdateService/Actions/UpdateService.FullImageUnpack操作类型: POST
请求参数:
| 参数 | 参数说明 | 取值 |
|---|---|---|
| FilePath | 升级包所在路径 | string |
操作权限:BasicSetting
样例展示:
请求参数:
json
{
"FilePath": "/tmp/fullimage.zip",
}响应消息体举例:
json
{
"url":"/UI/Rest/Task/1"
}8.3.2 整包升级下发二次确认
uri:
text
/UI/Rest/BMCSettings/UpdateService/ParallelUpdate操作类型: POST
请求参数:
| 参数 | 参数说明 | 取值 |
|---|---|---|
| ImageType | 固件升级的类型 | “SingleImage” “FullImage” |
| FullImageNames | string数组,ImageType为FullImage时不允许为null | 整包升级各固件名称 |
8.3.3 获取并行升级各固件信息
uri:
text
/UI/Rest/BMCSettings/UpdateService/UpdateProgress操作类型: GET
响应参数:
| 参数 | 参数说明 | 取值 |
|---|---|---|
| UpgradeMode | 表明当前升级模式 | “Serial”:串行升级中 “Parallel”:并行升级中 “FullImageUnpacking”:整包解包中 |
| UpgradeTasks | 升级任务的进度信息对象 | 属性包括: TaskName:升级任务名 Component:升级固件描述 FileName:升级包名称 Percentage:升级进度 TaskState:升级状态 ErrorCode:升级任务错误码 EstimatedRemainingTime:固件预计升级的剩余时间 FirmwareId:固件ID |
8.4 相关资源协作接口
interface: bmc.kepler.UpdateService
path: /bmc/kepler/UpdateService
| 方法名称 | 请求签名 | 请求参数描述 | 响应签名 | 响应参数描述 | 方法描述 | 访问权限 |
|---|---|---|---|---|---|---|
| FullImageUnpack | s | 整包路径 | u | 任务id | 将整包进行解析、校验 | BasicSetting |