(*如果之后架构有变,这边不会更新)

smbios-mdr

GitHub - openbmc/smbios-mdrhttps://github.com/openbmc/smbios-mdr

MDR(Managed Data Region) 是 OpenBMC中取得SMBIOS Table并解析其内容的一个功能,目前网上(在没有特别帐号权限下)能找到的资料蛮少的,所以这边会尽量用公开资料做个分析 如果还不认识SMBIOS 可以先看之前写的文章

轻松搞懂SMBIOS-CSDN博客https://blog.csdn.net/yeiris/article/details/122775007先体会一下 smbios-mdr 的结果,假如SMBIOS中有两个Processor struct,表示Platform上有两个CPU socket,透过 smbios-mdr 的运作后,最后我们可以从Redfish 的Processor Collection中看到两颗CPU socket

> curl -k -H "X-Auth-Token: $token" -H "Content-Type: application/octet-stream" -X GET https://${bmcip}/redfish/v1/Systems/system/Processors{"@odata.id": "/redfish/v1/Systems/system/Processors","@odata.type": "#ProcessorCollection.ProcessorCollection","Members": [{"@odata.id": "/redfish/v1/Systems/system/Processors/cpu0"},{"@odata.id": "/redfish/v1/Systems/system/Processors/cpu1"}],"Members@odata.count": 2,"Name": "Processor Collection"
}

简单来说,BIOS将smbios table透过一些方式传给BMC后,BMC呼叫dbus method "AgentSynchronizeData" ,smbios-mdr会去将smbios资料expose 到dbus上,供使用者读取和操作

// github.com/openbmc/intel-ipmi-oem/blob/master/src/smbiosmdrv2handler.cpp
ipmi::RspType<> cmd_mdr2_data_done(uint16_t agentId, uint16_t lockHandle)
{// ...sdbusplus::message::message method = bus->new_method_call(service.c_str(), mdrv2Path, mdrv2Interface, "AgentSynchronizeData");// ...
}// github.com/openbmc/smbios-mdr/blob/master/src/smbios-ipmi-blobs/handler.cpp
bool syncSmbiosData()
{// ...sdbusplus::message::message method =bus.new_method_call(mdrV2Service, phosphor::smbios::mdrV2Path,mdrV2Interface, "AgentSynchronizeData");// ...
}

MDR(Managed Data Region)

MDR 是一种通用机制,用于管理固件实体之间的数据传输并在 BMC 中维护服务器数据。 目前,该数据由 BCT/SMBIOS 数据组成。 但将来可能会添加其他数据实体。

  • CMM:Chassis Management Module
  • BMC:Baseboard Management Controller
  • BIOS:Basic Input/Output System

CMM通常是放在PDB上面的,会连接1~N的BMC,负责机箱/机壳管理,可以参考英特尔机架规模设计(RSD,Rack Scale Design),当然,并不是所有伺服器都有CMM的存在,MDR的设计中是有包含CMM的,但是没有也没关系,等下会着重在BMC和BIOS的沟通

SMBIOS的传输

从BIOS传输SMBIOS给BMC目前有四个方式,分别是

  1. MDRv1 intel-ipmi-oem/smbioshandler.cpp · GitHub
  2. MDRv2 (Pull)   intel-ipmi-oem/smbiosmdrv2handler.cpp · GitHub
  3. MDRv2 (Push)   intel-ipmi-oem/smbiosmdrv2handler.cpp · GitHub
  4. IPMI blobs smbios-mdr/handler.cpp · GitHub

这四种方法最后都是将SMBIOS放到/var/lib/smbios底下,呼叫smbios-mdr去做解析并将资料放到dbus上,其中MDRV1 是BIOS透过指令将SMBIOS 慢慢送过去给BMC,MDR V2 则是BIOS将SMBIOS放到VGA share memory,BMC再去读出来,只是会根据主动发送指令的是BMC还是BIOS分成Pull和Push两种,最后IPMI Blobs的方式就是将SMBIOS视为一个Blobs传送给BMC

CPU 资讯检查

smbios-mdr 中还有另一个服务“xyz.openbmc_project.cpuinfo.service”。它的作用是根据SMBIOS中的Processor Type和Entity manager的config文件,通过PIROM访问CPU,确认CPU ID合法 ,如果没有问题,才将CPU信息曝光到dbus上

底下是Entity Manager Config的范例,Bus/Address记得改成主板上CPU的对应资讯

# Entity Manager config / baseboard.json
{"Address": "0x30","Bus": 0,"CpuID": 1,"Name": "CPU 1","PiromI2cAddress": "0x50","PiromI2cBus": 12,"PresenceGpio": [{"Name": "CPU1_PRESENCE","Polarity": "Low"}],
},

[OpenBMC] 简单解析 smbios-mdr相关推荐

  1. 插件化框架DL源码的简单解析

    目前行业内已经有较多的插件化实现方案.本文主要对DL(DynamicLoadApk)这一个开源的侵入式插件化方案进行简单分析.因为Service组件插件化的实现逻辑和Activity大体相似,所以在这 ...

  2. java 解析xls 文件_java简单解析xls文件的方法示例【读取和写入】

    本文实例讲述了java简单解析xls文件的方法.分享给大家供大家参考,具体如下: 读取: import java.io.*; import jxl.*; import jxl.write.*; imp ...

  3. [ 转载 ] Java基础10--关于Object类下所有方法的简单解析

    关于Object类下所有方法的简单解析 类Object是类层次结构的根类,是每一个类的父类,所有的对象包括数组,String,Integer等包装类,所以了解Object是很有必要的,话不多说,我们直 ...

  4. java在线打开xml文件_java实现简单解析XML文件功能示例

    本文实例讲述了java实现简单解析XML文件功能.分享给大家供大家参考,具体如下: package demo; import java.io.File; import java.io.IOExcept ...

  5. java:AXIS调用webService接口,返回String类型xml,并用dom4j简单解析xml

    一.使用axis调用webService接口,返回String类型xml 1.导入axis依赖 2.直接贴代码 /*** 调用webservice接口的方法,并返回String类型的xml* @par ...

  6. HTML-HTML协议简单解析

    HTML-HTML协议简单解析 在浏览器访问一个地址: 127.0.0.1:7890/html/html.htm //代表访问当地服务器路径下的/html的html.htm文件 客户端发送的请求命令是 ...

  7. C++生成LNK文件及LNK文件简单解析

    C++生成LNK文件及LNK文件简单解析 话不多说,直接上代码吧. 生成快捷方式代码: int CreateLnk(const wchar_t* TARGET, const wchar_t* LNKF ...

  8. 大数据培训课程数据清洗案例实操-简单解析版

    数据清洗(ETL) 在运行核心业务MapReduce程序之前,往往要先对数据进行清洗,清理掉不符合用户要求的数据.清理的过程往往只需要运行Mapper程序,不需要运行Reduce程序.大数据培训 数据 ...

  9. 邻近算法(KNN)原理简单解析

    邻近算法(KNN)原理简单解析 一.什么是邻近算法 1.1简介 1.2核心思想 1.3 算法流程 1.4 优缺点 二.实例演示KNN算法 一.什么是邻近算法 1.1简介 邻近算法,或者说K最近邻(KN ...

最新文章

  1. html5 酒店入住插件,jQuery酒店类入住日期时间范围选择器插件
  2. 编写高质量代码改善C#程序的157个建议——建议133:用camelCasing命名私有字段和局部变量...
  3. linux中常用的头文件
  4. Python出现quot; SyntaxError: Non-ASCII character '\xe6' 或'\xd6' in filequot;错误解决方法
  5. ubuntu和ok6410开发板之间架设nfs
  6. matlab2018求多元函数驻点,机械优化设计课后习题答案.doc
  7. CCNA考试题库中英文翻译版及答案15
  8. 韩顺平php ecshop,ecshop教程
  9. 为什么按序发射只有RAW冲突?
  10. 27.html的定位(position)和偏移量(offset)
  11. 在线答疑系统源码java_java+jsp+servlet+mysql在线教学答疑系统
  12. 微型计算机第六章课后答案,微型计算机原理及其接口技术第六章部分习题.doc...
  13. 一个对小学生的随机生成的四则运算试题
  14. java根据word模板生成pdf
  15. 软件测试人员需要懂这些网络知识点
  16. 每个程序员都应该知道的 CPU 知识:NUMA
  17. js string转两位小数_js保留两位小数总结
  18. MYSQL学习心得 总结
  19. webpack5打包字体资源
  20. JS文本输入框禁止输入内容

热门文章

  1. 【GAMES101】作业6(提高)含BVH与SAH加速查找算法(SVH)和快速排序算法
  2. current sink/source, current mirror and current reference
  3. screen 使用方法
  4. Can‘t resolve ‘redux‘ in
  5. PHP对接网络游戏防沉迷实名认证系统
  6. 用友T6显示连接服务器出错,用友T6软件“无法连接到服务器”,出现提示:“运行时错误‘48’:文件未找到:Client.Dll”...
  7. vue 路由的三种模式
  8. TWEEN动画、JQUERY、ES6 — 1、定时器和TWEEN动画
  9. 广告业务系统 之 敏捷交付 —— “基于 Docker 容器同机部署”
  10. 190407 逆向-西湖论剑杯