aspeed2600 openbmc对mctp over pcie的支持分析(支持mctp over pcie)

遍搜全网,竟然关于openbmc mctp over pcie的支持说明情况了无文章,这不是一个艰难的问题,服务器BMC也不是一个超级精尖的产品,想当年分享stm32资料,都是满天飞。可能服务器市场大家对于文章上的分享并无兴趣。

此篇文章只是一个最基本的简单的说明文章,弥补一下openbmc资源匮乏吧。另外,本片文章只是一个简单的开篇文章,有错漏,有知识不全面,请尽管评论。

注意: 本章涉及的代码可以查看代码仓库:https://gitee.com/wit_yuan/yuan_mctpd/tree/yuan_modified_mctpd

1.官方活跃的mctp支持情况

官方活跃的2个仓库有:https://github.com/CodeConstruct/mctphttps://github.com/openbmc/libmctp,这一套下来还需要kernel的支持, 代码的提交可以参考如下链接:
https://lore.kernel.org/netdev/[email protected]/
简单来讲,可以参考内核这几个文件:

build/ast2600-default/workspace/sources/linux-aspeed/net/mctp/af_mctp.c
build/ast2600-default/workspace/sources/linux-aspeed/net/mctp/device.c
build/ast2600-default/workspace/sources/linux-aspeed/net/mctp/neigh.c
build/ast2600-default/workspace/sources/linux-aspeed/net/mctp/route.c
build/ast2600-default/workspace/sources/linux-aspeed/net/socket.c

这几个文件是核心的整个mctp架构代码。

如下几个文件是驱动代码,对接到硬件上:

build/ast2600-default/workspace/sources/linux-aspeed/drivers/net/mctp/mctp-i2c.c
build/ast2600-default/workspace/sources/linux-aspeed/drivers/net/mctp/mctp-i3c.c
build/ast2600-default/workspace/sources/linux-aspeed/drivers/net/mctp/mctp-serial.c

可以看到,这里面没有一个直接的针对mctp-pcie.c文件,粗浅看,这个架构是不支持mctp over pcie的。

补充一点,文件:build/ast2600-default/workspace/sources/linux-aspeed/drivers/soc/aspeed/aspeed-mctp.c是内核的mctp over pcie驱动文件,但是说了与不说一样,因为架构上没支持(差一个驱动程序)。

简单看一下文件:build/ast2600-default/workspace/sources/linux-aspeed/drivers/net/mctp/mctp-i2c.c中的mctp_i2c_add_netdev()函数:

static int mctp_i2c_add_netdev(struct mctp_i2c_client *mcli,
			       struct i2c_adapter *adap)
---> struct net_device *ndev = NULL;
---> ndev = alloc_netdev(sizeof(*midev), namebuf, NET_NAME_ENUM, mctp_i2c_net_setup);
---> rc = mctp_register_netdev(ndev, &mctp_i2c_mctp_ops);

可以反推,目前的架构是不支持mctp over pcie的。当前的架构情况是kernel mctp + lib + dbus服务组成。

2.intel-mctp的支持情况

留意: intel已经对这一块不再维护了。

可以在intelopenbmc仓库里面,找到链接:

mctpd仓库代码,基本上看到是支持mctp over pcie的并且BMC是支持作为endpoint的。这符合我的需求。

我的需求如下:

1.bios作为bus owner,负责分配eid
2.bmc作为endpoint,访问其他pcie设备

2.1 libmctp分析

libmctp的代码仓库如下:
https://github.com/Intel-BMC/libmctp

对于mctp over pcie的支持,可查看文件:

build/ast2600-default/workspace/sources/libmctp-intel/libmctp.h
build/ast2600-default/workspace/sources/libmctp-intel/astpcie.c

库的功能实现用的是.c文件,实现基本的ioctl(),对于C++来说不好和kernel交互的代码。这里是实现就没什么可说的。

2.2.intel-bmcmctpd的实现

mctpd的代码仓库如下:
https://github.com/Intel-BMC/pmci/tree/master/mctpd

这一块的作用是作为一个dbus service,供其他client调用接口。代码结构比较清晰。

注意,这里面有一个yaml的文件需要导入,作为serverclient等的支持的头文件。

文件可以参考一个patch: https://github.com/Intel-BMC/openbmc/blob/ac27a5095790a2d49a44d7c46440e375a8f84812/meta-openbmc-mods/meta-common/recipes-phosphor/dbus/phosphor-dbus-interfaces/0032-update-meson-build-for-MCTP-interfaces.patch#L33,具体需要修改:
在这里插入图片描述
与:
在这里插入图片描述

2.3 导入intel bmc mctp over pcie的实现

注意:这里导入只是一个基本的功能测试mctp over pcie,不是实际功能开发。

参考git仓库上的.bb文件,资源路径:
https://github.com/Intel-BMC/openbmc/tree/1-release/meta-openbmc-mods/meta-common/recipes-phosphor/pmci.

在目录: meta-aspeed-sdk/recipes-phosphor/mctpd/中导入https://github.com/Intel-BMC/openbmc/blob/1-release/meta-openbmc-mods/meta-common/recipes-phosphor/pmci/mctpd.bb文件。

修改mctpd.bb文件名,改为:mctpd_1.0.bb,内容如:

SUMMARY = "MCTP Daemon"
DESCRIPTION = "Implementation of MCTP (DTMF DSP0236)"

LICENSE = "CLOSED"
SRC_URI = "file://mctpd.tar.gz"

S = "${WORKDIR}"
PV = "1.0+git${SRCPV}"

OECMAKE_SOURCEPATH = "${S}"

inherit cmake systemd

FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:"

DEPENDS += " \
    libmctp-intel \
    systemd \
    sdbusplus \
    phosphor-logging \
    boost \
    i2c-tools \
    cli11 \
    nlohmann-json \
    gtest \
    phosphor-dbus-interfaces \
    udev \
    "


PACKAGECONFIG[systemd] = ",,systemd,libsystemd"
SYSTEMD_AUTO_ENABLE:${
   PN} = "enable"


do_install:append(){
   
    install -d ${
   D}/${
   systemd_system_unitdir}
    install -d ${
   D}/${
   bindir}
    install -d ${
   D}/${
   datadir}/mctp/

    install -m 755 ${
   WORKDIR}/${
   PN}-${
   PV}/mctpd ${
   D}/${
   bindir}
    install -<
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wit_yuan

专注模块功能分析与架构

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值