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 关键术语表
| 术语 | 解释 |
|---|---|
| BDF | Bus:Device.Function,PCIe总线上的设备地址 |
| rootBDF | 物理BDF,根据槽位在硬件上写死的根端口BDF |
| DevBDF | 设备BDF,由BIOS动态分配的设备BDF |
| SerDes | CPU输出的高速串行接口,也叫HiLink,用于连接UBC/UBCDD |
| UBC/UBCDD | BCU上的PCIe连接器,UBC为标准连接器,UBCDD为双倍密度连接器 |
| IEU | Riser卡,将UBC/UBCDD资源转换为PCIe槽位的中间组件 |
| BCU | 基础板(CPU板),提供UBC/UBCDD资源 |
| EXU | 扩展板,将BCU资源转换为BMC卡、FlexIO接口 |
| SEU | 硬盘背板,将BCU或RAID卡资源转换为NVMe或SATA槽位 |
| PSR | Port Specific Rules,端口特定规则配置,包含线缆白名单 |
| CSR | Component Specific Rules,组件特定规则配置,包含组件资源定义 |
| IMU | Intelligent Management Unit,智能管理单元,负责与带内通信 |
| SMC | System 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 资源协作接口
/bmc/kepler/Systems/${SystemId}/PCIeDevices/${Id} - GetDeviceName
功能说明
获取PCIe设备丝印信息,返回设备的名称标识。
| 属性 | 内容 |
|---|---|
| 接口名 | bmc.kepler.Systems.PCIeDevices |
| 首发版本 | openUBMC 25.03 |
| 废弃状态 | 正常可用 |
参数说明
| 参数名 | 方向 | 类型 | 描述 | 取值范围 |
|---|---|---|---|---|
| Segment | 输入 | U8 | 用于多PCI Bridge场景的编号,每一个Segment对应一个PCI Bus空间 | 无 |
| SocketID | 输入 | U8 | PCIe设备所属CPU ID | 无 |
| Bus | 输入 | U8 | PCIe设备总线号 | 无 |
| Device | 输入 | U8 | PCIe设备设备号 | 无 |
| Function | 输入 | U8 | PCIe设备功能号 | 无 |
返回值与异常
| 返回值 | 含义 | 触发条件 | 处理建议 |
|---|---|---|---|
| Status | 获取PCIe设备丝印信息状态 | 获取PCIe设备丝印信息 | 无 |
| DeviceName | PCIe设备丝印名称 | 获取PCIe设备丝印信息 | 无 |
/bmc/kepler/Systems/${SystemId}/PCIeDevices/${Id} - GetPCIeCardNum
功能说明
获取当前System下PCIeCard的数量。
| 属性 | 内容 |
|---|---|
| 接口名 | bmc.kepler.Systems.PCIeDevices |
| 首发版本 | openUBMC 25.03 |
| 废弃状态 | 正常可用 |
参数说明
无输入参数。
返回值与异常
| 返回值 | 含义 | 触发条件 |
|---|---|---|
| PCIeCardNum | PCIeCard数量 | 正常执行完成 |
/bmc/kepler/Systems/${SystemId}/PCIeSlots/${ID} - PowerControl
功能说明
控制PCIe槽位的上下电状态,支持对指定PCIe槽位执行电源控制操作。
| 属性 | 内容 |
|---|---|
| 接口名 | bmc.kepler.Systems.PCIeSlot |
| 首发版本 | openUBMC 25.03 |
| 废弃状态 | 正常可用 |
参数说明
| 参数名 | 方向 | 类型 | 描述 | 取值范围 |
|---|---|---|---|---|
| PowerState | 输入 | s | 目标电源状态 | "On", "Off" |
限制条件
需要槽位支持热插拔功能,且对应PCIe设备已完成初始化。
2.2 IPMI命令
pcie_device组件注册了以下IPMI命令,用于与带内Host交互:
| 方法 | NetFn | Cmd | 描述 |
|---|---|---|---|
| SetCpuBusSize | 0x30 | 0x92 | BIOS通过此命令上报CPU BUS信息,子命令0x17, ActionType 0x01 |
| UpdateIntegratedPcieConfig | 0x30 | 0x92 | BIOS上报Socket内集成的PCIe化控制器(Integrated PCIe Controller)的BDF信息,子命令0x17, ActionType 0x0E |
| GetMezzSilkName | 0x30 | 0x93 | 通过BDF查询Mezz扣卡的丝印名称,DeviceType 0x0B |
| GetPcieSilkName | 0x30 | 0x93 | 通过BDF查询PCIe卡的丝印名称,DeviceType 0x08 |
| GetNicSilkName | 0x30 | 0x93 | 通过BDF查询网卡的丝印名称,DeviceType 0x0D |
| GetRaidSilkName | 0x30 | 0x93 | 通过BDF查询RAID扣卡的丝印名称,DeviceType 0x06 |
| GetDeviceLocationName | 0x30 | 0x93 | 通过BDF查询PCIe设备的名称和位置信息,子命令0x43 |
| GetPCIeCardModel | 0x30 | 0x93 | 通过BDF查询PCIe卡的Model,DeviceType 0x08, Type 0x05 |
| GetPCIeDevPresentStatus | 0x30 | 0x92 | 查询PCIe设备在位状态,子命令0x4B |
| WritePCIeVPDInfoToBmc | 0x06 | 0x58 | 将PCIe卡的VPD(Vital Product Data)信息写入BMC持久化存储 |
| SetPCIeCardBDFs | 0x30 | 0x92 | 批量上报PCIe卡的BDF信息,子命令0x68 |
| SetPCIeDiskBDFs | 0x30 | 0x92 | 批量上报PCIe磁盘的BDF信息,子命令0x69 |
| SetOCPCardBDFs | 0x30 | 0x92 | 批量上报OCP卡的BDF信息,子命令0x70 |
| SetFDMInfoPCIeAddrInfo | 0x30 | 0x92 | 设置FDM PCIe地址信息,子命令0x17, ActionType 0x05 |
| SetFDMInfoMultiSystemPCIeAddrInfo | 0x30 | 0x92 | 设置多系统FDM PCIe地址信息,子命令0x17, ActionType 0x14 |
2.3 资源树对象模型
PCIeDevice
PCIe设备的核心管理对象,承载了PCIe总线相关属性定义和故障诊断标识。
| 属性 | 类型 | 描述 |
|---|---|---|
| SlotID | U8 | 槽位号 |
| Segment | U8 | PCIe Segment号 |
| SocketID | U8 | CPU Socket号 |
| Bus | U8 | rootBDF的Bus号 |
| Device | U8 | rootBDF的Device号 |
| Function | U8 | rootBDF的Function号 |
| DevBus | U8 | 设备BDF的Bus号 |
| DevDevice | U8 | 设备BDF的Device号 |
| DevFunction | U8 | 设备BDF的Function号 |
| DiagnosticFault | U8 | 严重故障标识,ResetPer/SHM |
| PredictiveFault | U8 | 预故障标识,ResetPer/SHM |
| UCEByBIOS | U8 | BIOS上报的UCE标识,ResetPer/SHM |
| BandwidthReduction | U8 | 降带宽标识,ResetPer/SHM |
| LinkSpeedReduced | U8 | 降速率标识,ResetPer/SHM |
| FunctionClass | U8 | PCIe设备分类代码 |
| DeviceName | String | 设备丝印名称 |
| SlotType | String | 槽位类型(FullLength/HalfLength等) |
| FunctionProtocol | String | 功能协议(PCIe/CXL) |
| FunctionType | String | 功能类型(Physical/Virtual) |
| PCIeDeviceType | String | PCIe设备类型(SingleFunction/MultiFunction等) |
| BaseClassCode | U8 | PCIe基类代码,ResetPer |
| SubClassCode | U8 | PCIe子类代码,ResetPer |
| ProgrammingInterface | U8 | 编程接口,ResetPer |
PCIeDevice.RAS接口(bmc.kepler.Systems.PCIeDevices.PCIeDevice.RAS):
| 属性 | 类型 | 描述 |
|---|---|---|
| CorrectableError | U8 | 可纠正错误标识 |
| UncorrectableError | U8 | 不可纠正错误标识 |
| FatalError | U8 | 致命错误标识 |
| ParityError | U8 | 奇偶校验错误标识 |
| SystemError | U8 | 系统错误标识 |
| FatalErrorCount | U32 | 致命错误计数,ResetPer/SHM |
| NonFatalErrorCount | U32 | 非致命错误计数,ResetPer/SHM |
| BadDLLPCount | U32 | 坏DLLP计数,ResetPer/SHM |
| BadTLPCount | U32 | 坏TLP计数,ResetPer/SHM |
| UnsupportedRequestCount | U32 | 不支持请求计数,ResetPer/SHM |
| CorrectableErrorOverfrequencyCount | U32 | 可纠正错误过频计数,ResetPer/SHM |
| TimeoutError | U8 | 超时错误标识,ResetPer/SHM |
PCIeCard
PCIe卡的管理对象,承载PCIe卡的基本信息。不同类型的PCIe卡(如SDI卡)通过继承扩展。
| 属性 | 类型 | 描述 |
|---|---|---|
| Name | String | 设备名称 |
| Model | String | 设备型号 |
| NodeID | String | 节点唯一标识 |
| SlotID | U8 | 槽位号 |
| DeviceName | String | 设备丝印名称 |
| VendorID | U16 | 供应商ID |
| DeviceID | U16 | 设备ID |
| SubVendorID | U16 | 子系统供应商ID |
| SubDeviceID | U16 | 子系统设备ID |
| Manufacturer | String | 制造商 |
| PartNumber | String | 部件编号 |
| SerialNumber | String | 序列号 |
| FirmwareVersion | String | 固件版本 |
| LinkWidth | String | 实际协商链路宽度 |
| LinkSpeed | String | 实际协商链路速率 |
| LinkWidthAbility | String | 最大支持链路宽度 |
| LinkSpeedCapability | String | 最大支持链路速率 |
| Health | U8 | 健康状态 |
| LaneOwner | U8 | 所属CPU(SocketID) |
| Bus | U8 | rootBus |
| Device | U8 | rootDevice |
| Function | U8 | rootFunction |
| DevBus | U8 | 设备Bus |
| DevDevice | U8 | 设备Device |
| DevFunction | U8 | 设备Function |
OCPCard
OCP卡的管理对象,属性同PCIeCard,路径为/bmc/kepler/Systems/${SystemId}/PCIeDevices/OCPCards/${Id}。
PcieAddrInfo
PCIe地址信息对象,承载槽位的地址映射关系,是拓扑建立的核心输出对象。
| 属性 | 类型 | 描述 |
|---|---|---|
| SlotID | U8 | 槽位号,SHM同步 |
| ComponentType | U8 | 组件类型(2:NVMe, 8:PCIe, 83:OCP) |
| PortID | U8 | 端口ID(对应丝印中的RootPortDeviceId),SHM同步 |
| SocketID | U8 | CPU Socket号,SHM同步 |
| ControllerIndex | U8 | 控制器索引 |
| Segment | U8 | PCIe Segment号 |
| Bus | U8 | rootBDF Bus号,ResetPer |
| Device | U8 | rootBDF Device号,ResetPer |
| Function | U8 | rootBDF Function号,ResetPer |
| Lanes | U8 | Lane数量 |
| PCIeType | String | PCIe代数(Gen1-Gen6) |
| SlotType | String | 槽位类型 |
| ReadyToEnumerate | Boolean | 是否可枚举 |
| DevBus | U8 | 设备Bus号 |
| DevDevice | U8 | 设备Device号 |
| DevFunction | U8 | 设备Function号 |
PCIeFunction
PCIe功能对象,包含RAS错误计数器,路径为/bmc/kepler/Systems/${SystemId}/PCIeDevices/${Id}/PCIeFunctions/${PCIeFunctionId}。
PCIeSlot
PCIe槽位对象,支持电源控制操作,路径为/bmc/kepler/Systems/${SystemId}/PCIeSlots/${ID}。
3. 组件架构说明
3.1 整体架构设计
本组件架构分为接口层、服务层、领域层和基础设施层四个层级。
- 接口层:作为组件级的对外统一出口,通过RPC(资源协作)和IPMI两种方式提供跨模块交互能力。
- 服务层:完成内部多个领域对象和外部其他服务之间协调性、组合性的交互逻辑。
device_service:设备管理服务,基于PCIeDevice、PCIeCard领域对象,对PCIe设备进行全生命周期管理(加载、查询、故障设置等)。biztopo_service:业务拓扑服务,基于BizTopo、TopoMonitor、DeviceLoader领域对象,整合CSR节点信息构建业务Topo树。
- 领域层:提供了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信号管理机制。
- 基础设施层:提供对基础协议和通用功能点的封装。
common_tools:基于pcie_device业务特点的常用逻辑封装。collection_helper、log_helper:集合库和日志收集库。
3.2 业务拓扑建立
pcie_device组件通过对CSR中的SerDes、BusinessConnector对象和PSR中的UnitConfiguration对象进行解析和关联,建立从CPU到PCIe槽位的完整业务拓扑链路。
整体流程如下:
- SerDes/BusinessConnector(CSR)、UnitConfiguration(PSR)对象分发加载。
- BCU内部业务连接器与对应的CPU资源关联对接,IEU内部上行连接器与下行连接器关联对接。
- 结合UnitConfiguration提供的高速线缆连接关系,将IEU侧业务连接器与BCU侧业务连接器建立联系。
- 更新PcieAddrInfo对象的SlotID、PortID、SocketID、rootBDF等属性。
详细流程请参见拓扑建立开发指南。
3.3 PCIe设备加载
PCIe设备加载依赖带内Host上报的BDF信息,通过BMC生成的丝印文件建立槽位与BDF的映射关系。
加载流程:
- BMC拓扑建立完成,更新PcieAddrInfo属性(SlotID、PortID、rootBDF等)。
- BIOS从BMC读取PcieAddrInfo生成丝印文件,带内Host获取丝印。
- 带内Host通过IPMI命令上报设备BDF(按OCP卡/PCIe卡/NVMe盘分三次上报)。
- 监听到Bios对象属性变化,使用设备BDF向IMU查询四元组(VID/DID/SubVID/SubDID)。
- 通过四元组匹配Connector的Id/AuxId,设置Presence置位,触发框架自发现加载设备CSR。
- 支持资源树方式(CSR v1.0)和设备树方式(CSR v2.0)两种加载模式。
详细流程请参见PCIe设备加载开发指南。
3.4 高速线缆检测
通过SMC读取高速链路线缆连接信息,与PSR白名单配置进行比对,实现实时线缆连接检测。
检测流程:
- 初始化端口状态和整机配置信息,识别合法检测区域。
- 通过TOPO发现命令从SMC读取当前TOPO链路连接信息。
- 将实时TOPO信息与PSR配置进行比对,分析设备接入状态。
- 更新链路检测状态,存在非法连接则上报告警。
告警事件:
- 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
业务连接器,有三种类型:
- BCU下行连接器:连接SerDes与UBC/UBCDD端口。
- IEU上行连接器:IEU侧的线缆端口。
- 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.log | pcie_device组件运行日志,包含拓扑建立、设备加载、线缆检测等关键日志 |
4.2 关键日志信息
| 日志片段 | 日志级别 | 含义解读 | 建议处理动作 |
|---|---|---|---|
[BizTopo] Main start | INFO | 拓扑建立流程开始 | 正常启动信息 |
[BizTopo] AddrInfo:SocketID: x, PortID: x, SlotID: x | INFO | 输出PcieAddrInfo属性计算结果 | 确认SlotID/PortID/SocketID与预期一致 |
[BizTopo] Add object | INFO | PcieAddrInfo对象创建 | 确认对象是否成功创建 |
[BizTopoMonitor] BCUx Port: name=xx, status=x, unit=[uid=xx, index=x, port_id=x] | INFO | 线缆检测结果输出 | 确认线缆连接状态 |
[DeviceService] Add object, class: PCIeDevice | INFO | PCIeDevice对象创建 | 确认设备加载成功 |
Get id from PMU | INFO | 通过IMU查询设备四元组 | 确认IMU通信正常 |
INCORRECT_CONNECTION | WARN | 线缆错插告警 | 检查线缆连接 |
Cable.UBIncorrectConnection | ERROR | 线缆错插告警事件 | 检查BCU端线缆端口 |
Cable.UBNotPresent | ERROR | 线缆漏插告警事件 | 检查线缆是否插稳 |
Cable.UnitNotSupported | ERROR | 组件不支持告警 | 检查PSR配置 |
Failed to get PCI info | ERROR | 获取PCI信息失败 | 检查IMU通信链路 |
[device_mgmt] create_resource_obj | INFO | 设备树方式创建资源树对象 | 确认设备树加载流程 |
[device_mgmt] on_add_device_obj | INFO | 监听到设备树对象新增 | 确认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 错误码速查表
| 错误码 | 含义 | 可能原因 | 排查建议 |
|---|---|---|---|
| 0x28000031 | Cable.UBIncorrectConnection | 线缆错插 | 检查BCU端SrcPortName与对端TargetPortID匹配关系 |
| 0x28000033 | Cable.UBNotPresent | 线缆漏插 | 检查实际线缆连接数量是否满足PSR配置 |
| 0x28000035 | Cable.UnitNotSupported | 组件不支持 | 检查PSR白名单配置中SrcPortName列表 |
| 0x2800003D | Cable.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设备加载开发指南中的流程图步骤:
- 查看BDF上报情况
- 查看带内设备存在情况
- 查看丝印信息
- 查看连接器信息置位情况
- 查看是否能通过IMU获取四元组
- 查看sr文件是否存在
- 查看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.0 | 2025-12-31 | openUBMC | 初始版本,包含功能简介和关键特性 |
| v1.1 | 2026-05-18 | openUBMC | 按照组件模板全面修订,补充API说明、对象模型定义、日志说明、问题定界指南和常见问题解答 |