[OpenBMC] 简单解析 smbios-mdr
(*如果之后架构有变,这边不会更新)
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目前有四个方式,分别是
- MDRv1 intel-ipmi-oem/smbioshandler.cpp · GitHub
- MDRv2 (Pull) intel-ipmi-oem/smbiosmdrv2handler.cpp · GitHub
- MDRv2 (Push) intel-ipmi-oem/smbiosmdrv2handler.cpp · GitHub
- 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相关推荐
- 插件化框架DL源码的简单解析
目前行业内已经有较多的插件化实现方案.本文主要对DL(DynamicLoadApk)这一个开源的侵入式插件化方案进行简单分析.因为Service组件插件化的实现逻辑和Activity大体相似,所以在这 ...
- java 解析xls 文件_java简单解析xls文件的方法示例【读取和写入】
本文实例讲述了java简单解析xls文件的方法.分享给大家供大家参考,具体如下: 读取: import java.io.*; import jxl.*; import jxl.write.*; imp ...
- [ 转载 ] Java基础10--关于Object类下所有方法的简单解析
关于Object类下所有方法的简单解析 类Object是类层次结构的根类,是每一个类的父类,所有的对象包括数组,String,Integer等包装类,所以了解Object是很有必要的,话不多说,我们直 ...
- java在线打开xml文件_java实现简单解析XML文件功能示例
本文实例讲述了java实现简单解析XML文件功能.分享给大家供大家参考,具体如下: package demo; import java.io.File; import java.io.IOExcept ...
- java:AXIS调用webService接口,返回String类型xml,并用dom4j简单解析xml
一.使用axis调用webService接口,返回String类型xml 1.导入axis依赖 2.直接贴代码 /*** 调用webservice接口的方法,并返回String类型的xml* @par ...
- HTML-HTML协议简单解析
HTML-HTML协议简单解析 在浏览器访问一个地址: 127.0.0.1:7890/html/html.htm //代表访问当地服务器路径下的/html的html.htm文件 客户端发送的请求命令是 ...
- C++生成LNK文件及LNK文件简单解析
C++生成LNK文件及LNK文件简单解析 话不多说,直接上代码吧. 生成快捷方式代码: int CreateLnk(const wchar_t* TARGET, const wchar_t* LNKF ...
- 大数据培训课程数据清洗案例实操-简单解析版
数据清洗(ETL) 在运行核心业务MapReduce程序之前,往往要先对数据进行清洗,清理掉不符合用户要求的数据.清理的过程往往只需要运行Mapper程序,不需要运行Reduce程序.大数据培训 数据 ...
- 邻近算法(KNN)原理简单解析
邻近算法(KNN)原理简单解析 一.什么是邻近算法 1.1简介 1.2核心思想 1.3 算法流程 1.4 优缺点 二.实例演示KNN算法 一.什么是邻近算法 1.1简介 邻近算法,或者说K最近邻(KN ...
最新文章
- html5 酒店入住插件,jQuery酒店类入住日期时间范围选择器插件
- 编写高质量代码改善C#程序的157个建议——建议133:用camelCasing命名私有字段和局部变量...
- linux中常用的头文件
- Python出现quot; SyntaxError: Non-ASCII character '\xe6' 或'\xd6' in filequot;错误解决方法
- ubuntu和ok6410开发板之间架设nfs
- matlab2018求多元函数驻点,机械优化设计课后习题答案.doc
- CCNA考试题库中英文翻译版及答案15
- 韩顺平php ecshop,ecshop教程
- 为什么按序发射只有RAW冲突?
- 27.html的定位(position)和偏移量(offset)
- 在线答疑系统源码java_java+jsp+servlet+mysql在线教学答疑系统
- 微型计算机第六章课后答案,微型计算机原理及其接口技术第六章部分习题.doc...
- 一个对小学生的随机生成的四则运算试题
- java根据word模板生成pdf
- 软件测试人员需要懂这些网络知识点
- 每个程序员都应该知道的 CPU 知识:NUMA
- js string转两位小数_js保留两位小数总结
- MYSQL学习心得 总结
- webpack5打包字体资源
- JS文本输入框禁止输入内容
热门文章
- 【GAMES101】作业6(提高)含BVH与SAH加速查找算法(SVH)和快速排序算法
- current sink/source, current mirror and current reference
- screen 使用方法
- Can‘t resolve ‘redux‘ in
- PHP对接网络游戏防沉迷实名认证系统
- 用友T6显示连接服务器出错,用友T6软件“无法连接到服务器”,出现提示:“运行时错误‘48’:文件未找到:Client.Dll”...
- vue 路由的三种模式
- TWEEN动画、JQUERY、ES6 — 1、定时器和TWEEN动画
- 广告业务系统 之 敏捷交付 —— “基于 Docker 容器同机部署”
- 190407 逆向-西湖论剑杯