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

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. 左滑右滑,在VS Code里滑个妹纸给你写喜欢的代码?
  2. Wireshark网卡抓包工具简明教程
  3. 【传智播客】Javaweb程序设计任务教程 黑马程序员 第三章 课后答案
  4. 计算机二级access模考软件_计算机二级考前通关大礼包来啦!各科目模考软件、视频教程,更有往年真题、最新考纲等打包送!...
  5. Linux装c编译器gcc,c编译器进阶之路,linux下的gcc c编译器使用教程
  6. 你是外包,麻烦不要偷吃零食,注意素质...
  7. kali linux虚拟机密码,[Linux]安装kali虚拟机后忘记root密码
  8. 大数据营销技术对企业有什么影响
  9. python程序内存分析_Python中使用MELIAE分析程序内存占用实例
  10. .EXE病毒解决(U盘中文件夹不见,显示原文件夹后缀.exe)
  11. 电路实验---全桥整流电路
  12. 全奖热招 | TUM、HKU、McGill、UTS等8所高校全奖博士招生信息汇总
  13. 如何设置计算机桌面待办事项,Windows电脑桌面云便签怎么设置每天提醒待办事项?...
  14. Java发送QQ邮件的3种形式(commons-email)
  15. Vue3.0实现原生高度可自定义菜单组件vue3-menus
  16. 用虚拟信用卡注册Google Play开发者账号
  17. Axure设置导航栏控制页面切换
  18. 1.7.1 容器类数据-列表
  19. 在这款任天堂游戏里,我发现了一部关卡设计的黄金教案
  20. 【Tableau】解决订阅报表PDF中文显示为乱码(方框)问题

热门文章

  1. shopee售后退款与退货规定
  2. 深入PHP语法(1)
  3. Cannot prepare internal mirrorlist: No URLs in mirrorlist 【已经解决】
  4. 传智健康day05 预约管理-预约设置
  5. 360Replugin插件启动Activity慢导致ANR的问题
  6. java解一元一次方程
  7. Jmeter阶梯式加压的方式
  8. 使用php for循环实现一个阶梯式九九乘法表
  9. 微信内置浏览器清除缓存解决方案(实测有效)
  10. minecraft 局域网联机问题一个可能的解决办法