openbmc 支持mctp over pcie(三)(支持作为endpoint)

文章目录

    • 1.说明
    • 2.驱动支持
      • [2.1 `dts`配置](#2.1 dts配置)
      • [2.2 驱动模块开发的设置操作(模块形式加载)](#2.2 驱动模块开发的设置操作(模块形式加载))
      • [2.3 调试](#2.3 调试)
        • [2.3.1 应用层调试命令](#2.3.1 应用层调试命令)
        • [2.3.2 `kernel`层](#2.3.2 kernel层)
        • [2.3.3 测试基本`mctp`功能](#2.3.3 测试基本mctp功能)
        • [2.3.4 测试基本`pldm`功能](#2.3.4 测试基本pldm功能)

1.说明

本节说明如何支持mctp over pcie endpoint的开发。基于平台为intel BHS,cpu作为bus owner

开发包包含:

注意:只是作为开发调试理解mctp kernel方案框架,且在没有机器作为bus owner条件做的一个实验性工作。

2.驱动支持

为了调试方便,将内核程序改成模块形式开发,然后调试的时候主动加载卸载。

需要注意,调试该方案,需要停止任何使用/dev/aspeed-mctp0接口的访问的其他应用层方案,因为其他方案均不会有效运行。

2.1 dts配置

dts配置注意添加:

c 复制代码
aliases {
	...
	mctp0 = &mctp;
}

其余按照sdk建议来做即可。

2.2 驱动模块开发的设置操作(模块形式加载)

  • 1.设置内核支持模块编译的开发方式

之后,开启几个模块:

如此,编译后,可以看到如下代码结构:

注意一点:

  • 文件linux-aspeed/drivers/soc/aspeed/aspeed-mctp.c中的#ifdef CONFIG_MCTP_TRANSPORT_PCIE_VDM失效,需要自定义让其使能。

系统启动后,安装ko文件,之后可以使用如下命令:

c 复制代码
# insmod /tmp/mctp-pcie-vdm.ko
# insmod /tmp/aspeed-mctp.ko

加载完成之后,可以看到设备节点出现。

那么,如何支持将BMC作为endpoint呢?

原始的代码逻辑是不支持作为endpoint的。这个是已知点。 因此支持作为endpoint,可以按照如下思路入手:

  • 首先将BMC addr(eid)设置为255,使其能接收广播数据。
  • cpu设置好BMCeid之后,将eid 255删除。将新的eid作为bmclocal eid
  • BMC使用新的local eid,与cpu bus owner通信,获取routing table数据。

目前,最基本的一个代码框架的调试,可以参考代码仓库: bmc as endpoint

2.3 调试

2.3.1 应用层调试命令

调试最重要的几个命令:

  • 1.安装驱动程序
c 复制代码
# insmod /tmp/mctp-pcie-vdm.ko
# insmod /tmp/aspeed-mctp.ko
  • 2.启动mctpd
c 复制代码
# /tmp/mctpd
  • 3.设置相关参数
c 复制代码
# /tmp/mctp link set mctppcie0 up
# /tmp/mctp addr add 255 dev mctppcie0
2.3.2 kernel

kernel层需要过滤掉相关eid=255的设置。

2.3.3 测试基本mctp功能
复制代码
~# /tmp/mctp route
eid min 9 max 9 net 1 dev mctppci0 mtu 64
eid min 10 max 10 net 1 dev mctppci0 mtu 0
eid min 29 max 29 net 1 dev mctppci0 mtu 64
# /tmp/mctp addr
eid 10 net 1 dev mctppci0
~# /tmp/mctp link
dev lo index 1 address 00:00:00:00:00:00 net 1 mtu 65536 up
dev mctppci0 index 6 address 00:00:00 net 1 mtu 64 up
~# /tmp/mctp neigh
eid 9 net 1 dev mctppci0 lladdr 12:8b:00
eid 29 net 1 dev mctppci0 lladdr 12:18:00

另外,使用工具mctp-client可以查看是否可以获取到单独的endpoint信息:

c 复制代码
# /tmp/mctp-client net 1 eid 9 type control data 0 6
00 06 00 FF 00 10 00 10 E2



2.3.4 测试基本pldm功能

https://github.com/openbmc/pldm添加到工程中,然后结合: https://github.com/openbmc/pldm/blob/3124782739408b77dbf7df07833336ee63dcc239/pldmtool/README.md,其中,需要参考提交:去掉来自entity配置.

然后执行:

c 复制代码
# pldmtool raw -d 0x80 0x00 0x04 0x00 0x00 -m 9
pldmtool: Tx: 80 00 04 00 00
pldmtool: Rx: 00 00 04 00 21 00 00 00 00 00 00 00
# pldmtool base GetPLDMTypes -m 9
{
    "CompletionCode": "SUCCESS",
    "PLDMTypes": [
        {
            "PLDM Type": "base",
            "PLDM Type Code": 0
        }
    ]
}
相关推荐
0xDevNull14 小时前
Linux切换JDK版本详细教程
linux
进击的丸子15 小时前
虹软人脸服务器版SDK(Linux/ARM Pro)多线程调用及性能优化
linux·数据库·后端
茶杯梦轩15 小时前
从零起步学习RabbitMQ || 第二章:RabbitMQ 深入理解概念 Producer、Consumer、Exchange、Queue 与企业实战案例
服务器·后端·消息队列
Johny_Zhao2 天前
OpenClaw安装部署教程
linux·人工智能·ai·云计算·系统运维·openclaw
YuMiao3 天前
gstatic连接问题导致Google Gemini / Studio页面乱码或图标缺失问题
服务器·网络协议
chlk1234 天前
Linux文件权限完全图解:读懂 ls -l 和 chmod 755 背后的秘密
linux·操作系统
舒一笑4 天前
Ubuntu系统安装CodeX出现问题
linux·后端
改一下配置文件4 天前
Ubuntu24.04安装NVIDIA驱动完整指南(含Secure Boot解决方案)
linux
深紫色的三北六号4 天前
Linux 服务器磁盘扩容与目录迁移:rsync + bind mount 实现服务无感迁移(无需修改配置)
linux·扩容·服务迁移
SudosuBash4 天前
[CS:APP 3e] 关于对 第 12 章 读/写者的一点思考和题解 (作业 12.19,12.20,12.21)
linux·并发·操作系统(os)