代码仓
中
pcie_device
更新时间: 2026/05/18
在AtomGit上查看源码

pcie_device ​

版本信息 ​

项目内容
组件版本1.100.21
首发版本1.70.17
文档作者openUBMC
最后更新2026-05-18

1. 组件概述 ​

1.1 组件简介 ​

pcie_device组件是OpenUBMC系统中PCIe设备管理的核心组件,承载了BMC对PCIe设备的端到端管理能力,涵盖业务拓扑(BizTopo)的解析建链到终端PCIe设备的纳管。

1.2 解决什么问题 ​

  • PCIe拓扑关系自动化:通过解析CSR、PSR配置信息,自动建立CPU、SerDes、UBC/UBCDD、Riser卡到PCIe槽位的完整业务拓扑链路,消除人工配置的复杂性和出错风险。
  • PCIe设备零配置纳管:结合带内Host上报的BDF信息与IMU读取的设备四元组(VID/DID/SubVID/SubDID),实现标准PCIe设备的自动发现和加载。
  • 高速链路实时检测:通过SMC周期性读取线缆连接信息,与白名单配置进行比对,实时检测线缆错插、漏插等异常并上报告警。
  • 故障诊断与RAS能力:提供PCIe设备错误事件设置、链路状态监控、错误计数器统计等RAS功能,辅助运维人员快速定位故障。

1.3 核心功能 ​

  • PCIe业务拓扑建立:基于CSR和PSR配置,自动建立从CPU SerDes到PCIe槽位的完整业务拓扑链路,为BIOS生成丝印文件提供数据基础。
  • PCIe设备加载与管理:接收带内Host上报的设备BDF信息,通过IMU获取设备四元组,自动触发框架自发现加载PCIe设备CSR,实现对标准PCIe设备(PCIe卡、OCP卡、NVMe盘等)的纳管。
  • 高速线缆检测与告警:实时读取高速链路线缆连接信息,与PSR白名单配置进行比对,在线缆错插、漏插时产生精确告警。
  • PCIe设备故障诊断:支持设置各类错误事件状态(UCE、CE、降带宽、降速率、诊断故障、预故障等),提供RAS错误计数器的读取和清零能力。

1.4 关键术语表 ​

术语解释
BDFBus:Device.Function,PCIe总线上的设备地址
rootBDF物理BDF,根据槽位在硬件上写死的根端口BDF
DevBDF设备BDF,由BIOS动态分配的设备BDF
SerDesCPU输出的高速串行接口,也叫HiLink,用于连接UBC/UBCDD
UBC/UBCDDBCU上的PCIe连接器,UBC为标准连接器,UBCDD为双倍密度连接器
IEURiser卡,将UBC/UBCDD资源转换为PCIe槽位的中间组件
BCU基础板(CPU板),提供UBC/UBCDD资源
EXU扩展板,将BCU资源转换为BMC卡、FlexIO接口
SEU硬盘背板,将BCU或RAID卡资源转换为NVMe或SATA槽位
PSRPort Specific Rules,端口特定规则配置,包含线缆白名单
CSRComponent Specific Rules,组件特定规则配置,包含组件资源定义
IMUIntelligent Management Unit,智能管理单元,负责与带内通信
SMCSystem Management Controller,系统管理控制器
四元组VID(Vendor ID)、DID(Device ID)、SubVID(Subsystem Vendor ID)、SubDID(Subsystem Device ID)

1.5 外部交互边界图 ​

pcie_device组件与以下外部系统交互:

  • BIOS组件:订阅Bios对象的PcieCardBDF、OCPCardBDF、PcieDiskBDF属性变化,接收带内Host上报的设备BDF信息;通过PcieAddrInfo对象为BIOS生成丝印文件提供数据。
  • IMU(带内):通过设备BDF向IMU查询PCIe设备的四元组信息,用于匹配设备CSR并触发加载。
  • SMC:通过SMC命令字读取线缆连接信息(UID、SrcPortName、TargetPortId等),用于线缆检测和拓扑建立。
  • FruCtrl:订阅PowerState属性变化,感知系统上下电状态,驱动设备加载/卸载流程。
  • Connector(框架自发现):通过设置Connector对象的Presence、Id、AuxId等属性,触发框架自发现加载PCIe设备CSR。
  • FruData/Board:订阅BoardSerialNumber、BoardPartNumber属性,用于PCIe卡信息关联。
  • devmon(设备树方式):监听设备树方式加载的PCIe设备(PCIeGpuCard、PCIeNicCard),手动创建对应的资源树对象。

2. API 使用说明与示例 ​

2.1 PCIeDevices资源协作接口 ​

bash
NAME                                      TYPE      SIGNATURE               RESULT/VALUE  FLAGS
.GetDeviceName                            method    a{ss}yyyy                    ys            -
.GetPCIeCardNum                           method    a{ss}                        u             -
.SetPcieErrorStatus                       method    a{ss}yyyysy                  y             -
.SetBandwidthReduction                    method    a{ss}yyyyy                   y             -
.SetUCEByBIOS                             method    a{ss}yyyyy                   y             -
.SetDiagnosticFault                       method    a{ss}yyyyyy                  y             -
.SetPredictiveFault                       method    a{ss}yyyyyy                  y             -
.SetFaultByBios                           method    a{ss}yyyyy                   y             -
.SetLinkSpeedReduced                      method    a{ss}yyyyy                   y             -
.SetPCIeSlots                             method    a{ss}a{sy}                   -             -

功能说明 ​

属性内容
接口名bmc.kepler.Systems.PCIeDevices
首发版本openUBMC 25.03
废弃状态正常可用
方法配置参数 ​
方法名入参类型出参类型描述取值范围
GetDeviceNamea{ss}yyyyys根据SSBDF获取设备丝印名入参:
a{ss}: 额外信息,预留
y: Segment
y: SocketID
y: Bus
y: Device
y: Function
出参:
y: Status,获取状态
s: DeviceName,设备丝印名称
GetPCIeCardNuma{ss}u获取pcie卡数量入参:
a{ss}: 额外信息,预留
出参:
u: PCIeCardNum,PCIe卡数量
SetPcieErrorStatusa{ss}yyyysyy根据错误类型设置不同错误事件属性状态入参:
a{ss}: 额外信息,预留
y: Segment
y: SocketID
y: Bus
y: Device
y: Function
s: ErrorType(CorrectableError/UncorrectableError/FatalError/ParityError/SystemError)
y: Value(0-未发生/1-发生)
出参:
y: Status,错误事件属性状态
SetBandwidthReductiona{ss}yyyyyy设置PCIE降带宽事件属性入参:
a{ss}: 额外信息,预留
y: Segment
y: Bus
y: Device
y: Function
y: Value,带宽事件属性值
出参:
y: Status,设置状态
SetUCEByBIOSa{ss}yyyyyy设置PCIE设备BIOS上报的UCE故障入参:
a{ss}: 额外信息,预留
y: Segment
y: Bus
y: Device
y: Function
y: Value,上报的UCE故障值
出参:
y: Status,设置状态
SetDiagnosticFaulta{ss}yyyyyyy设置故障标志位入参:
a{ss}: 额要信息,预留
y: Segment
y: SocketID
y: Bus
y: Device
y: Function
y: Value,故障标志位值
出参:
y: Status,设置状态
SetPredictiveFaulta{ss}yyyyyyy设置预故障告警标志位入参:
a{ss}: 额要信息,预留
y: Segment
y: SocketID
y: Bus
y: Device
y: Function
y: Value,预故障告警标志位值
出参:
y: Status,设置状态
SetFaultByBiosa{ss}yyyyyy设置PCIERAID卡BIOS上报故障状态入参:
a{ss}: 额要信息,预留
y: Bus
y: Device
y: Function
y: FaultStatus,PCIe卡故障状态
出参:
y: Status,设置状态
SetLinkSpeedReduceda{ss}yyyyyy设置PCIe设备降速率事件属性入参:
a{ss}: 额要信息,预留
y: Segment
y: Bus
y: Device
y: Function
y: Value,降速率事件属性值
出参:
y: Status,设置状态
SetPCIeSlotsa{ss}a{sy}-批量设置PCIe设备槽位号入参:
a{ss}: 额要信息,预留
a{sy}: SlotSettings字典,键为PcieAddrInfo对象Path,值为槽位ID[0-254]
出参:无

返回值与异常 ​

返回值类型含义触发条件处理建议
Status=0 (成功)操作成功正常执行无
Status!=0 (失败)操作失败BDF不匹配/设备不存在检查BDF参数
DeviceName设备丝印名称获取成功无
PCIeCardNumPCIe卡数量获取成功无

应用场景 ​

  • 通过BDF查询PCIe设备丝印名称(BIOS通过IPMI GetPcieSilkName调用)
  • 获取当前System下PCIe卡数量
  • 设置PCIe设备错误事件状态(FDM告警框架调用)
  • 设置降带宽、降速率、UCE等故障标识
  • 批量设置PCIe槽位号(配置导入导出场景)

限制条件 ​

  • GetDeviceName的Segment/SocketID/Bus/Device/Function必须与实际PCIe设备匹配
  • SetPCIeSlots需要BasicSetting权限

调试示例 ​

命令行调试 ​
bash
# 通过BDF获取PCIe设备丝印名
busctl --user call bmc.kepler.pcie_device \
 /bmc/kepler/Systems/1/PCIeDevices/PCIeDevices bmc.kepler.Systems.PCIeDevices \
 GetDeviceName a{ss}yyyy 0 0 0 5 0 0

响应:y 0 s "Slot1"

# 获取PCIe卡数量
busctl --user call bmc.kepler.pcie_device \
 /bmc/kepler/Systems/1/PCIeDevices/PCIeDevices bmc.kepler.Systems.PCIeDevices \
 GetPCIeCardNum a{ss} 0

响应:u 2

# 通过BDF设置PCIe设备错误状态
busctl --user call bmc.kepler.pcie_device \
 /bmc/kepler/Systems/1/PCIeDevices/PCIeDevices bmc.kepler.Systems.PCIeDevices \
 SetPcieErrorStatus a{ss}yyyysy 0 0 0 5 0 0 "FatalError" 1

响应:y 0

# 通过BDF设置降带宽事件属性
busctl --user call bmc.kepler.pcie_device \
 /bmc/kepler/Systems/1/PCIeDevices/PCIeDevices bmc.kepler.Systems.PCIeDevices \
 SetBandwidthReduction a{ss}yyyyy 0 0 5 0 0 1

响应:y 0

# 通过BDF设置诊断故障标志位
busctl --user call bmc.kepler.pcie_device \
 /bmc/kepler/Systems/1/PCIeDevices/PCIeDevices bmc.kepler.Systems.PCIeDevices \
 SetDiagnosticFault a{ss}yyyyyy 0 0 0 5 0 0 1

响应:y 0

# 通过BDF设置BIOS上报的UCE故障
busctl --user call bmc.kepler.pcie_device \
 /bmc/kepler/Systems/1/PCIeDevices/PCIeDevices bmc.kepler.Systems.PCIeDevices \
 SetUCEByBIOS a{ss}yyyyy 0 0 5 0 0 1

响应:y 0

2.2 IPMI命令 ​

pcie_device组件注册了以下IPMI命令,用于与带内Host交互:

方法NetFnCmd描述
SetCpuBusSize0x300x92BIOS通过此命令上报CPU BUS信息,子命令0x17, ActionType 0x01
UpdateIntegratedPcieConfig0x300x92BIOS上报Socket内集成的PCIe化控制器(Integrated PCIe Controller)的BDF信息,子命令0x17, ActionType 0x0E
GetMezzSilkName0x300x93通过BDF查询Mezz扣卡的丝印名称,DeviceType 0x0B
GetPcieSilkName0x300x93通过BDF查询PCIe卡的丝印名称,DeviceType 0x08
GetNicSilkName0x300x93通过BDF查询网卡的丝印名称,DeviceType 0x0D
GetRaidSilkName0x300x93通过BDF查询RAID扣卡的丝印名称,DeviceType 0x06
GetDeviceLocationName0x300x93通过BDF查询PCIe设备的名称和位置信息,子命令0x43
GetPCIeCardModel0x300x93通过BDF查询PCIe卡的Model,DeviceType 0x08, Type 0x05
GetPCIeDevPresentStatus0x300x92查询PCIe设备在位状态,子命令0x4B
WritePCIeVPDInfoToBmc0x060x58将PCIe卡的VPD(Vital Product Data)信息写入BMC持久化存储
SetPCIeCardBDFs0x300x92批量上报PCIe卡的BDF信息,子命令0x68
SetPCIeDiskBDFs0x300x92批量上报PCIe磁盘的BDF信息,子命令0x69
SetOCPCardBDFs0x300x92批量上报OCP卡的BDF信息,子命令0x70
SetFDMInfoPCIeAddrInfo0x300x92设置FDM PCIe地址信息,子命令0x17, ActionType 0x05
SetFDMInfoMultiSystemPCIeAddrInfo0x300x92设置多系统FDM PCIe地址信息,子命令0x17, ActionType 0x14

2.3 资源树对象模型 ​

PCIeDevice ​

PCIe设备的核心管理对象,承载了PCIe总线相关属性定义和故障诊断标识。

属性类型描述
SlotIDU8槽位号
SegmentU8PCIe Segment号
SocketIDU8CPU Socket号
BusU8rootBDF的Bus号
DeviceU8rootBDF的Device号
FunctionU8rootBDF的Function号
DevBusU8设备BDF的Bus号
DevDeviceU8设备BDF的Device号
DevFunctionU8设备BDF的Function号
DiagnosticFaultU8严重故障标识,ResetPer/SHM
PredictiveFaultU8预故障标识,ResetPer/SHM
UCEByBIOSU8BIOS上报的UCE标识,ResetPer/SHM
BandwidthReductionU8降带宽标识,ResetPer/SHM
LinkSpeedReducedU8降速率标识,ResetPer/SHM
FunctionClassU8PCIe设备分类代码
DeviceNameString设备丝印名称
SlotTypeString槽位类型(FullLength/HalfLength等)
FunctionProtocolString功能协议(PCIe/CXL)
FunctionTypeString功能类型(Physical/Virtual)
PCIeDeviceTypeStringPCIe设备类型(SingleFunction/MultiFunction等)
BaseClassCodeU8PCIe基类代码,ResetPer
SubClassCodeU8PCIe子类代码,ResetPer
ProgrammingInterfaceU8编程接口,ResetPer

PCIeDevice.RAS接口(bmc.kepler.Systems.PCIeDevices.PCIeDevice.RAS):

属性类型描述
CorrectableErrorU8可纠正错误标识
UncorrectableErrorU8不可纠正错误标识
FatalErrorU8致命错误标识
ParityErrorU8奇偶校验错误标识
SystemErrorU8系统错误标识
FatalErrorCountU32致命错误计数,ResetPer/SHM
NonFatalErrorCountU32非致命错误计数,ResetPer/SHM
BadDLLPCountU32坏DLLP计数,ResetPer/SHM
BadTLPCountU32坏TLP计数,ResetPer/SHM
UnsupportedRequestCountU32不支持请求计数,ResetPer/SHM
CorrectableErrorOverfrequencyCountU32可纠正错误过频计数,ResetPer/SHM
TimeoutErrorU8超时错误标识,ResetPer/SHM

PCIeCard ​

PCIe卡的管理对象,承载PCIe卡的基本信息。不同类型的PCIe卡(如SDI卡)通过继承扩展。

属性类型描述
NameString设备名称
ModelString设备型号
NodeIDString节点唯一标识
SlotIDU8槽位号
DeviceNameString设备丝印名称
VendorIDU16供应商ID
DeviceIDU16设备ID
SubVendorIDU16子系统供应商ID
SubDeviceIDU16子系统设备ID
ManufacturerString制造商
PartNumberString部件编号
SerialNumberString序列号
FirmwareVersionString固件版本
LinkWidthString实际协商链路宽度
LinkSpeedString实际协商链路速率
LinkWidthAbilityString最大支持链路宽度
LinkSpeedCapabilityString最大支持链路速率
HealthU8健康状态
LaneOwnerU8所属CPU(SocketID)
BusU8rootBus
DeviceU8rootDevice
FunctionU8rootFunction
DevBusU8设备Bus
DevDeviceU8设备Device
DevFunctionU8设备Function

OCPCard ​

OCP卡的管理对象,属性同PCIeCard,路径为/bmc/kepler/Systems/${SystemId}/PCIeDevices/OCPCards/${Id}。

PcieAddrInfo ​

PCIe地址信息对象,承载槽位的地址映射关系,是拓扑建立的核心输出对象。

属性类型描述
SlotIDU8槽位号,SHM同步
ComponentTypeU8组件类型(2:NVMe, 8:PCIe, 83:OCP)
PortIDU8端口ID(对应丝印中的RootPortDeviceId),SHM同步
SocketIDU8CPU Socket号,SHM同步
ControllerIndexU8控制器索引
SegmentU8PCIe Segment号
BusU8rootBDF Bus号,ResetPer
DeviceU8rootBDF Device号,ResetPer
FunctionU8rootBDF Function号,ResetPer
LanesU8Lane数量
PCIeTypeStringPCIe代数(Gen1-Gen6)
SlotTypeString槽位类型
ReadyToEnumerateBoolean是否可枚举
DevBusU8设备Bus号
DevDeviceU8设备Device号
DevFunctionU8设备Function号

PCIeFunction ​

PCIe功能对象,包含RAS错误计数器,路径为/bmc/kepler/Systems/${SystemId}/PCIeDevices/${Id}/PCIeFunctions/${PCIeFunctionId}。

PCIeSlot ​

PCIe槽位对象,支持电源控制操作,路径为/bmc/kepler/Systems/${SystemId}/PCIeSlots/${ID}。

3. 组件架构说明 ​

3.1 整体架构设计 ​

本组件架构分为接口层、服务层、领域层和基础设施层四个层级。

  1. 接口层:作为组件级的对外统一出口,通过RPC(资源协作)和IPMI两种方式提供跨模块交互能力。
  2. 服务层:完成内部多个领域对象和外部其他服务之间协调性、组合性的交互逻辑。
    • device_service:设备管理服务,基于PCIeDevice、PCIeCard领域对象,对PCIe设备进行全生命周期管理(加载、查询、故障设置等)。
    • biztopo_service:业务拓扑服务,基于BizTopo、TopoMonitor、DeviceLoader领域对象,整合CSR节点信息构建业务Topo树。
  3. 领域层:提供了PCIe设备、PCIe卡、业务TOPO树相关实体类的定义,承载核心业务逻辑。
    • biz_topo:承载业务TOPO的解析与建立,结合整机配置实现CPU与PCIe设备的建链。
    • topo_monitor:提供业务TOPO高速链路故障检测能力。
    • device_loader:基于业务TOPO链路,结合带内上报信息提供PCIe设备纳管和持久化机制。
    • PCIeDevice:对所有PCIe设备抽象出的类定义,承载PCIe总线属性和故障诊断标识。
    • PCIeCard:PCIe卡基本信息管理抽象类,不同类型PCIe卡通过继承拓展。
    • signal_manager:基于signal库的PCIe信号管理机制。
  4. 基础设施层:提供对基础协议和通用功能点的封装。
    • common_tools:基于pcie_device业务特点的常用逻辑封装。
    • collection_helper、log_helper:集合库和日志收集库。

3.2 业务拓扑建立 ​

pcie_device组件通过对CSR中的SerDes、BusinessConnector对象和PSR中的UnitConfiguration对象进行解析和关联,建立从CPU到PCIe槽位的完整业务拓扑链路。

整体流程如下:

  1. SerDes/BusinessConnector(CSR)、UnitConfiguration(PSR)对象分发加载。
  2. BCU内部业务连接器与对应的CPU资源关联对接,IEU内部上行连接器与下行连接器关联对接。
  3. 结合UnitConfiguration提供的高速线缆连接关系,将IEU侧业务连接器与BCU侧业务连接器建立联系。
  4. 更新PcieAddrInfo对象的SlotID、PortID、SocketID、rootBDF等属性。

详细流程请参见拓扑建立开发指南。

3.3 PCIe设备加载 ​

PCIe设备加载依赖带内Host上报的BDF信息,通过BMC生成的丝印文件建立槽位与BDF的映射关系。

加载流程:

  1. BMC拓扑建立完成,更新PcieAddrInfo属性(SlotID、PortID、rootBDF等)。
  2. BIOS从BMC读取PcieAddrInfo生成丝印文件,带内Host获取丝印。
  3. 带内Host通过IPMI命令上报设备BDF(按OCP卡/PCIe卡/NVMe盘分三次上报)。
  4. 监听到Bios对象属性变化,使用设备BDF向IMU查询四元组(VID/DID/SubVID/SubDID)。
  5. 通过四元组匹配Connector的Id/AuxId,设置Presence置位,触发框架自发现加载设备CSR。
  6. 支持资源树方式(CSR v1.0)和设备树方式(CSR v2.0)两种加载模式。

详细流程请参见PCIe设备加载开发指南。

3.4 高速线缆检测 ​

通过SMC读取高速链路线缆连接信息,与PSR白名单配置进行比对,实现实时线缆连接检测。

检测流程:

  1. 初始化端口状态和整机配置信息,识别合法检测区域。
  2. 通过TOPO发现命令从SMC读取当前TOPO链路连接信息。
  3. 将实时TOPO信息与PSR配置进行比对,分析设备接入状态。
  4. 更新链路检测状态,存在非法连接则上报告警。

告警事件:

  • 0x28000031 (Cable.UBIncorrectConnection):线缆错插,BCU端连接正确但对端端口错误。
  • 0x28000033 (Cable.UBNotPresent):线缆漏插,实际连接线缆数少于配置要求。
  • 0x28000035 (Cable.UnitNotSupported):组件不支持,连接的端口不在白名单配置中。
  • 0x2800003D (Cable.UnitUBNotPresent):精细化漏插告警,定位到必插线缆的丝印。

详细流程请参见线缆检测开发指南。

3.5 关键类定义 ​

UnitConfiguration ​

承载BCU和IEU的连接关系(配置在PSR中),主要属性包括SlotType、SlotNumber、Configurations(包含SrcPortName、TargetPortID、Slot、Device等)。

SerDes ​

承载BCU组件内部的CPU资源配置,关键属性为Name、SocketID、LinkWidth、WorkMode、ModeConfigs(包含Device和ControllerIndex)。

BusinessConnector ​

业务连接器,有三种类型:

  1. BCU下行连接器:连接SerDes与UBC/UBCDD端口。
  2. IEU上行连接器:IEU侧的线缆端口。
  3. IEU下行连接器:PCIe槽位连接器,关联PcieAddrInfo和框架Connector。

PcieAddrInfo ​

PCIe槽位信息,拓扑建立完成后更新SlotID、PortID、SocketID、Segment、rootBDF等属性。

3.6 PCIe设备故障诊断(RAS) ​

pcie_device组件提供完整的PCIe设备错误检测和诊断能力:

  • FDM告警接口:设置各类错误标识(DiagnosticFault、PredictiveFault、UCEByBIOS、BandwidthReduction、LinkSpeedReduced)。
  • RAS错误计数器:通过PCIeDevice.RAS接口提供FatalErrorCount、NonFatalErrorCount、BadDLLPCount、BadTLPCount、UnsupportedRequestCount、CorrectableErrorOverfrequencyCount等计数器,支持读取和清零。
  • PCIeFunction粒度:在PCIeFunction对象上也提供RAS错误计数器,实现Function级别的故障诊断。
  • IMU周期性查询:通过IMU周期性查询PCIe设备的速率和带宽信息,更新LinkSpeed、LinkWidth等属性。

4. 日志说明 ​

4.1 一键日志收集 ​

系统一键日志收集时,pcie_device组件相关日志文件如下:

文件路径内容说明
dump_info/LogDump/app.logpcie_device组件运行日志,包含拓扑建立、设备加载、线缆检测等关键日志

4.2 关键日志信息 ​

日志片段日志级别含义解读建议处理动作
[BizTopo] Main startINFO拓扑建立流程开始正常启动信息
[BizTopo] AddrInfo:SocketID: x, PortID: x, SlotID: xINFO输出PcieAddrInfo属性计算结果确认SlotID/PortID/SocketID与预期一致
[BizTopo] Add objectINFOPcieAddrInfo对象创建确认对象是否成功创建
[BizTopoMonitor] BCUx Port: name=xx, status=x, unit=[uid=xx, index=x, port_id=x]INFO线缆检测结果输出确认线缆连接状态
[DeviceService] Add object, class: PCIeDeviceINFOPCIeDevice对象创建确认设备加载成功
Get id from PMUINFO通过IMU查询设备四元组确认IMU通信正常
INCORRECT_CONNECTIONWARN线缆错插告警检查线缆连接
Cable.UBIncorrectConnectionERROR线缆错插告警事件检查BCU端线缆端口
Cable.UBNotPresentERROR线缆漏插告警事件检查线缆是否插稳
Cable.UnitNotSupportedERROR组件不支持告警检查PSR配置
Failed to get PCI infoERROR获取PCI信息失败检查IMU通信链路
[device_mgmt] create_resource_objINFO设备树方式创建资源树对象确认设备树加载流程
[device_mgmt] on_add_device_objINFO监听到设备树对象新增确认devmon通信正常

5. 问题定界指南 ​

5.1 典型问题定界 ​

现象描述是否为本组件问题判断依据关键证据收集方法
PCIe卡不加载可能检查BDF是否正常上报、Connector Presense是否置位查看app.log中PcieCardBDF、Get id from PMU关键字,检查mdbctl lsprop Connector_<name>
丝印信息不正确是PcieAddrInfo的SlotID/PortID/SocketID与硬件预期不符查看丝印文件/dump_info/AppDump/bios/1/silkconfig.json,检查拓扑建立日志
线缆错插告警是BCU端SrcPortName匹配但TargetPortID不匹配查看app.log中INCORRECT_CONNECTION关键字
线缆漏插告警是实际连接线缆数少于PSR配置要求查看app.log中UBNotPresent关键字
PCIe设备故障误报可能检查FDM框架是否正确调用告警接口查看app.log中对应告警接口调用日志
BIOS上报BDF后卡仍然不加载是检查IMU是否能获取四元组、CSR文件是否存在查看app.log中Get id from PMU,检查sr文件是否存在

5.2 错误码速查表 ​

错误码含义可能原因排查建议
0x28000031Cable.UBIncorrectConnection线缆错插检查BCU端SrcPortName与对端TargetPortID匹配关系
0x28000033Cable.UBNotPresent线缆漏插检查实际线缆连接数量是否满足PSR配置
0x28000035Cable.UnitNotSupported组件不支持检查PSR白名单配置中SrcPortName列表
0x2800003DCable.UnitUBNotPresent必插线缆漏插检查共同最大子集计算和必插线缆配置

5.3 调试方法 ​

开启调试日志 ​

pcie_device组件的调试日志随app.log输出,日志级别由系统统一配置。在调试场景下,可通过以下方式增加日志获取量:

busctl --user call bmc.kepler.pcie_device /bmc/kepelr/compute/MicroComponent bmc.kepler.MicroComponent SetDlogLevel a{ss}sy 0 debug 2

PCIe卡不加载问题排查流程 ​

排查流程遵循PCIe设备加载开发指南中的流程图步骤:

  1. 查看BDF上报情况
  2. 查看带内设备存在情况
  3. 查看丝印信息
  4. 查看连接器信息置位情况
  5. 查看是否能通过IMU获取四元组
  6. 查看sr文件是否存在
  7. 查看devmon是否发生coredump

6. 常见问题解答 ​

Q1:PCIe卡不加载如何排查? ​

  • 问题描述:PCIe设备插入槽位后在BMC侧不可见或状态异常
  • 一句话答案:按BDF上报 → 丝印检查 → Connector置位 → IMU四元组获取 → SR文件存在的顺序排查
  • 根因说明:可能是BDF未上报、丝印错误、IMU通信异常、SR文件缺失或框架加载异常
  • 解决方案:按照排查流程图逐项检查
  • 规避方案:重启BMC后如数据库有持久化BDF信息可恢复加载
  • 适用版本:所有版本
  • 相关文档链接:PCIe设备加载开发指南

Q2:丝印文件中的RootPortDeviceId和SlotId不匹配硬件预期? ​

  • 问题描述:BIOS生成的丝印文件中RootPortDeviceId或SlotId与硬件设计值不符
  • 一句话答案:检查CSR中SerDes的Device配置和PSR中UnitConfiguration的Slot配置
  • 根因说明:PortID来源于SerDes的Device值,SlotID来源于PSR的Slot数组,配置错误会导致丝印不正确
  • 解决方案:核对CSR中SerDes的ModeConfigs.Device值与硬件预期一致,核对PSR中Configurations.Slot配置
  • 适用版本:所有版本
  • 相关文档链接:拓扑建立开发指南

Q3:线缆错插告警如何处理? ​

  • 问题描述:系统上报Cable.UBIncorrectConnection告警
  • 一句话答案:检查对应BCU端口的SrcPortName连接的组件端口是否与PSR配置一致
  • 根因说明:BCU端SrcPortName匹配但TargetPortID与配置不符
  • 解决方案:调整线缆连接使SrcPortName与TargetPortID匹配PSR配置
  • 适用版本:所有版本
  • 相关文档链接:线缆检测开发指南

Q4:PCIe设备RAS错误计数器如何清零? ​

  • 问题描述:需要清除PCIe设备的错误计数器
  • 一句话答案:通过PCIeDevice.RAS接口的写操作可以清零对应的错误计数器
  • 根因说明:RAS错误计数器为ResetPer属性,系统复位或写操作可清零
  • 解决方案:调用对应的属性写方法将计数器值写为0
  • 适用版本:所有版本

Q5:资源树方式和设备树方式的卡加载有何区别? ​

  • 问题描述:PCIe卡加载在两种方式下表现不同
  • 一句话答案:资源树方式由框架直接CSR分发加载,设备树方式需pcie_device监听devmon后手动创建对象
  • 根因说明:资源树方式CSR FormatVersion为3.00,框架自动分发;设备树方式CSR FormatVersion为5.00,需devmon通知后手动创建PCIeDevice/PCIeCard对象
  • 解决方案:根据sr文件的FormatVersion字段判断加载方式
  • 适用版本:v1.0+

附录 ​

附录A 参考资料 ​

附录B 修订记录 ​

版本日期修订人修订内容
v1.02025-12-31openUBMC初始版本,包含功能简介和关键特性
v1.12026-05-18openUBMC按照组件模板全面修订,补充API说明、对象模型定义、日志说明、问题定界指南和常见问题解答