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