General Hardware 通用硬件管理服务
版本信息
| 项目 | 内容 |
|---|---|
| 组件版本 | 1.100.79 |
| 馔发版本 | openUBMC 1.0.0 |
| 文档作者 | openUBMC |
| 最后更新 | 2026-05-30 |
1. 组件概述
1.1 组件简介
General Hardware(通用硬件管理服务)是 openUBMC 系统中的硬件组件管理模块,负责管理天池板卡、固件升级、DPU/GPU/NPU设备、VRD电源、安全模块等通用硬件资源。支持通过 I2C、SMC、SMBUS 等多种通信协议实现硬件管理,同时支持制造测试接口为生产环境提供硬件验证功能。
1.2 解决什么问题
General Hardware 组件为用户提供了完整的硬件管理能力,包括天池板卡属性监控与版本管理、MCU/CPLD/FPGA/VRD/Retimer 固件升级、DPU智能网卡管理、GPU/NPU 设备监控、VRD电源信息采集、安全模块(TPM)状态管理等功能。通过 General Hardware 组件,用户可以在不依赖主机操作系统的情况下完成硬件资源的全生命周期管理。
1.3 核心功能
- 天池板卡管理:管理符合天池规范的各类板卡(ExpBoard、CpuBoard、NpuBoard、HddBackplane、FanBoard等),提供版本信息、健康状态、升级状态监控
- 固件升级管理:支持 MCU、VRD、CPLD、FPGA、Retimer、CSR(硬件自描述信息)等固件升级,支持并行升级、延迟生效
- DPU卡管理:专门管理 DPU 智能网卡的硬件属性,支持启动选项、上下电、复位、日志收集、串口切换、安全启动等功能
- GPU管理:提供 GPU 设备的完整管理能力,通过 SMBPBI 协议获取温度、功率、型号等信息
- NPU管理:提供 NPU (神经网络处理单元) 设备的管理能力,支持功耗封顶、日志收集、复位
- VRD管理:管理电压调节器设备,提供电压、电流、温度、功率等电源信息的实时监控
- 安全模块管理:管理 TPM 等可信计算模块,支持在位检测、健康状态、固件版本查询
- 制造测试接口:为生产环境提供硬件验证功能,支持眼图测试、JTAG链路测试、电压测试、板卡在位测试等
1.4 关键术语表
| 术语 | 解释 |
|---|---|
| 天池板卡 | 符合华为天池规范的标准化板卡,包括 BCU(CPU基础板)、EXU(扩展板)、ACU(NPU板)、IEU(转接卡)等 |
| MCU | Micro Controller Unit,板卡上的微控制器,负责板卡本地管理 |
| CPLD | Complex Programmable Logic Device,复杂可编程逻辑器件,负责板卡逻辑控制 |
| FPGA | Field Programmable Gate Array,现场可编程门阵列 |
| VRD | Voltage Regulator Device,电压调节器,负责CPU/内存供电 |
| CSR | Component Self-Description Record,硬件自描述信息,存储在板卡EEPROM中 |
| DPU | Data Processing Unit,数据处理器,智能网卡 |
| SMBPBI | SMBus PostBox BIOS Interface,通过 SMBus 与 GPU 通信的协议 |
| SMC | Server Management Channel,服务器管理通道协议 |
| Retimer | 信号调理芯片,用于高速信号链路信号恢复和增强 |
| TPM | Trusted Platform Module,可信平台模块,安全芯片 |
| DFT | Design For Test,制造测试功能 |
1.5 外部交互边界图
说明
北向接口(Redfish/WEB/SNMP/CLI)由 rackmount 仓通过 D-Bus 资源协作接口调用 GeneralHardware 组件
IPMI 接口由 ipmi_core 组件路由,GeneralHardware 向 ipmi_core 注册处理函数
BMA 带内数据由 host_agent 组件直接推送给 GeneralHardware 组件
GeneralHardware 通过 hwproxy 仓管理 I2C 通道,通过 IMU 与 MCU 通信,通过 firmware_mgmt 协调固件升级
2. API 使用说明与示例
2.1 扩展板卡(ExpBoard)
busctl --user introspect bmc.kepler.general_hardware /bmc/kepler/Systems/1/Boards/ExpBoard/1 bmc.kepler.Systems.Board
NAME TYPE SIGNATURE RESULT/VALUE FLAGS
.Slot property y 1 emits-change
.Number property y 1 emits-change
.Position property s "chassis" emits-change
.Name property s "ExpBoard1" emits-change
.BoardID property q 65535 emits-change
.PcbVersion property s ".A" emits-change
.LogicVersion property s "7.00" emits-change
.MCUVersion property s "0.02.04" emits-change
.RunningStatus property y 1 emits-change
...功能说明
管理扩展板卡(ExpBoard)的属性信息,包括板卡标识、版本信息、运行状态等。
| 属性 | 内容 |
|---|---|
| 接口名 | bmc.kepler.Systems.Board |
| 首发版本 | openUBMC 1.0.0 |
| 废弃状态 | 正常可用 |
参数说明
属性参数说明
| 参数名 | 方向 | 类型 | 描述 | 取值范围 |
|---|---|---|---|---|
| Slot | 输出 | uint8 | 槽位号 | 如1 |
| Number | 输出 | uint8 | 逻辑编号 | 如1 |
| Position | 输出 | string | 容器信息(如:chassis) | 如BCU1 |
| Name | 输出 | string | 单板名 | 如BC83AMDAA |
| ProductName | 输出 | string | 产品名 | — |
| SilkText | 输出 | string | 丝印信息 | — |
| Manufacturer | 输出 | string | 厂商 | 如Huawei |
| Description | 输出 | string | 单板描述 | 如CPUboard |
| BoardID | 输出 | uint16 | 单板ID | 如65535 |
| PartNumber | 输出 | string | 部件编码 | 如5104-00706 |
| PcbVersion | 输出 | string | PCB版本号 | 如.A |
| LogicVersion | 输出 | string | 逻辑版本号(CPLD) | 如7.00 |
| SRVersion | 输出 | string | SR版本号 | 如3.32 |
| MCUVersion | 输出 | string | MCU版本号 | 如0.02.046 |
| PSIPVersion | 输出 | string | 封装电源版本号 | — |
| LogicUnit | 输出 | uint32 | 逻辑位号(U位号) | 如6288 |
| PowerWatts | 输出 | uint32 | 功率 | 如0 |
| RunningStatus | 输出 | uint8 | 监控CPLD和MCU的运行状态 | 1=正常运行,0=异常 |
| FruID | 输出 | uint8 | 关联Fru对象的FruID属性 | 如3 |
| DeviceName | 输出 | string | 板卡丝印信息(如:PCIe Riser1) | 如CpuBoard1 |
| BoardType | 输出 | string | 单板类型 | 如CpuBoard |
| NodeId | 输出 | string | 资源ID | 如BCU1CpuBoard1 |
| RefComponent | 输出 | string | 引用Component对象 | — |
| RefFru | 输出 | string | 引用Fru对象 | — |
| SerialNumber | 输出 | string | 序列号 | — |
| CpldStatus | 输出 | uint8 | CPLD状态 | 如0 |
| MultiLogicVersion | 输出 | dict | 单板所有逻辑版本号 | 如2 CPLD17.00 CPLD2 7.00 |
| MultiLogicUnit | 输出 | dict | 单板所有逻辑位号 | 如2 CPLD1 6288 CPLD2 6288 |
返回值与异常
| 返回值 | 含义 | 触发条件 | 处理建议 |
|---|---|---|---|
| 属性有效 | 成功 | 板卡在位 | 无 |
| 属性为默认值 | 板卡不在位或通信异常 | 硬件故障 | 检查板卡状态 |
应用场景
- 查询板卡基本信息(型号/版本/温度等)
- 监控板卡运行状态和健康度
- 固件升级状态跟踪
调试示例
# 查询扩展板卡信息
busctl --user introspect bmc.kepler.general_hardware /bmc/kepler/Systems/1/Boards/ExpBoard/1 \
bmc.kepler.Systems.Board
# 查询板卡版本号
busctl --user get-property bmc.kepler.general_hardware /bmc/kepler/Systems/1/Boards/ExpBoard/1 \
bmc.kepler.Systems.Board MCUVersion2.2 CPU板卡(CpuBoard)
busctl --user introspect bmc.kepler.general_hardware /bmc/kepler/Systems/1/Boards/CpuBoard/1 bmc.kepler.Systems.Board.CpuBoard
NAME TYPE SIGNATURE RESULT/VALUE FLAGS
.Platform property y 0 emits-change
.BIOSVersion property s "1.20.4" emits-change功能说明
管理CPU基础板卡(CpuBoard)的属性信息,继承Board接口的基本属性,额外提供平台类型和BIOS版本。
| 属性 | 内容 |
|---|---|
| 接口名 | bmc.kepler.Systems.Board.CpuBoard |
| 首发版本 | openUBMC 1.0.0 |
| 废弃状态 | 正常可用 |
参数说明
属性参数说明
| 参数名 | 方向 | 类型 | 描述 | 取值范围 |
|---|---|---|---|---|
| Platform | 输出 | uint8 | 平台类型 | 如0 |
| BIOSVersion | 输出 | string | BIOS版本号,一host对应多个BCU时仅主BCU显示 | 如1.20.4 |
继承接口
CpuBoard 对象同时实现以下接口:
bmc.kepler.Systems.Board- 属性同 ExpBoardbmc.kepler.Systems.Board.Unit- 属性同 2.3 Unit接口
2.3 Unit接口
busctl --user introspect bmc.kepler.general_hardware /bmc/kepler/Systems/1/Boards/ExpBoard/1 bmc.kepler.Systems.Board.Unit
NAME TYPE SIGNATURE RESULT/VALUE FLAGS
.UID property s "00000001020302031825" emits-change
.Type property s "EXU" emits-change
.HWSRVersion property s "1.20.32" emits-change
.CurrentUpgradeStatus property y 0 emits-change功能说明
提供天池组件的统一管理接口,包括唯一标识、组件类型、SR版本和升级状态。
| 属性 | 内容 |
|---|---|
| 接口名 | bmc.kepler.Systems.Board.Unit |
| 首发版本 | openUBMC 1.0.0 |
| 废弃状态 | 正常可用 |
参数说明
属性参数说明
| 参数名 | 方向 | 类型 | 描述 | 取值范围 |
|---|---|---|---|---|
| UID | 输出 | string | 组件唯一标识 | 如0000000001020302031825 |
| Type | 输出 | string | 组件类型(枚举值:EXU,BCU,SEU,CLU,ACU) | 如BCU |
| HWSRVersion | 输出 | string | 天池组件EEPROM中的SR版本号 | 如1.20.32 |
| CurrentUpgradeStatus | 输出 | uint8 | 当前升级状态(0=未升级,1=MCU升级中,2=CPLD升级中) | 如0 |
2.4 网卡板卡(BoardNICCard)
busctl --user introspect bmc.kepler.general_hardware /bmc/kepler/Systems/1/Boards/NICCard/1 bmc.kepler.Systems.NetworkAdapter
NAME TYPE SIGNATURE RESULT/VALUE FLAGS
.StartRemovingDevice method a{ss}s - -
.DumpBlackBox method a{ss}s u -
.Reset method a{ss}s - -
.ID property s "NIC1" emits-change
.Name property s "CX6-LX" emits-change
.FirmwareVersion property s "29.36.2048" emits-change
...功能说明
管理网卡板卡(BoardNICCard)的属性和操作,继承Board和Unit接口,额外实现NetworkAdapter接口。
| 属性 | 内容 |
|---|---|
| 接口名 | bmc.kepler.Systems.NetworkAdapter |
| 首发版本 | openUBMC 1.0.0 |
| 废弃状态 | 正常可用 |
参数说明
方法参数说明
| 方法名 | 入参 | 出参 | 描述 |
|---|---|---|---|
| StartRemovingDevice | a{ss}s | - | 启动设备热拔。s:设备ID |
| DumpBlackBox | a{ss}s | u | 收集黑匣子日志(仅SDI 5.1支持)。s:日志保存路径,u:任务ID |
| Reset | a{ss}s | - | 复位或上下电设备。s:复位类型(GracefulRestart/ForceOff/ForceOn) |
属性参数说明
| 参数名 | 方向 | 类型 | 描述 | 取值范围 |
|---|---|---|---|---|
| ID | 输出 | string | 网卡ID | 如65535 |
| SystemID | 输出 | uint8 | 系统ID | 如0 |
| Name | 输出 | string | 网卡型号名称 | 如SP680 |
| DisplayName | 输出 | string | 网卡显示名称 | — |
| Manufacturer | 输出 | string | 厂商名称 | 如N/A |
| Description | 输出 | string | 网卡描述 | 如2*25GE |
| Position | 输出 | string | 网卡容器信息 | 如EXU |
| DeviceLocator | 输出 | string | 网卡丝印信息 | 如OCP Card 2 |
| Type | 输出 | uint8 | 网卡类型 | 如10 |
| NetworkPortCount | 输出 | uint8 | 网口个数 | 如2 |
| NetworkDeviceFunctionCount | 输出 | uint8 | 最大物理功能数量 | 如2 |
| Model | 输出 | string | 芯片型号 | 如CX6-LX |
| ChipVendor | 输出 | string | 芯片供应商 | — |
| ChipManufacturer | 输出 | string | 芯片制造商 | 如Mellanox |
| DriverName | 输出 | string | 驱动名称 | — |
| DriverVersion | 输出 | string | 驱动版本 | — |
| SlotNumber | 输出 | uint8 | 槽位号 | 如2 |
| NetDevFuncCapabilities | 输出 | uint8 | 支持的协议 | 0=Disabled,1=Ethernet,2=FC,4=iSCSI,8=FCoE,16=OPA,32=IB |
| RootBDF | 输出 | string | 网卡BDF信息 | 如0000:80:04.0 |
| FirmwareVersion | 输出 | string | 固件版本 | 如29.36.2048 |
| VendorID | 输出 | string | 厂商ID | 如0X15b3 |
| DeviceID | 输出 | string | 设备ID | 如0X101f |
| SubsystemVendorID | 输出 | string | 子系统厂商ID | 如0X15b3 |
| SubsystemDeviceID | 输出 | string | 子系统设备ID | 如0X1004 |
| BoardID | 输出 | uint16 | 单板ID | 如65535 |
| BoardName | 输出 | string | 单板名称 | — |
| PCBVersion | 输出 | string | PCB版本 | 如.A |
| AssociatedResource | 输出 | string | 网卡资源归属 | 如CPU2 |
| SupportedMctp | 输出 | bool | 是否支持MCTP | — |
| HotPluggable | 输出 | bool | 是否支持热插拔 | — |
| ReadyToRemove | 输出 | bool | 热拔出是否已准备好 | — |
| AttentionHotPlugState | 输出 | uint8 | 热插拔状态 | 0=不可操作,1=可拔出,2=可插入 |
| SerialNumber | 输出 | string | 序列号 | — |
| TemperatureCelsius | 输出 | int16 | 芯片温度 | 如54 |
| TemperatureStatus | 输出 | uint8 | 芯片温度状态 | 0=正常,1=失效 |
| MaxOperatingTemperatureCelsius | 输出 | uint16 | 稳态最大温度 | 如0 |
| LLDPSupported | 输出 | bool | 是否支持LLDP | — |
| FruId | 输出 | uint8 | 网卡电子标签 | 如0 |
| PredictiveFault | 输出 | uint8 | 预测故障标志位 | 如0 |
| DiagnosticFault | 输出 | uint8 | 故障诊断定位标志位 | 如0 |
| ReplacedFlag | 输出 | uint8 | 网卡更换标志位 | 如0 |
| ParentCardSlotId | 输出 | uint8 | 上级卡槽位号 | 如255 |
| PfMacInfo | 输出 | array | Physical Function Mac信息 | — |
| BandwidthThresholdPercent | 输出 | uint16 | 网络带宽占用率门限 | 如100 |
| NodeId | 输出 | string | 网卡NodeId | 如EXUOCPCard2 |
应用场景
- 查询网卡基本信息(型号/固件/温度等)
- 网卡热插拔操作
- 收集网卡黑匣子日志
- 网卡复位或上下电
2.5 PCIe网卡板卡(BoardPCIeCard)
busctl --user introspect bmc.kepler.general_hardware /bmc/kepler/Systems/1/Boards/PCIeCard/1 bmc.kepler.Systems.NetworkAdapter.NetworkAdapterMetrics
NAME TYPE SIGNATURE RESULT/VALUE FLAGS
.LinkWidthCapability property s "x8" emits-change
.LinkSpeedCapability property s "Gen4" emits-change
.LinkWidth property s "x8" emits-change
.LinkSpeed property s "Gen4" emits-change
.SFPMaxTemperatureCelsius property n 45 emits-change
.PowerMilliWatts property u 20000 emits-change功能说明
管理PCIe网卡板卡的性能指标信息,包括链路带宽、速率、温度、功率等。
| 属性 | 内容 |
|---|---|
| 接口名 | bmc.kepler.Systems.NetworkAdapter.NetworkAdapterMetrics |
| 馈发版本 | openUBMC 1.0.0 |
| 废弃状态 | 正常可用 |
参数说明
属性参数说明
| 参数名 | 方向 | 类型 | 描述 | 取值范围 |
|---|---|---|---|---|
| LinkWidthCapability | 输出 | string | 支持的最大带宽能力 | 如N/A |
| LinkSpeedCapability | 输出 | string | 支持的最大速率能力 | 如N/A |
| LinkWidth | 输出 | string | 实际带宽 | 如N/A |
| LinkSpeed | 输出 | string | 实际速率 | 如N/A |
| SFPMaxTemperatureCelsius | 输出 | int16 | 光模块最大温度(用于调速) | 如0 |
| PowerMilliWatts | 输出 | uint32 | 当前功率 | 如20000 |
2.6 VRD管理(VrdMgmt)
busctl --user introspect bmc.kepler.general_hardware /bmc/kepler/Systems/1/VrdMgmt/1 bmc.kepler.Systems.VrdMgmt
NAME TYPE SIGNATURE RESULT/VALUE FLAGS
.SystemId property y 1 emits-change
.CpuId property y 1 emits-change
.Health property y 0 emits-change
.Status property y 1 emits-change
.VrdTemperatureCelsius property d 42.0 emits-change
.Watts property d 150.0 emits-change
...功能说明
管理电压调节器设备(VRD)的电源信息,提供电压、电流、温度、功率等监控数据。
| 属性 | 内容 |
|---|---|
| 接口名 | bmc.kepler.Systems.VrdMgmt |
| 首发版本 | openUBMC 1.0.0 |
| 废弃状态 | 正常可用 |
参数说明
属性参数说明
| 参数名 | 方向 | 类型 | 描述 | 取值范围 |
|---|---|---|---|---|
| SystemId | 输出 | uint8 | 系统ID | 如1 |
| CpuId | 输出 | uint8 | 关联的CPU ID | 如1 |
| Health | 输出 | uint8 | 健康状态 | 如0 |
| Status | 输出 | uint8 | VRD状态 | 0=无效值,1=有效值 |
| Cpu0v9TACore | 输出 | double | CORE供电(DieId=1) | 如1.03 |
| Cpu0v9TBCore | 输出 | double | CORE供电(DieId=3) | 如1.03 |
| Cpu0v75DDRVDD | 输出 | double | DDR供电 | 如1.03 |
| Cpu0v9Uncore | 输出 | double | UNCORE供电 | 如1.03 |
| Cpu0v8NADVDD | 输出 | double | Nimbus供电(DieId=0) | 如1.03 |
| Cpu0v8NBDVDD | 输出 | double | Nimbus供电(DieId=2) | 如1.03 |
| Cpu1v1DDRVddq | 输出 | double | VDDQ供电 | 如1.03 |
| VrdTemperatureCelsius | 输出 | double | VRD温度(用于调速) | 如42 |
| Watts | 输出 | double | 功率 | 如0 |
应用场景
- 监控CPU/内存供电状态
- 风扇调速参考温度
- 电源健康检测
2.7 VRD芯片(VrdChip)
busctl --user introspect bmc.kepler.general_hardware /bmc/kepler/Systems/1/VrdMgmt/1/VrdChips/1 bmc.kepler.Systems.VrdChip
NAME TYPE SIGNATURE RESULT/VALUE FLAGS
.Name property s "Vrdchip0" emits-change
.Vendor property s "Huawei" emits-change
.Type property s "0" emits-change
.FirmwareVersion property s "35" emits-change功能说明
管理VRD芯片的属性信息。
| 属性 | 内容 |
|---|---|
| 接口名 | bmc.kepler.Systems.VrdChip |
| 首发版本 | openUBMC 1.0.0 |
| 废弃状态 | 正常可用 |
参数说明
| 参数名 | 方向 | 类型 | 描述 | 取值范围 |
|---|---|---|---|---|
| Name | 输出 | string | 芯片名称(Type+No) | 如Vrdchip0 |
| Vendor | 输出 | string | 芯片厂商 | 如Huawei |
| Type | 输出 | string | 芯片类型 | 如0 |
| FirmwareVersion | 输出 | string | 固件版本 | 如35 |
2.8 VRD电源(VrdPower)
busctl --user introspect bmc.kepler.general_hardware /bmc/kepler/Systems/1/VrdMgmt/1/VrdPowers/1 bmc.kepler.Systems.VrdPower
NAME TYPE SIGNATURE RESULT/VALUE FLAGS
.SystemId property y 1 emits-change
.CpuId property y 0 emits-change
.Type property y 0 emits-change
.DieId property y 1 emits-change
.Voltage property d 1.03 emits-change
.CurrentAmps property d 3.25 emits-change
.TemperatureCelsius property d 41.0 emits-change功能说明
管理VRD电源供电区域的详细信息。
| 属性 | 内容 |
|---|---|
| 接口名 | bmc.kepler.Systems.VrdPower |
| 首发版本 | openUBMC 1.0.0 |
| 废弃状态 | 正常可用 |
参数说明
| 参数名 | 方向 | 类型 | 描述 | 取值范围 |
|---|---|---|---|---|
| SystemId | 输出 | uint8 | 系统ID | 如1 |
| CpuId | 输出 | uint8 | CPU索引(取值范围0~n) | 如2 |
| Type | 输出 | uint8 | 供电区域类型 | 0=Core,1=Uncore,2=DDR,3=Nimbus,4=VDDQ |
| DieId | 输出 | uint8 | 供电Die区域 | 0=NA,1=TA,2=NB,3=TB,255=不涉及 |
| Voltage | 输出 | double | 电压 | 如1.03 |
| CurrentAmps | 输出 | double | 电流 | 如3.25 |
| TemperatureCelsius | 输出 | double | 温度 | 如41 |
2.9 安全模块(SecurityModule)
busctl --user introspect bmc.kepler.general_hardware /bmc/kepler/Systems/1/SecurityModule/1 bmc.kepler.Systems.SecurityModule
NAME TYPE SIGNATURE RESULT/VALUE FLAGS
.Presence property y 1 emits-change
.Health property y 1 emits-change
.Protocol property s "TPM" emits-change
.Manufacturer property s "NTZ" emits-change
.ProtocolVersion property s "1.2" emits-change
.FirmwareVersion property s "7.25" emits-change功能说明
管理可信平台模块(TPM)等安全模块的属性信息。
| 属性 | 内容 |
|---|---|
| 接口名 | bmc.kepler.Systems.SecurityModule |
| 馈发版本 | openUBMC 1.0.0 |
| 废弃状态 | 正常可用 |
参数说明
| 参数名 | 方向 | 类型 | 描述 | 取值范围 |
|---|---|---|---|---|
| Presence | 输出 | uint8 | 在位状态 | 如1 |
| Health | 输出 | uint8 | 健康状态 | 如1 |
| Protocol | 输出 | string | 协议类型 | 如TPM |
| Manufacturer | 输出 | string | 厂商名称 | 如NTZ |
| ProtocolVersion | 输出 | string | 协议版本 | 如1.2 |
| FirmwareVersion | 输出 | string | 固件版本 | 如7.25 |
2.10 硬盘背板(HddBackplane)
busctl --user introspect bmc.kepler.general_hardware /bmc/kepler/Systems/1/Boards/HddBackplane/1 bmc.kepler.Systems.HddBackplane
NAME TYPE SIGNATURE RESULT/VALUE FLAGS
.StartSlot property y 1 emits-change
.SlotCount property y 8 emits-change功能说明
管理硬盘背板的属性信息,继承Board和Unit接口。
| 属性 | 内容 |
|---|---|
| 接口名 | bmc.kepler.Systems.HddBackplane |
| 首发版本 | openUBMC 1.0.0 |
| 废弃状态 | 正常可用 |
参数说明
| 参数名 | 方向 | 类型 | 描述 | 取值范围 |
|---|---|---|---|---|
| StartSlot | 输出 | uint8 | 硬盘起始槽位号 | 如1 |
| SlotCount | 输出 | uint8 | 硬盘槽位数量 | 如8 |
2.11 M2转接卡(M2TransferCard)
busctl --user introspect bmc.kepler.general_hardware /bmc/kepler/Systems/1/Boards/M2TransferCard/1 bmc.kepler.Systems.Board.M2
NAME TYPE SIGNATURE RESULT/VALUE FLAGS
.M2SlotPresence property y 0 emits-change
.M2SlotMaxCount property y 1 emits-change功能说明
管理M.2转接卡的属性信息,继承Board、Unit和HddBackplane接口。
| 属性 | 内容 |
|---|---|
| 接口名 | bmc.kepler.Systems.Board.M2 |
| 首发版本 | openUBMC 1.0.0 |
| 废弃状态 | 正常可用 |
参数说明
| 参数名 | 方向 | 类型 | 描述 | 取值范围 |
|---|---|---|---|---|
| M2SlotPresence | 输出 | uint8 | M.2盘在位情况(每个bit表示一个槽位,bit0=SSD1在位,bit1=SSD2在位) | 如0 |
| M2SlotMaxCount | 输出 | uint8 | M.2盘上限 | 如1 |
2.12 制造测试模拟(Manufacture.Simulate)
busctl --user introspect bmc.kepler.general_hardware /bmc/kepler/Systems/1/Boards bmc.kepler.Manufacture.Simulate
NAME TYPE SIGNATURE RESULT/VALUE FLAGS
.VrdUpgradeSimulated property y 0 emits-change writable功能说明
提供制造测试模拟功能,用于测试VRD升级。
| 属性 | 内容 |
|---|---|
| 接口名 | bmc.kepler.Manufacture.Simulate |
| 首发版本 | openUBMC 1.0.0 |
| 废弃状态 | 正常可用 |
参数说明
| 参数名 | 方向 | 类型 | 描述 | 取值范围 |
|---|---|---|---|---|
| VrdUpgradeSimulated | 输入/输出 | uint8 | VRD升级模拟功能(0=正常升级,1=模拟升级) | 如0 |
3. IPMI 命令
3.1 概述
General Hardware 组件注册了多个 OEM IPMI 命令,分布于 NetFn=0x06、0x30,通过 Cmd 区分命令类型。
3.2 系统信息管理命令 (NetFn: 0x06)
| IPMI 命令 | Cmd | 功能说明 |
|---|---|---|
| SetSystemInfoParameters | 0x58 | 设置系统信息参数 |
| GetSystemInfoParameters | 0x59 | 获取系统信息参数 |
3.3 硬件管理命令 (NetFn: 0x30)
制造测试接口 (Cmd: 0x90)
| IPMI 命令 | SubCmd | 功能说明 |
|---|---|---|
| SetCpldChannel | — | 设置CPLD通信通道(制造测试) |
| GetCpldDeviceidInfo | — | 获取CPLD设备ID和厂家信息(制造测试) |
| GetEyeDiagram | — | 眼图测试接口(制造测试) |
| GetPCIeEyeDiagram | — | PCIe眼图测试接口(制造测试) |
| StartCpldSelfTest | — | 启动CPLD自检测试 |
| GetCpldSelfTestResult | — | 获取CPLD自检结果 |
安全模块管理 (Cmd: 0x92)
| IPMI 命令 | 功能说明 |
|---|---|
| ReportTrustedModuleInfo | BIOS上报可信模块信息 |
| GetSecurityModuleInfo | 获取安全模块信息 |
设备管理接口 (Cmd: 0x93)
DPU管理功能:
| IPMI 命令 | 功能说明 |
|---|---|
| SetDpuBootOption | 设置DPU启动选项 |
| GetDpuBootOption | 获取DPU启动选项 |
| SetDpuPowerState | 设置DPU卡电源状态 |
| SetDpuNMI | 设置DPU卡NMI中断 |
| RestSDI | 重启SDI卡 |
| SetDpuResetLinkage | 设置DPU复位联动策略 |
| GetDpuResetLinkage | 获取DPU复位联动策略 |
| SetDpuPxeOption | 设置DPU PXE选项 |
| GetDpuPxeOption | 获取DPU PXE选项 |
| SetDpuSecureBoot | 设置DPU安全启动状态 |
| GetDpuSecureBoot | 获取DPU安全启动状态 |
| SetDpuIp | 设置DPU存储网络IP |
| GetDpuStorageIP | 获取DPU存储网络IP |
| GetDpuSystemStatus | 查询DPU系统启动状态 |
| GetAllDpuEPInitStatus | 获取所有DPU EP初始化状态 |
| SetDpuSolSwitch | 设置DPU串口切换 |
| GetDpuSolSwitch | 获取DPU串口切换状态 |
| SetDpuBiosLogLevel | 设置DPU BIOS日志等级 |
| GetDpuBiosLogLevel | 获取DPU BIOS日志等级 |
| SetHttpsEnable | 设置DPU HTTPS功能开关 |
| GetHttpsEnable | 获取DPU HTTPS功能开关状态 |
GPU管理功能:
| IPMI 命令 | 功能说明 |
|---|---|
| GetGpuChipInfo | 获取GPU芯片类型信息 |
CPU管理功能:
| IPMI 命令 | 功能说明 |
|---|---|
| GetCpuModulePower | 获取CPU模块功耗信息 |
NPU管理功能:
| IPMI 命令 | 功能说明 |
|---|---|
| ResetNpuBoard | 重启NPU板卡 |
| SetNpuPowerCap | 设置NPU功耗封顶 |
通用设备功能:
| IPMI 命令 | 功能说明 |
|---|---|
| SetDeviceAction | 设备操作控制 |
4. 关键特性
4.1 天池板卡管理
天池板卡管理是 General Hardware 的核心功能,提供统一的板卡抽象层:
Unit (基类)
├── BCU (Basic Computing Unit)
│ └── CpuBoard - CPU基础板
├── EXU (Extension Unit)
│ └── ExpBoard - 扩展板卡
├── ACU (Acceleration Unit)
│ └── NpuBoard - NPU神经网络处理板
├── IEU (IO Extension Unit)
│ └── RiserCard - IO组件/转接卡
├── SEU (Storage Extension Unit)
├── CLU (Compute Logic Unit)
├── PSU (Power Supply Unit)
└── PEU (PCIe Extension Unit)核心能力:
- 版本管理:PCB版本自动识别转换(PcbID转PcbVersion)
- 逻辑版本更新:Logic版本ID格式化处理(高4位.低4位)
- MCU版本监控:定时获取和更新MCU固件版本
- CPLD自检:通过写入0x55/0xaa回读确定CPLD通信状态
- 固件监听:监听firmware版本变化并同步更新属性
- 对象引用管理:管理MCU和SMC芯片对象引用
4.2 固件升级管理
固件升级架构:
Platform firmware_mgmt (统一管理层)
├── RPC接口
├── 升级包传输与解压
├── 升级阶段信号广播
└── general_hardware (具体执行层)
├── MCU 升级
├── VRD 升级
├── CPLD 升级
├── CSR 升级
├── FPGA 升级
└── Retimer 升级支持的固件类型:
| 固件类型 | 描述 | 升级协议 |
|---|---|---|
| MCU | 微控制器固件 | SMC/SMBUS |
| VRD | 电压调节器固件 | SMC/PMBus |
| CPLD | 复杂可编程逻辑器件 | JTAG/IIC |
| CSR | 硬件自描述信息 | EEPROM |
| FPGA | 现场可编程门阵列 | 专用协议 |
| Retimer | 信号调理芯片 | SMBUS |
4.3 DPU卡管理
DPU (Data Processing Unit) 卡管理提供智能网卡的硬件管理功能:
代码结构:
dpu_service/
├── dpu_service.lua # DPU管理主服务
├── dpu_object.lua # DPU对象管理
├── dpu_upgrade_object.lua # DPU升级对象
├── dpu_ipmi.lua # DPU IPMI接口
├── dpu_enums.lua # DPU相关常量
└── utils.lua # DPU工具函数支持的DPU类型:
- HyperCard 4 / BF3 系列(BlueField)
- SD100 / DC1000 系列
4.4 GPU管理
GPU管理通过 SMBPBI 协议实现:
代码结构:
gpu_service/
├── gpu_service.lua # GPU管理主服务
├── gpu_object.lua # GPU对象管理
├── gpu_ipmi.lua # GPU IPMI接口
└── fructl_handler.lua # 电源控制接口
hardware_config/
└── Tesla_T4.lua # Tesla T4硬件配置SMBPBI协议流程:
- 写入数据寄存器(如需要)
- 写入命令寄存器
- 从数据寄存器读取结果
4.5 制造测试接口
制造测试接口为生产环境提供硬件验证功能:
代码结构:
manufacture/
├── general_hardware_manufacture_app.lua # 装备测试总服务
├── hw_channel_test.lua # 硬件链路测试
├── jtag_test.lua # JTAG链路测试
├── vrd_upgrade_sim.lua # VRD升级模拟
├── chipv1/eye_diagram.lua # 芯片V1眼图测试
└── chipv2/eye_diagram.lua # 芯片V2眼图测试支持的DFT测试:
| 测试项 | 说明 |
|---|---|
| DftMemoryVolt | 内存电压测试 |
| Dft12V0Vlot | 12V电压测试 |
| Dft5V0Vlot | 5V电压测试 |
| Dft3V3Vlot | 3.3V电压测试 |
| DftCardPresence | 板卡在位测试 |
| DftButtonCell | 纽扣电池测试 |
| DftFlash | Flash存储测试 |
| DftJTAG | JTAG链路测试 |
| DftCpld | CPLD测试 |
| DftIOTest | IO功能测试 |
| DftHwChannel | 硬件通道测试 |
5. 目录结构
general_hardware/
├── src
│ ├── lualib/
│ │ ├── general_hardware_app.lua # 组件入口
│ │ ├── unit_manager/ # 天池板卡管理
│ │ │ ├── unit_manager.lua # 板卡对象管理器
│ │ │ └── class/
│ │ │ ├── unit/ # 基础板卡类
│ │ │ │ ├── unit.lua # 组件基类
│ │ │ │ ├── bcu/cpu_board.lua # CPU基础板
│ │ │ │ ├── exu/ # 扩展单元
│ │ │ │ ├── acu/npu_board.lua # NPU板
│ │ │ │ ├── ieu/ # IO扩展单元
│ │ │ │ └── logic_fw/ # CPLD/FPGA管理
│ │ │ └── logic_fw/
│ │ │ ├── upgrade/ # CPLD升级
│ │ │ └── fpga/ # FPGA管理
│ │ ├── card_manager/ # 网卡/PCIe卡管理
│ │ ├── cpu_service/ # CPU管理
│ │ ├── dpu_service/ # DPU卡管理
│ │ ├── gpu_service/ # GPU管理
│ │ ├── mcu/ # MCU固件管理
│ │ │ ├── upgrade/ # MCU升级
│ │ │ ├── mcu_object.lua # MCU对象基类
│ │ │ └── mcu_service.lua # MCU管理服务
│ │ ├── vrd/ # VRD管理(依赖MCU)
│ │ ├── independent_vrd/ # 独立VRD管理
│ │ ├── retimer/ # Retimer管理
│ │ │ ├── agent/ # Retimer代理
│ │ │ └── upgrade/ # Retimer升级
│ │ ├── security_module/ # 安全模块管理
│ │ ├── sr_upg_service/ # CSR升级服务
│ │ ├── maintenance_service/ # 维护服务
│ │ ├── protocol/ # 通信协议
│ │ │ ├── smbus_5902.lua # 5902L SMBUS协议
│ │ │ └── smbus_M88RT51632.lua # M88RT51632协议
│ │ ├── hardware_config/ # 硬件配置
│ │ ├── device_mgmt/ # 设备管理
│ │ ├── upgrade_subject/ # 升级订阅
│ │ ├── multihost/ # 多主机支持
│ │ └── infrastructure/ # 基础设施
│ └── service/
│ └── main.lua # 服务入口
├── manufacture/ # 制造测试
│ ├── general_hardware_manufacture_app.lua
│ ├── hw_channel_test.lua
│ ├── jtag_test.lua
│ └── chipv*/eye_diagram.lua
└── mds/
└── ipmi.json # IPMI命令定义6. 组件扩展案例
6.1 新增 IPMI 命令
以新增dpu组件相关的ipmi命令为例:
步骤一:在 mds/ipmi.json 中定义命令
{
"NewDpuCommand": {
"priority": "Default",
"role": "Operator",
"privilege": ["ReadOnly"],
"request": [
{"data": "ManufacturerId", "baseType": "U32", "len": "3B"},
{"data": "SubCommand", "baseType": "U8", "len": "1B", "value": "0xXX"}
],
"response": [
{"data": "CompletionCode", "baseType": "U8", "len": "1B"},
{"data": "Data", "baseType": "String", "len": "*"}
]
}
}步骤二:在 dpu_service/dpu_ipmi.lua 中实现处理函数
function dpu_ipmi:new_dpu_command(req, ctx)
local rsp_data = {}
rsp_data.CompletionCode = 0x00
rsp_data.ManufacturerId = 0x0007db
-- 解析请求数据
-- 执行业务逻辑
-- 构造响应数据
return rsp_data
end步骤三:在 general_hardware_app.lua 中注册命令
self:register_ipmi_cmd(ipmi.NewDpuCommand, dpu_ipmi.new_dpu_command)6.2 新增板卡类型
步骤一:在 CSR 文件中定义板卡对象
{
"NewBoard_1": {
"Type": "NEWBOARD",
"BOM": "03012345",
"Id": "NewBoard1",
"DeviceName": "NewBoard1",
"Position": "chassis",
"SilkText": "NEW BOARD 1"
}
}步骤二:在 unit_manager/class/unit/ 下创建板卡类
-- new_board.lua
local class = require 'mc.class'
local unit = require 'unit_manager.class.unit.unit'
local new_board = class(unit)
function new_board:ctor(bus, object, position)
unit.ctor(self, bus, object, position)
end
function new_board:init()
unit.init(self)
-- 新板卡特有初始化逻辑
end
return new_board步骤三:在 unit_manager.lua 中注册板卡类型
local c_new_board = require 'unit_manager.class.unit.new_board.new_board'
function unit_manager:on_add_object(class_name, object, position)
local switch = {
['NewBoard'] = function()
local obj = c_new_board.new(self.bus, object, position)
obj:init()
self.new_boards[position] = obj
end
}
if switch[class_name] then
switch[class_name]()
end
end7. 日志说明
7.1 日志路径
| 日志路径 | 说明 |
|---|---|
/data/var/log/general_hardware/ | General Hardware 组件主日志目录 |
/data/var/log/dpu/ | DPU 日志收集目录(按 DPU ID 组织) |
/data/var/log/npu/ | NPU 日志收集目录 |
/data/var/log/mcu/ | MCU 错误日志收集目录 |
/data/var/log/sr_upgrade/ | CSR 升级日志目录 |
/dev/shm/dump_info_tmp/dump_info/LogDump/general_hardware/ | 一键收集日志存放路径 |
7.2 日志级别与关键字
| 级别 | 说明 | 关键字示例 |
|---|---|---|
| notice | 正常业务流程 | unit_manager init, Board%s add, MCU upgrade start |
| info | 补充信息 | Get MCU version, VRD temperature update |
| warn | 警告 | MCU communication timeout, VRD upgrade pending |
| error | 异常/错误 | I2C_READ_WRITE_FAILED, MCU upgrade failed, Board not found |
| debug | 调试信息 | Unit properties sync, MCU version check times |
7.3 关键日志说明
| 日志内容 | 含义 | 定位建议 |
|---|---|---|
general_hardware init start / general_hardware init end | 组件初始化开始/结束 | 初始化耗时过长时检查中间日志 |
Board%s add / Board%s del | 板卡在位变化 | 板卡识别异常时关注 |
MCU upgrade start / MCU upgrade end | MCU 升级开始/结束 | 升级失败时检查中间日志 |
get MCU version failed | 获取 MCU 版本失败 | 检查 MCU 通信状态 |
CPLD self test failed | CPLD 自检失败 | 检查 CPLD 通信和状态 |
CSR upgrade start / CSR upgrade end | CSR 升级开始/结束 | CSR 升级失败时检查 EEPROM 写保护 |
DPU power state changed | DPU 电源状态变化 | DPU 管理异常时关注 |
VRD voltage abnormal | VRD 电压异常 | 检查 VRD 健康状态 |
Security module not found | 安全模块不在位 | 检查 TPM 在位状态 |
Retimer upgrade failed | Retimer 升级失败 | 检查 SMBUS 通信 |
8. 问题定界指南
8.1 总体定界思路
8.2 板卡识别问题
现象:天池板卡不可见或信息为空
排查步骤:
- 检查 CSR 配置:确认
.sr文件中板卡对象配置正确(Type、BOM、Id、DeviceName) - 检查板卡在位状态:
Presence=1表示在位bashbusctl --user get-property bmc.kepler.general_hardware \ /bmc/kepler/Systems/1/Boards/ExpBoard/1 \ bmc.kepler.Systems.Board RunningStatus - 检查 MCU/CPLD 通信:查看日志中是否有 MCU/CPLD 通信失败bash
grep "MCU communication" /var/log/general_hardware/*.log - 检查板卡类型:确认
BoardType属性与 CSR 中 Type 配置一致 - 检查硬件自发现:确认硬件自发现是否正确上报板卡信息
8.3 固件升级问题
现象:MCU/CPLD/FPGA/VRD/CSR 升级失败
排查步骤:
- 检查升级文件:确认升级文件存在且版本匹配
- MCU:检查 UID 匹配和固件文件格式
- CSR:检查 UID.sr 文件存在
- CPLD:检查升级包配置文件
- 检查升级状态:
CurrentUpgradeStatus=0表示未在升级bashbusctl --user get-property bmc.kepler.general_hardware \ /bmc/kepler/Systems/1/Boards/CpuBoard/1 \ bmc.kepler.Systems.Board.Unit CurrentUpgradeStatus - 检查通信协议:
- MCU:检查 SMC/SMBUS 通道状态
- CPLD:检查 JTAG/IIC 通道状态
- Retimer:检查 SMBUS 通道状态
- 检查错误码:查看升级失败日志中的具体错误信息
8.4 DPU/GPU/NPU 管理问题
现象:DPU/GPU/NPU 设备信息异常或操作失败
排查步骤:
- 检查设备在位:确认设备
Presence=1 - 检查通信协议:
- DPU:检查 BMA 数据推送是否正常
- GPU:检查 SMBPBI 协议通信
- NPU:检查 MCU 通信状态
- 检查 IPMI 命令响应:bash
ipmitool raw 0x30 0x93 0x07db <SubCmd> <Param> - 检查日志收集:确认日志收集功能是否正常
- DPU 卡额外检查:
- 确认 DPU 类型(HyperCard/BF 系列)
- 检查 SOL 串口切换状态
- 检查安全启动配置
8.5 VRD 电源问题
现象:VRD 电压/电流/温度/功率信息异常
排查步骤:
- 检查 VRD 在位:
Status=1表示 VRD 数据有效bashbusctl --user get-property bmc.kepler.general_hardware \ /bmc/kepler/Systems/1/VrdMgmt/1 \ bmc.kepler.Systems.VrdMgmt Status - 检查 IMU 数据推送:确认 IMU 组件正常推送 VRD 数据
- 检查电压电流值:
- Voltage 应在正常范围内(如 0.9V~1.2V)
- CurrentAmps 应与负载匹配
- 检查温度:
VrdTemperatureCelsius用于风扇调速 - 检查芯片信息:
VrdChip对象的FirmwareVersion是否正确
8.6 安全模块问题
现象:TPM 安全模块不在位或信息异常
排查步骤:
- 检查在位状态:
Presence=1表示在位bashbusctl --user get-property bmc.kepler.general_hardware \ /bmc/kepler/Systems/1/SecurityModule/1 \ bmc.kepler.Systems.SecurityModule Presence - 检查 BIOS 上报:确认 BIOS 通过 IPMI 上报 TPM 信息bash
ipmitool raw 0x30 0x92 0x07db 0x01 - 检查健康状态:
Health属性反映 TPM 健康状态 - 检查协议版本:确认 TPM 协议版本(如 TPM 1.2/2.0)
- 检查固件版本:
FirmwareVersion应为有效值
9. 常见问题解答
Q1:天池板卡的 MCU 版本长时间不更新,如何处理?
答:MCU 版本通过周期性任务获取,排查步骤:
- 检查
RunningStatus是否为 1(正常) - 查看日志中 MCU 版本获取任务的执行情况
- 确认 MCU 通信通道(SMC/SMBUS)是否正常
- 若 MCU 通信失败,检查 MCU 在位和硬件连接
Q2:CPLD 升级后版本号未变化,是否正常?
答:CPLD 升级后版本号更新时机取决于升级固件包update.cfg中定义的HotValidList属性
- HotValidList有配置,代表对应的CPLD升级后立刻生效,版本号会立刻变化
- HotValidList未配置,代表对应的CPLD升级后需要执行生效步骤
若版本号未变化,排查步骤:
- 检查是否有待生效的CPLD固件,如果有则对对应的CPLD执行生效
- 确认升级流程是否完整执行
- 检查 CPLD 自检状态(
CpldStatus属性)
Q3:CSR 升级失败,提示 EEPROM 写保护,如何处理?
答:CSR 升级需要解除 EEPROM 写保护:
- 检查 CSR 配置中的
WriteProtect属性是否正确 - 确认写保护解除操作是否执行成功
- 查看日志中写保护开关的执行状态
- 若写保护无法解除,检查硬件写保护电路
Q4:VRD 电压显示异常值(如 0V 或超大值),如何处理?
答:VRD 电压异常排查:
- 检查
Status属性:Status=0表示数据无效 - 确认 IMU 组件是否正常推送 VRD 数据
- 检查 VRD 芯片通信状态(通过 MCU 或 SMBUS)
- 确认 CPU/内存供电配置是否正确
- 若 Status=1 但值异常,可能是传感器故障
Q5:安全模块(TPM)信息显示为默认值,如何排查?
答:TPM 信息为默认值的原因:
- TPM 不在位:
Presence=0时信息为默认值 - BIOS 未上报:BIOS 通过 IPMI 命令
ReportTrustedModuleInfo上报 TPM 信息 - TPM 协议不匹配:确认 TPM 协议版本(1.2/2.0)与 BIOS 配置一致
- IPMI 命令未注册:确认
ReportTrustedModuleInfo命令已注册到 ipmi_core
Q6:Retimer 升级失败,提示 SMBUS 通信错误,如何处理?
答:Retimer SMBUS 通信错误排查:
- 检查 SMBUS 通道状态:确认 hwproxy 组件正常
- 检查 Retimer 芯片在位:确认 Retimer 对象存在
- 检查芯片 Idle 状态:Retimer 升级前需等待芯片进入 Idle 状态
- 确认 SMBUS 地址配置正确
- 查看日志中 SMBUS 读写失败的详细信息
Q7:NPU 模组功耗封顶设置失败,如何排查?
答:NPU 功耗封顶设置失败排查:
- 确认 NPU 板卡在位:
Presence=1 - 检查 NPU MCU 通信状态:
RunningStatus=1 - 确认功耗封顶值在有效范围内
- 检查 NPU 固件版本是否支持功耗封顶功能
- 查看 IPMI 命令
SetNpuPowerCap的返回值