企业级芯片间通信协议MCTP简介-利用Jetson Nano模拟BMC对博通(Broadcom) Switch进行MCTP交互入门
成都瑞贺数理科技: Leo Chen
Dat: 2026-04-27
Location: Chengdu/Taiwan
摘要
本文主要目地是针对BMC Controller在Serevr system里面与其它的主要Chips如HBA, NIC, Switch等利用MCTP协议进行管理通信的介绍. 本文中不以ASpeed BMC Controller AST2600当做案例, 而是采用了Nvidia Jetson Nano扮演BMC的角色来做演示. 选择非BMC主流芯片进行演示的目地是为了能够将如何利用一般自带I2C的开发板,从底层的I2C的Master/Slave驱动调通,到中间层利用Intel的MCTPLib的协议核心,再进阶到引入博通(Broadcom) Switch 的 MCTP工具与库文件 (ScrutinyLib)完成一垂直整合 (Full Stack)的通信成果. 分享出来给有兴趣在BMC Server/Switch Programming进行开发研究的人一个基础导读. 协助有兴趣的人能顺利取得机会进入大厂担任相关工作。
TOC/Agenda
本文将以下列主题依序解说
Contents
3. Nvidia Jetson Nano I2C 模块介绍... 5
4. MCTP代码移植:将Intel LibMCTP交插编译至Jetson Nano. 6
5. 博通 (Broadcom) Switch 中的MCTP支持介绍: ScrutinyLibOOB.. 7
6. Putting all together: 整合应用演示... 8
图片来源:DMTF-DSP0237_1.2.0.pdf.
上面的图片展示的是 MCTP (Management Component Transport Protocol) 在 SMBus/I2C 物理层上的封装格式。 以下是针对 MCTP 的简要介绍:
1. 什么是 MCTP?
MCTP 是由 DMTF(分布式管理任务组)定义的一种通讯协议,主要用于计算机系统内部各个「管理元件」(例如 BMC、网卡、GPU、电源控制器等)之间的通讯。
2. 主要功能与特点
- 传输层独立性:MCTP 可以在不同的物理层上运行,如图中所示的 SMBus/I2C,或是PCIe VDM、KCS等。
- 端点识别 (EID):系统中的每个组件都会被分配一个唯一的 Endpoint ID,方便进行点对点通讯。
- 封包拆解与重组:支持将长讯息拆分成多个封包传输,并在接收端重新组合。
- 标准化管理:它是许多高级管理协议(如 PLDM、NVMe-MI、SPDM)的基础载体。
3. 图中封包结构解析
这张图呈现了 MCTP 封包是如何“套”在 SMBus 格式中的:
- SMBus 层(绿色部分):包含目标地址、命令代码(MCTP 固定为 0Fh)、字节计数、来源地址,以及最后的检测码 (PEC)。
- MCTP 传输层头(红色实线框):这是核心部分,包含版本信息、目标/来源 EID、封包序列号 (Pkt Seq #) 以及用于区分消息起始/结束的标记 (SOM/EOM)。
- MCTP 内容(蓝色/橘色部分):包含 Msg Type(消息类型,定义后续数据是 PLDM 还是 NC-SI 等)以及实际的 Message Data。
这套架构让服务器内的管理芯片能以统一的方式,跨越不同物理接口与硬件沟通。
图片来源: https://github.com/Intel-BMC/libmctp/tree/master
Intel 的 libmctp 是一个实作 MCTP (Management Component Transport Protocol) 协议的轻量级 C 语言函式库。
以下是该项目的重点简介:
1. 项目定位
libmctp 的目标是提供一个硬件无关 (Hardware-agnostic) 的 MCTP 核心实作。 它处理了协议中最复杂的部分,例如:
- 封包的封装与拆解:将上层讯息封装成 MCTP 封包。
- 分段与重组 (Segmentation & Reassembly):如果讯息太长,它会负责将其拆分成多个封包传输,并在接收端正确组合。
- 端点管理:处理 Destination EID 与 Source EID 的逻辑。
2. 核心架构
这个库的设计非常灵巧,它将逻辑分为两层:
- Core (核心层):处理与硬件无关的协议状态机。
- Bindings (绑定层):这是针对不同实体接口的实作。该项目中常见的绑定包括:
- Serial
- SMBus/I2C
- PCIe
3. 为什么Intel要释出这个?
这是 OpenBMC 生态系统的一部分。 现代服务器(尤其是使用Intel CPU的系统)需要通过MCTP与各种组件(如GPU、网卡、NVMe硬盘)沟通,以取得温度、功耗或进行固件更新(SPDM认证)。 提供这个库可以让开发者更容易在不同的 BMC 平台(如 AST2500/AST2600)上实现标准化通讯。
4. 技术特点
- 低相依性:为了能在嵌入式系统(如 BMC 或管理控制器)运行,它不依赖复杂的标准库。
- 高性能:使用 C 语言编写,内存占用极小。
易于扩充:如果你有自定义的物理层(例如私有的总线),只需编写一个新的 binding 即可对接核心功能。
3. Nvidia Jetson Nano I2C 模块介绍
![]() |
如本文摘要所述,我们这里选择使用Nvidia Jetson Nano与Broadcom PCIe Switch 进行MCTP的通信演示.上图为本演示中Jetson Nano与PCIe Switch的连接拓朴与I2C脚位连接方式.这里必须特别要提出来的是:Jetson Nano的硬件限制, 无法选用单一I2C port进行M2M (master to master)通信.因此必须要使用I2C-0与I2C-1与Broadcom Switch I2C_4连在同一个BUS下进行MCTP通信.
4. MCTP代码移植:将Intel LibMCTP交插编译至Jetson Nano
在介绍过MCTP规范, Intel MCTP代码仓库与Jetson Nano/Broadcom Switch的硬件及连接拓朴之后,本节将简单介绍如何在X86的Linux主机环境下,进行Intel LibMCTP的交叉编译,最后把编译的库文件供给ScrutinyLibTest应用软件引用,放进Jetson Nano的开发板与Broadcom PCIe Switch进行I2C的MCTP通信.
Makefile 显示的使用情况:
编译产物: libmctp_smbus.a (静态库,cross-compiled for aarch64)
链接方式: -Wl,--whole-archive libmctp_smbus.a
集成: BMRC_mctp_unified.so(Shim Driver)


5. 博通 (Broadcom) Switch 中的MCTP支持介绍: ScrutinyLibOOB
定位与功能
ScrutinyLib 是 Broadcom 提供的闭源 OOB(Out-of-Band)管理库,让 BMC 通过 MCTP/I2C 通道管理 PEX89xxx Atlas PCIe Switch,无需通过 PCIe in-band 路径。

与Shim Driver的接口(MCTP 7E Driver Interface)
ScrutinyLib通过dlopen(“BMRC_mctp_unified.so”) 动态加载Shim Driver,再用dlsym取得以下 5个函式指标:
mctp7ERegister(初始化)
mctp7ESendRecvMsg(传送命令)
mctp7EOobParamsGet(取得能力)
mctp7EUnregister / mctp7EOobParamsSet(注销/配置参数)
6. Putting all together: 整合应用演示
![]() |
在经过前面的介绍,我们了解在Server System里面,如果我们想要利用BMC对系统内部的Broadcom Switch进行带外通信管理.我们可以引用Broadcom的ScrutinyLib, ShimDriver和Intel MCTPLibrary等源码整合,然后进行应用程序开发.最终我们可以利用我们写出来的程序在BMC内对Broadcom PCIe Switch进行MCTP通信管理该设备.上图是完整的软件Software Block Diagram可以让我们更清楚的理解管理界面GUI-Broadcom ScrutinyLib-ShimDriver-MCTPLib-I2C Driver之间的调用关系.
下面提供了实际上在Nvidia Jetson Nano上面运行ScrutinyTest管理工具的截图做为参考.
[菜单]:

[显示Switch拓朴]:

本文中介绍了MCTP的基本概念, Nvidia Jetson Nano的I2C连接拓朴, Intel MCTPLibrary与Broadcomd提供的ScrutinyLib (用于BMC与Switch间MCTP库文件)等代码基本概念与实际运行的截图演示.希望有兴趣的读者能够经由本文介绍后能容易理解/上手BMC中的MCTP通信编程原理与实务.如有课程或代码开发需求,也欢迎留言交流.
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐







所有评论(0)