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
        }
    ]
}
相关推荐
Jet_582 小时前
Ubuntu 桌面版 Wireshark 抓包权限不足问题解决指南
linux·ubuntu·wireshark
小郭团队2 小时前
1_2_五段式SVPWM (传统算法反正切+DPWMmin)算法理论与 MATLAB 实现详解
开发语言·嵌入式硬件·matlab·dsp开发
wait_luky2 小时前
NFS服务器
linux·服务器·网络
开开心心_Every2 小时前
重复图片智能清理工具:快速查重批量删除
java·服务器·开发语言·前端·学习·edge·powerpoint
菜萝卜子2 小时前
【Linux】PVE系统创建规范的VM模版
linux·运维·服务器
小郭团队2 小时前
1_3_五段式SVPWM (传统算法反正切+DPWMmax)算法理论与 MATLAB 实现详解
开发语言·嵌入式硬件·matlab·dsp开发
小码吃趴菜2 小时前
io复用 select/poll/epoll
linux
2301_772204282 小时前
51单片机——UART
单片机·嵌入式硬件·51单片机
开开心心_Every2 小时前
一键隐藏窗口到系统托盘:支持任意软件摸鱼
服务器·前端·python·学习·edge·django·powerpoint