OpenBMC:PLDM 与 MCTP 简介

发布时间:2026/9/23 14:51:20

OpenBMC:PLDM 与 MCTP 简介 OpenBMCPLDM 与 MCTP 简介1. 前言在服务器系统中BMC 需要管理 CPU、内存、PCIe 设备、网卡、存储控制器和电源模块等多种硬件。传统 IPMI 在设备建模、固件升级和复杂数据传输方面存在一定限制因此现代服务器逐渐采用 PLDM 和 MCTP 进行设备管理。两者的关系如下PLDM定义管理数据和管理命令 MCTP提供消息传输和设备寻址整体通信链路管理应用 ↓ PLDM 协议 ↓ MCTP 消息 ↓ I2C / SMBus / PCIe VDM / USB 等传输通道 ↓ 目标硬件设备PLDM 解决“传输什么管理内容”MCTP 解决“消息如何到达目标设备”。2. MCTP 是什么MCTP 是 Management Component Transport Protocol 的缩写由 DMTF 定义用于在不同管理控制器和硬件设备之间传输管理消息。MCTP 本身不负责定义温度、电压或固件升级命令而是提供一套通用的消息传输机制。MCTP 主要负责设备寻址消息封装消息分包和组包多种物理链路适配消息类型标识请求和响应匹配多端点之间的数据传输MCTP 支持的底层传输方式包括SMBus / I2C PCIe VDM USB 串行链路 其他平台自定义传输3. MCTP 的核心概念3.1 EndpointMCTP 网络中的每个管理设备都可以作为一个 Endpoint。例如BMC CPU 管理控制器 PCIe 设备 电源模块 网卡 存储控制器3.2 EIDEID 是 Endpoint ID 的缩写用于标识 MCTP 网络中的设备。例如BMC EID 8 设备 A EID 9 设备 B EID 10EID 类似于网络中的地址消息根据目标 EID 发送到对应设备。3.3 MCTP 总线多个 Endpoint 通过某种物理链路连接后就形成 MCTP 网络。BMC ├── SMBus ── 电源模块 ├── SMBus ── 风扇控制器 └── PCIe ─── 高速设备不同传输介质的底层封装不同但上层使用统一的 MCTP 消息格式。3.4 消息分片底层链路的最大传输单元可能小于完整 PLDM 消息因此 MCTP 支持将一条消息拆成多个数据包。每个 MCTP 数据包通常包含起始包标志结束包标志序列号消息标签消息类型数据负载处理流程如下完整 PLDM 消息 ↓ MCTP 分片 ↓ 底层链路传输 ↓ 目标端重新组包 ↓ 提交给 PLDM 协议处理器4. PLDM 是什么PLDM 是 Platform Level Data Model 的缩写也常被称为 Platform Level Data Model and Messaging。PLDM 定义了平台级设备管理的数据模型和命令格式适用于 BMC 与其他管理设备之间的通信。PLDM 可以实现设备发现传感器读取阈值管理事件上报FRU 信息获取BIOS 配置固件升级Redfish 设备使能设备状态和控制PLDM 通常承载在 MCTP 消息中PLDM 消息 ↓ 封装为 MCTP 消息 ↓ 通过 SMBus、PCIe 等链路发送MCTP 只关心消息如何传输PLDM 负责解释消息内容。5. 常见 PLDM 类型PLDM 根据功能划分为多个 Type。PLDM Type功能Type 0Base基础协议和设备发现Type 1SMBIOSSMBIOS 数据传输Type 2Platform Monitoring and Control平台监控与控制Type 3BIOS Control and ConfigurationBIOS 配置Type 4FRU DataFRU 数据Type 5Firmware Update固件升级Type 6Redfish Device EnablementRedfish 设备使能其中最常见的是Type 0发现设备和协商能力Type 2管理传感器和控制量Type 5执行设备固件升级Type 6让非 BMC 设备参与 Redfish 管理6. PLDM Type 0基础协议PLDM Base 用于完成协议级基础操作例如获取 PLDM 类型获取 PLDM 版本获取命令支持情况获取设备标识处理消息传输能力查询端点能力设备通信前通常需要先完成发现和能力确认。示意流程如下BMC 发送 GetTID ↓ 目标设备返回终端标识 ↓ BMC 查询支持的 PLDM Type ↓ BMC 查询指定 Type 的版本 ↓ BMC 查询支持的命令 ↓ 建立后续通信能力这样BMC 可以根据目标设备实际支持的功能决定后续操作。7. PLDM Type 2平台监控与控制PLDM Type 2 用于平台监控和设备控制是传感器管理中非常重要的一类。它可以表示温度传感器电压传感器电流传感器风扇转速传感器功率传感器状态传感器控制输出阈值和告警PLDM 使用 PDR 描述平台设备。PDR 是 Platform Descriptor Record 的缩写用于描述传感器名称传感器类型单位阈值线性转换参数事件能力控制量设备关联关系数据流如下目标设备提供 PDR ↓ BMC 获取并解析 PDR ↓ 建立传感器和控制量模型 ↓ 读取当前值 ↓ 更新 OpenBMC D-Bus 对象相比直接读取固定寄存器PDR 能够携带更加完整的设备描述信息。8. PLDM Type 5固件升级PLDM Firmware Update 用于向目标设备传输和激活固件。典型流程如下检查目标设备身份 ↓ 查询固件升级能力 ↓ 获取组件信息 ↓ 发送升级初始化请求 ↓ 传输固件数据块 ↓ 校验固件 ↓ 完成下载 ↓ 激活新固件 ↓ 查询升级结果升级过程中可能包含Idle Download Verify Apply Activate Completed Failed固件数据通常会被拆成多个 PLDM 请求再通过 MCTP 分片传输。PLDM 固件升级可以减少不同厂商分别定义升级协议的工作量但目标设备仍然需要实现对应的 PLDM Firmware Update 功能。9. OpenBMC 中的 PLDM 与 MCTP 架构OpenBMC 中的相关组件通常可以分为以下几层bmcweb / Redfish ↓ PLDM 管理服务 ↓ libpldm ↓ MCTP 用户空间服务或内核接口 ↓ SMBus / I2C / PCIe 等底层驱动 ↓ 目标设备MCTP 层MCTP 层负责管理 Endpoint分配或维护 EID发送和接收 MCTP 数据包分片和重组维护底层传输绑定向上层提供消息接口PLDM 层PLDM 层负责封装 PLDM 请求解析 PLDM 响应管理 PDR处理传感器和控制量执行固件升级处理设备事件libpldmlibpldm通常提供 PLDM 消息的编码和解码接口例如创建 PLDM 请求 解析 PLDM 响应 读取命令字段 生成返回码 处理 PDR 数据它主要解决协议格式问题不负责具体的硬件访问和业务策略。10. PLDM 与 D-Bus 的关系OpenBMC 上层服务通常通过 D-Bus 使用 PLDM 获取的数据。例如PLDM 传感器 ↓ PLDM 服务解析 PDR 和当前值 ↓ 创建或更新 D-Bus Sensor 对象 ↓ bmcweb 读取 Sensor.Value ↓ Redfish 展示对于固件升级Redfish UpdateService ↓ 调用 PLDM 升级服务 ↓ 通过 MCTP 传输固件 ↓ 目标设备完成升级 ↓ 更新 D-Bus 和 Redfish 任务状态因此PLDM 可以作为 OpenBMC 管理外部设备的一种协议而 D-Bus 负责连接 OpenBMC 内部各个软件组件。11. 一次 PLDM over MCTP 通信流程完整请求流程如下OpenBMC 服务创建 PLDM 请求 ↓ libpldm 编码消息 ↓ 添加 MCTP 消息头 ↓ 根据底层链路进行分片 ↓ 通过 SMBus 或 PCIe 发送 ↓ 目标 Endpoint 接收并组包 ↓ 目标设备解析 PLDM 请求 ↓ 返回 PLDM 响应 ↓ MCTP 重新组包 ↓ libpldm 解码响应 ↓ 更新 D-Bus 或返回管理结果如果消息长度没有超过底层链路限制可能只需要一个 MCTP 数据包较大的消息则需要多个数据包完成传输。12. PLDM、MCTP 与 IPMI 的区别对比项IPMIMCTPPLDM主要定位服务器管理协议管理消息传输协议平台设备管理协议是否定义管理数据模型是否是是否负责底层传输依赖具体接口是依赖 MCTP传感器管理支持不负责支持固件升级功能有限不负责支持设备发现有限支持端点发现支持协议能力发现常见承载关系KCS、BT、LANSMBus、PCIe 等通常承载在 MCTP 中它们可以同时存在传统主机管理IPMI over KCS / BT 新型设备管理PLDM over MCTP 远程管理接口Redfish over HTTPS13. 总结PLDM 和 MCTP 是现代服务器管理架构中的重要协议。MCTP负责消息传输、寻址、分片和组包 PLDM负责传感器、设备控制、FRU 和固件升级 D-Bus负责 OpenBMC 内部服务之间的数据交互 Redfish负责向外部管理软件提供统一接口完整架构如下Redfish / OpenBMC 管理服务 ↓ PLDM ↓ MCTP ↓ SMBus / I2C / PCIe ↓ 外部管理设备通过 PLDM 和 MCTPBMC 可以使用统一的方式管理不同类型的外部设备减少对特定厂商寄存器和私有协议的依赖同时为传感器管理、设备控制和固件升级提供标准化基础。
延伸阅读

更多相关文章

2026/9/22 9:25:38

openGauss行存储引擎架构与MVCC实现解析

1. 项目概述 今天我们来深入探讨openGauss数据库存储引擎的核心实现机制。作为一款企业级开源关系型数据库,openGauss的存储引擎设计充分考虑了高性能、高可靠性和易扩展性等特点。本系列文章将聚焦于行存储引擎的源码实现细节,帮助开发者深入理解其底层…

2026/9/23 2:45:08

SAP融合开发(Fusion Development)核心解析与实践指南

1. SAP TechEd与Fusion Development概念解析 2023年SAP TechEd技术大会上,Fusion Development(融合开发)作为核心创新理念被正式提出。这个概念的诞生背景是当前企业数字化转型面临的典型困境:业务部门急需快速响应市场变化的数字…

2026/9/23 14:49:10

基于PyTorch的猫狗识别:CNN、ResNet与Swin Transformer完整项目实战

简介:面向机器学习与深度学习初学者、高校课程设计与毕业设计学生,提供基于Python和PyTorch的完整猫狗识别分类项目源码,涵盖CNN、ResNet、Swin Transformer等模型实现,以及数据读取、训练、测试等脚本,可帮助快速掌握…

2026/9/23 14:49:10

SSM健身房管理系统实战:从数据库设计到核心代码完整解析

简介:基于SSM框架的健身房管理系统设计与实现资源,面向Java开发者、高校毕设学生及健身房信息化项目人员,帮助解决会员办理、课程管理、教练安排、私教报名、上课记录、缴费统计等业务的高效管理问题。系统分为管理员与会员两大模块&#xff…

2026/9/23 14:49:10

VMD+排列熵+ELM:小样本轴承故障诊断实战

简介:这份资源面向机械故障诊断方向的研究生、工程师及算法初学者,提供一套基于VMD排列熵与ELM的滚动轴承故障诊断Python实现方案,帮助读者快速搭建从振动信号分解、特征提取到状态分类的完整流程。压缩包共407个文件,以404个txt振…

2026/9/23 14:49:10

qq1011手写实现:解决版本升级API全变痛点

qq1011手写实现:解决版本升级API全变痛点 版本升级后 API 全变了,旧代码直接报错?别急着骂娘,这坑我踩过无数次。 很多开发者遇到这种场景,第一反应是去查新文档,改半天参数,结果发现核心逻辑完全重构。这时候, 手写实现…

2026/9/23 14:44:08

LSMW录屏批量上载全解析:从SHDB录屏到字段映射与排错

简介:这是一份讲解SAP LSMW录屏批量上载操作的手册,面向需要完成数据迁移的SAP实施顾问、内部顾问与运维人员。资源采用Batch Input Recording这一常用录屏方式,围绕LSMW工具的操作主线展开,覆盖Project/Subproject创建、批输入录…

2026/9/23 12:07:00

GAMP 5 基于风险的计算机化系统验证:软件分类与审计追踪实践

简介:《A Risk-Based Approach to Compliant GxP Computerized Systems》即业内熟知的GAMP 5指南,面向制药企业质量与IT合规人员、验证工程师及计算机化系统管理者,用于解决GxP法规环境下系统合规性难以科学落地的问题。文档以风险管理为主线…

2026/9/23 12:06:55

安全托管MSSP实战:从静态防御到人机协同的攻防运营与应急响应

简介:这份PPT围绕互联网业务安全托管服务展开,面向企业安全负责人、IT运维人员及关注MSSP/MSS选型的读者,重点回应传统安全过度依赖人工、碎片化静态防御难以对抗产业化攻击等痛点。资源共1个pptx文件,包体约30.63MB,以…

2026/9/23 0:01:54

3个实战技巧搞定形式英语:从看教程到跑通性能优化

3个实战技巧搞定形式英语:从看教程到跑通性能优化 看了一堆教程还是不会写项目?别慌,这种“眼高手低”的困境在开发者圈子里太常见了。很多人以为卡点在语法,其实真正拦路虎是缺乏将知识点串联成完整链路的能力。今天咱们不聊虚的,直接拿【形式英语】这…

2026/9/22 16:34:32

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/22 20:01:30

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/22 13:25:41

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码