general_hardware
更新时间: 2026/05/30
在Gitcode上查看源码

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(转接卡)等
MCUMicro Controller Unit,板卡上的微控制器,负责板卡本地管理
CPLDComplex Programmable Logic Device,复杂可编程逻辑器件,负责板卡逻辑控制
FPGAField Programmable Gate Array,现场可编程门阵列
VRDVoltage Regulator Device,电压调节器,负责CPU/内存供电
CSRComponent Self-Description Record,硬件自描述信息,存储在板卡EEPROM中
DPUData Processing Unit,数据处理器,智能网卡
SMBPBISMBus PostBox BIOS Interface,通过 SMBus 与 GPU 通信的协议
SMCServer Management Channel,服务器管理通道协议
Retimer信号调理芯片,用于高速信号链路信号恢复和增强
TPMTrusted Platform Module,可信平台模块,安全芯片
DFTDesign 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)

bash
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输出stringPCB版本号如.A
LogicVersion输出string逻辑版本号(CPLD)如7.00
SRVersion输出stringSR版本号如3.32
MCUVersion输出stringMCU版本号如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输出uint8CPLD状态如0
MultiLogicVersion输出dict单板所有逻辑版本号如2 CPLD17.00 CPLD2 7.00
MultiLogicUnit输出dict单板所有逻辑位号如2 CPLD1 6288 CPLD2 6288

返回值与异常

返回值含义触发条件处理建议
属性有效成功板卡在位
属性为默认值板卡不在位或通信异常硬件故障检查板卡状态

应用场景

  • 查询板卡基本信息(型号/版本/温度等)
  • 监控板卡运行状态和健康度
  • 固件升级状态跟踪

调试示例

bash
# 查询扩展板卡信息
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 MCUVersion

2.2 CPU板卡(CpuBoard)

bash
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输出stringBIOS版本号,一host对应多个BCU时仅主BCU显示如1.20.4

继承接口

CpuBoard 对象同时实现以下接口:

  • bmc.kepler.Systems.Board - 属性同 ExpBoard
  • bmc.kepler.Systems.Board.Unit - 属性同 2.3 Unit接口

2.3 Unit接口

bash
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)

bash
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
废弃状态正常可用

参数说明

方法参数说明
方法名入参出参描述
StartRemovingDevicea{ss}s-启动设备热拔。s:设备ID
DumpBlackBoxa{ss}su收集黑匣子日志(仅SDI 5.1支持)。s:日志保存路径,u:任务ID
Reseta{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输出stringPCB版本如.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输出arrayPhysical Function Mac信息
BandwidthThresholdPercent输出uint16网络带宽占用率门限如100
NodeId输出string网卡NodeId如EXUOCPCard2

应用场景

  • 查询网卡基本信息(型号/固件/温度等)
  • 网卡热插拔操作
  • 收集网卡黑匣子日志
  • 网卡复位或上下电

2.5 PCIe网卡板卡(BoardPCIeCard)

bash
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)

bash
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输出uint8VRD状态0=无效值,1=有效值
Cpu0v9TACore输出doubleCORE供电(DieId=1)如1.03
Cpu0v9TBCore输出doubleCORE供电(DieId=3)如1.03
Cpu0v75DDRVDD输出doubleDDR供电如1.03
Cpu0v9Uncore输出doubleUNCORE供电如1.03
Cpu0v8NADVDD输出doubleNimbus供电(DieId=0)如1.03
Cpu0v8NBDVDD输出doubleNimbus供电(DieId=2)如1.03
Cpu1v1DDRVddq输出doubleVDDQ供电如1.03
VrdTemperatureCelsius输出doubleVRD温度(用于调速)如42
Watts输出double功率如0

应用场景

  • 监控CPU/内存供电状态
  • 风扇调速参考温度
  • 电源健康检测

2.7 VRD芯片(VrdChip)

bash
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)

bash
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输出uint8CPU索引(取值范围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)

bash
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)

bash
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)

bash
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输出uint8M.2盘在位情况(每个bit表示一个槽位,bit0=SSD1在位,bit1=SSD2在位)如0
M2SlotMaxCount输出uint8M.2盘上限如1

2.12 制造测试模拟(Manufacture.Simulate)

bash
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输入/输出uint8VRD升级模拟功能(0=正常升级,1=模拟升级)如0

3. IPMI 命令

3.1 概述

General Hardware 组件注册了多个 OEM IPMI 命令,分布于 NetFn=0x06、0x30,通过 Cmd 区分命令类型。

3.2 系统信息管理命令 (NetFn: 0x06)

IPMI 命令Cmd功能说明
SetSystemInfoParameters0x58设置系统信息参数
GetSystemInfoParameters0x59获取系统信息参数

3.3 硬件管理命令 (NetFn: 0x30)

制造测试接口 (Cmd: 0x90)

IPMI 命令SubCmd功能说明
SetCpldChannel设置CPLD通信通道(制造测试)
GetCpldDeviceidInfo获取CPLD设备ID和厂家信息(制造测试)
GetEyeDiagram眼图测试接口(制造测试)
GetPCIeEyeDiagramPCIe眼图测试接口(制造测试)
StartCpldSelfTest启动CPLD自检测试
GetCpldSelfTestResult获取CPLD自检结果

安全模块管理 (Cmd: 0x92)

IPMI 命令功能说明
ReportTrustedModuleInfoBIOS上报可信模块信息
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 的核心功能,提供统一的板卡抽象层:

shell
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 固件升级管理

固件升级架构:

shell
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) 卡管理提供智能网卡的硬件管理功能:

代码结构:

shell
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 协议实现:

代码结构:

shell
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协议流程:

  1. 写入数据寄存器(如需要)
  2. 写入命令寄存器
  3. 从数据寄存器读取结果

4.5 制造测试接口

制造测试接口为生产环境提供硬件验证功能:

代码结构:

shell
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内存电压测试
Dft12V0Vlot12V电压测试
Dft5V0Vlot5V电压测试
Dft3V3Vlot3.3V电压测试
DftCardPresence板卡在位测试
DftButtonCell纽扣电池测试
DftFlashFlash存储测试
DftJTAGJTAG链路测试
DftCpldCPLD测试
DftIOTestIO功能测试
DftHwChannel硬件通道测试

5. 目录结构

shell
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 中定义命令

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 中实现处理函数

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 中注册命令

lua
self:register_ipmi_cmd(ipmi.NewDpuCommand, dpu_ipmi.new_dpu_command)

6.2 新增板卡类型

步骤一:在 CSR 文件中定义板卡对象

json
{
    "NewBoard_1": {
        "Type": "NEWBOARD",
        "BOM": "03012345",
        "Id": "NewBoard1",
        "DeviceName": "NewBoard1",
        "Position": "chassis",
        "SilkText": "NEW BOARD 1"
    }
}

步骤二:在 unit_manager/class/unit/ 下创建板卡类

lua
-- 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 中注册板卡类型

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
end

7. 日志说明

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 endMCU 升级开始/结束升级失败时检查中间日志
get MCU version failed获取 MCU 版本失败检查 MCU 通信状态
CPLD self test failedCPLD 自检失败检查 CPLD 通信和状态
CSR upgrade start / CSR upgrade endCSR 升级开始/结束CSR 升级失败时检查 EEPROM 写保护
DPU power state changedDPU 电源状态变化DPU 管理异常时关注
VRD voltage abnormalVRD 电压异常检查 VRD 健康状态
Security module not found安全模块不在位检查 TPM 在位状态
Retimer upgrade failedRetimer 升级失败检查 SMBUS 通信

8. 问题定界指南

8.1 总体定界思路

8.2 板卡识别问题

现象:天池板卡不可见或信息为空

排查步骤

  1. 检查 CSR 配置:确认 .sr 文件中板卡对象配置正确(Type、BOM、Id、DeviceName)
  2. 检查板卡在位状态Presence=1 表示在位
    bash
    busctl --user get-property bmc.kepler.general_hardware \
        /bmc/kepler/Systems/1/Boards/ExpBoard/1 \
        bmc.kepler.Systems.Board RunningStatus
  3. 检查 MCU/CPLD 通信:查看日志中是否有 MCU/CPLD 通信失败
    bash
    grep "MCU communication" /var/log/general_hardware/*.log
  4. 检查板卡类型:确认 BoardType 属性与 CSR 中 Type 配置一致
  5. 检查硬件自发现:确认硬件自发现是否正确上报板卡信息

8.3 固件升级问题

现象:MCU/CPLD/FPGA/VRD/CSR 升级失败

排查步骤

  1. 检查升级文件:确认升级文件存在且版本匹配
    • MCU:检查 UID 匹配和固件文件格式
    • CSR:检查 UID.sr 文件存在
    • CPLD:检查升级包配置文件
  2. 检查升级状态CurrentUpgradeStatus=0 表示未在升级
    bash
    busctl --user get-property bmc.kepler.general_hardware \
        /bmc/kepler/Systems/1/Boards/CpuBoard/1 \
        bmc.kepler.Systems.Board.Unit CurrentUpgradeStatus
  3. 检查通信协议
    • MCU:检查 SMC/SMBUS 通道状态
    • CPLD:检查 JTAG/IIC 通道状态
    • Retimer:检查 SMBUS 通道状态
  4. 检查错误码:查看升级失败日志中的具体错误信息

8.4 DPU/GPU/NPU 管理问题

现象:DPU/GPU/NPU 设备信息异常或操作失败

排查步骤

  1. 检查设备在位:确认设备 Presence=1
  2. 检查通信协议
    • DPU:检查 BMA 数据推送是否正常
    • GPU:检查 SMBPBI 协议通信
    • NPU:检查 MCU 通信状态
  3. 检查 IPMI 命令响应
    bash
    ipmitool raw 0x30 0x93 0x07db <SubCmd> <Param>
  4. 检查日志收集:确认日志收集功能是否正常
  5. DPU 卡额外检查
    • 确认 DPU 类型(HyperCard/BF 系列)
    • 检查 SOL 串口切换状态
    • 检查安全启动配置

8.5 VRD 电源问题

现象:VRD 电压/电流/温度/功率信息异常

排查步骤

  1. 检查 VRD 在位Status=1 表示 VRD 数据有效
    bash
    busctl --user get-property bmc.kepler.general_hardware \
        /bmc/kepler/Systems/1/VrdMgmt/1 \
        bmc.kepler.Systems.VrdMgmt Status
  2. 检查 IMU 数据推送:确认 IMU 组件正常推送 VRD 数据
  3. 检查电压电流值
    • Voltage 应在正常范围内(如 0.9V~1.2V)
    • CurrentAmps 应与负载匹配
  4. 检查温度VrdTemperatureCelsius 用于风扇调速
  5. 检查芯片信息VrdChip 对象的 FirmwareVersion 是否正确

8.6 安全模块问题

现象:TPM 安全模块不在位或信息异常

排查步骤

  1. 检查在位状态Presence=1 表示在位
    bash
    busctl --user get-property bmc.kepler.general_hardware \
        /bmc/kepler/Systems/1/SecurityModule/1 \
        bmc.kepler.Systems.SecurityModule Presence
  2. 检查 BIOS 上报:确认 BIOS 通过 IPMI 上报 TPM 信息
    bash
    ipmitool raw 0x30 0x92 0x07db 0x01
  3. 检查健康状态Health 属性反映 TPM 健康状态
  4. 检查协议版本:确认 TPM 协议版本(如 TPM 1.2/2.0)
  5. 检查固件版本FirmwareVersion 应为有效值

9. 常见问题解答

Q1:天池板卡的 MCU 版本长时间不更新,如何处理?

:MCU 版本通过周期性任务获取,排查步骤:

  1. 检查 RunningStatus 是否为 1(正常)
  2. 查看日志中 MCU 版本获取任务的执行情况
  3. 确认 MCU 通信通道(SMC/SMBUS)是否正常
  4. 若 MCU 通信失败,检查 MCU 在位和硬件连接

Q2:CPLD 升级后版本号未变化,是否正常?

:CPLD 升级后版本号更新时机取决于升级固件包update.cfg中定义的HotValidList属性

  • HotValidList有配置,代表对应的CPLD升级后立刻生效,版本号会立刻变化
  • HotValidList未配置,代表对应的CPLD升级后需要执行生效步骤

若版本号未变化,排查步骤:

  1. 检查是否有待生效的CPLD固件,如果有则对对应的CPLD执行生效
  2. 确认升级流程是否完整执行
  3. 检查 CPLD 自检状态(CpldStatus 属性)

Q3:CSR 升级失败,提示 EEPROM 写保护,如何处理?

:CSR 升级需要解除 EEPROM 写保护:

  1. 检查 CSR 配置中的 WriteProtect 属性是否正确
  2. 确认写保护解除操作是否执行成功
  3. 查看日志中写保护开关的执行状态
  4. 若写保护无法解除,检查硬件写保护电路

Q4:VRD 电压显示异常值(如 0V 或超大值),如何处理?

:VRD 电压异常排查:

  1. 检查 Status 属性:Status=0 表示数据无效
  2. 确认 IMU 组件是否正常推送 VRD 数据
  3. 检查 VRD 芯片通信状态(通过 MCU 或 SMBUS)
  4. 确认 CPU/内存供电配置是否正确
  5. 若 Status=1 但值异常,可能是传感器故障

Q5:安全模块(TPM)信息显示为默认值,如何排查?

:TPM 信息为默认值的原因:

  1. TPM 不在位:Presence=0 时信息为默认值
  2. BIOS 未上报:BIOS 通过 IPMI 命令 ReportTrustedModuleInfo 上报 TPM 信息
  3. TPM 协议不匹配:确认 TPM 协议版本(1.2/2.0)与 BIOS 配置一致
  4. IPMI 命令未注册:确认 ReportTrustedModuleInfo 命令已注册到 ipmi_core

Q6:Retimer 升级失败,提示 SMBUS 通信错误,如何处理?

:Retimer SMBUS 通信错误排查:

  1. 检查 SMBUS 通道状态:确认 hwproxy 组件正常
  2. 检查 Retimer 芯片在位:确认 Retimer 对象存在
  3. 检查芯片 Idle 状态:Retimer 升级前需等待芯片进入 Idle 状态
  4. 确认 SMBUS 地址配置正确
  5. 查看日志中 SMBUS 读写失败的详细信息

Q7:NPU 模组功耗封顶设置失败,如何排查?

:NPU 功耗封顶设置失败排查:

  1. 确认 NPU 板卡在位:Presence=1
  2. 检查 NPU MCU 通信状态:RunningStatus=1
  3. 确认功耗封顶值在有效范围内
  4. 检查 NPU 固件版本是否支持功耗封顶功能
  5. 查看 IPMI 命令 SetNpuPowerCap 的返回值