前面说过如何添加sensor传感器信息(I2C、ADC、FAN)到ipmi,本文内容说明如何将fru信息添加到ipmi中,下面将详细说明。

1 ipmi配置文件转换成cpp

在软件包下有一个scripts文件夹,这里边是python脚本、模板、示例yaml文件以及使用说明,本内容介绍fru的yaml文件。在configure阶段,通过autoconf工具,解析configure.ac以及Makefile.am生成Makefile文件,在编译阶段执行fru_gen.py的python脚本,根据fru_config.yaml文件生成fru-read-gen.cpp文件。

2 配置ipmi配置文件

如果要指定自己fru的yaml文件,有两种方法:
方法一:
通过安装覆盖的方式。参考meta-ibm/meta-romulus。
1 、在your-layer下创建recipes-phosphor/configuration文件夹,创建xxx-yaml-config文件夹和xxx-yaml-config.bb文件,xxx-yaml-config文件夹中存放yaml文件,xxx-yaml-config.bb文件中SRC_URI指定该yaml文件。xxx-yaml-config.bb文件内容如下:

SUMMARY = "YAML configuration for xxx"
PR = "r1"
LICENSE = "Apache-2.0"
LIC_FILES_CHKSUM = "file://${COREBASE}/meta/files/common-licenses/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10"inherit allarchSRC_URI = " file://xxx-ipmi-fru.yaml "S = "${WORKDIR}"do_install() {install -m 0644 -D xxx-ipmi-fru.yaml \${D}${datadir}/${BPN}/ipmi-fru-read.yaml
}
FILES_${PN}-dev = "  ${datadir}/${BPN}/ipmi-fru-read.yaml  "

2、在your-layer/recipes-phosphor/ipmi/phosphor-ipmi-host_%.bbappend文件中添加如下内容:

DEPENDS_append = " xxx-yaml-config"FRU_YAML_GEN=${STAGING_DIR_HOST}${datadir}/xxx-yaml-config/ipmi-fru-read.yaml \ "


方法二:
在your-layer/conf/machine/machine.conf中指定配置文件。可参考meta-quanta/meta-q71l
1、machine.conf添加内容如下

PREFERRED_PROVIDER_virtual/phosphor-ipmi-fru-merge-config = "ipmi-fru-merge-config-native"

2、在your-layer/recipes-phosphor/ipmi/下创建xxx-ipmi-fru-map-native文件夹和xxx-ipmi-fru-map-native.bb文件,xxx-ipmi-fru-map-native文件夹下放yaml文件,xxx-ipmi-fru-map-native.bb文件内容如下

SUMMARY = " IPMI to DBus Sensor mapping."
PR = "r1"
LICENSE = "Apache-2.0"
LIC_FILES_CHKSUM = "file://${COREBASE}/meta/files/common-licenses/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10"inherit native
inherit phosphor-ipmi-hostPROVIDES += "virtual/phosphor-ipmi-fru-merge-config"SRC_URI += "file://xxx.yaml"S = "${WORKDIR}"do_install_append() {DEST=${D}${config_datadir}install -d ${DEST}install config.yaml ${DEST}/fru_config.yaml
}


方法一要注意“FRU_YAML_GEN”变量的值,一定要是自己配置文件中ymal文件安装的路径,至于文件名可以自己定义,只要“FRU_YAML_GEN”指定实际名称即可。
方法二的安装位置和文件名都是固定的(D{D}D{config_datadir}/fru_config.yaml),这是因为在phospho-ipmi-host.bb文件中给“FRU_YAML_GEN”指定了该位置,我们把文件安装到固定的位置即可(在phospho-ipmi-hostd/configure.ac中有判断,如果路径下文件不存在使用script下的yaml文件)。
这里fru的yaml文件其实也给phosphor-fru-read这个应用软件使用(后续将说明)。
这两种方法选取一种即可,如果想灵活配置可以两种方法组合:按照方法二进行分类文件夹,按照方法一在phosphor-ipmi-host_%.bbappend中指定“FRU_YAML_GEN”的路径,具体可以自行尝试。
如果同soc有多个不同的平台,最好两种方法不要混用,不然会报错,报错只需要执行“bitbake phosphor-ipmi-host -c cleansstate”命令从新编译即可。
ob下还提供了mrw的方法:通过脚本将mxl文件转换成yaml文件,针对的是比较老的版本,有兴趣可以自行尝试。

3 yaml文件

ipmi-fru-read.yaml文件内容

1:/system/chassis/motherboard/cpu0:entityID: 3entityInstance: 1interfaces:xyz.openbmc_project.Inventory.Decorator.Asset:BuildDate:IPMIFruProperty: Mfg DateIPMIFruSection: BoardManufacturer:IPMIFruProperty: ManufacturerIPMIFruSection: BoardPartNumber:IPMIFruProperty: Part NumberIPMIFruSection: BoardSerialNumber:IPMIFruProperty: Serial NumberIPMIFruSection: Boardxyz.openbmc_project.Inventory.Decorator.Revision:Version:IPMIFruProperty: Custom Field 2IPMIFruSection: BoardIPMIFruValueDelimiter: 58xyz.openbmc_project.Inventory.Item:PrettyName:IPMIFruProperty: NameIPMIFruSection: Board

entityID #指定传感器entityID,具体见ipmi协议2.0中的43.14小结节
entityInstance #示例标号,不同类型sensor,要有不同的entityInstance编号,每个类型从0开始,具体见ipmi协议2.0中的39.1小结节
interfaces #获取传感器信息Dbus的接口,有三种类型
xyz.openbmc_project.Inventory.Decorator.Asset #资产信息

Model
BuildDate
Manufacturer
PartNumber
SerialNumber

xyz.openbmc_project.Inventory.Decorator.Revision #版本信息

Version #属性

xyz.openbmc_project.Inventory.Item #库存信息

PrettyName #属性

xyz.openbmc_project.Inventory.Decorator.AssetTag #资产标记

AssetTag

xyz.openbmc_project.Inventory.Decorator.VendorInformation #供应商信息

UUID

xyz.openbmc_project.Inventory.Item.NetworkInterface #网络信息

MACAddress

fruData属性:

IPMIFruProperty #资产信息名称
IPMIFruSection #信息分类,一共分三类Chassis、 board、Product
IPMIFruValueDelimiter # 偏移量

IPMIFruSection

board #主板信息类
Product #厂商信息类
Chassis #底板类

对不同的IPMIFruSection部分,IPMIFruProperty 资产属性也不同,具体如下:
Chassis类型:

Type #Chassis类型 Internal Lboard Product Chassis MultiRecord
Part Number #零件号
Serial Number #序列号

board类型:

Mfg Date #生产日期
Manufacturer #生产者
Name #board名称
Part Number #零件号
Serial Number #序列号

FRU File ID #

Product类型:

Manufacturer #生产者
Name #厂商名称
Model Number
Serial Number #序列号
Asset Tag #资产标记
Version #版本
FRU File ID #FRU ID

公用:

Custom Field 1
Custom Field 2
Custom Field 3
Custom Field 4
Custom Field 5
Custom Field 6
Custom Field 7
Custom Field 8

注:
1、只有IPMIFruProperty属性为“Custom Field x”时,一般需要给定 IPMIFruValueDelimiter的值,即偏移量,用于得到Custom属性值,其他非“Custom Field x”的属性不需要给,即偏移为0。
2、每个interfaces接口对应不同的属性(Asset、Revisio、Item),不同的属性下对应不同的fruData属性( IPMIFruSection、IPMIFruProperty、IPMIFruValueDelimiter),fruData下对应不同的信息解析(读写)方式。
3、属性和IPMIFruProperty是有对应关系的,具体如下:
Model:对应Type或者其他
BuildDate:对应Mfg Date
Manufacturer:对应Manufacturer
PartNumber:对应Part Number
SerialNumber:对应Serial Number
Version:对应Version或者FRU File ID
PrettyName:对应Product Name或者Name
AssetTag:对应AssetTag
这里是一般的用法,有些可能会交叉使用,或者复用,具体可以参考其他机型下的fru的yaml文件。
4、这里给出的interfaces接口的的属性是openbmc中通用常见的,也可以指定系统中的其他DBus接口和属性,并且有对应的应用程序来提供接口的操作方法(因为yaml文件还给phosphor-ipmi-fru这个软件使用)。(其他接口(如网络)可以参考:meta-ampere/meta-jade/recipes-phosphor/configuration/mtjade-yaml-config/mtjade-ipmi-fru.yaml)

bmc-ipmi-fru.yaml文件内容见文章最后。

4 编译及结果

没有给定sensor.yaml文件时,使用的是默认的,结果如下

修改后

这里只是展示ipmi获取的ietm结果,没有fru结果,一个是因为是因为没有配置读物fru信息的eeprom的信息,一个是因为是romulus-bmc的虚拟机摸你的外部eeprom中没有存fru信息。(fru读取和写入配置请参考:)

bmc-ipmi-fru.yaml文件内容:

1:/system/chassis/motherboard/cpu0:entityID: 3entityInstance: 1interfaces:xyz.openbmc_project.Inventory.Decorator.Asset:BuildDate:IPMIFruProperty: Mfg DateIPMIFruSection: BoardManufacturer:IPMIFruProperty: ManufacturerIPMIFruSection: BoardPartNumber:IPMIFruProperty: Part NumberIPMIFruSection: BoardSerialNumber:IPMIFruProperty: Serial NumberIPMIFruSection: Boardxyz.openbmc_project.Inventory.Decorator.Revision:Version:IPMIFruProperty: Custom Field 2IPMIFruSection: BoardIPMIFruValueDelimiter: 58xyz.openbmc_project.Inventory.Item:PrettyName:IPMIFruProperty: NameIPMIFruSection: Board
2:/system/chassis/motherboard/cpu1:entityID: 3entityInstance: 2interfaces:xyz.openbmc_project.Inventory.Decorator.Asset:BuildDate:IPMIFruProperty: Mfg DateIPMIFruSection: BoardManufacturer:IPMIFruProperty: ManufacturerIPMIFruSection: BoardPartNumber:IPMIFruProperty: Part NumberIPMIFruSection: BoardSerialNumber:IPMIFruProperty: Serial NumberIPMIFruSection: Boardxyz.openbmc_project.Inventory.Decorator.Revision:Version:IPMIFruProperty: Custom Field 2IPMIFruSection: BoardIPMIFruValueDelimiter: 58xyz.openbmc_project.Inventory.Item:PrettyName:IPMIFruProperty: NameIPMIFruSection: BoardValue: false
3:/system/chassis/motherboard/dimm0:entityID: 32entityInstance: 1interfaces:xyz.openbmc_project.Inventory.Decorator.Asset:BuildDate:IPMIFruProperty: Mfg DateIPMIFruSection: ProductManufacturer:IPMIFruProperty: ManufacturerIPMIFruSection: ProductModel:IPMIFruProperty: Model NumberIPMIFruSection: ProductPartNumber:IPMIFruProperty: Part NumberIPMIFruSection: ProductSerialNumber:IPMIFruProperty: Serial NumberIPMIFruSection: Productxyz.openbmc_project.Inventory.Decorator.Revision:Version:IPMIFruProperty: Versionxyz.openbmc_project.Inventory.Item:PrettyName:IPMIFruProperty: NameIPMIFruSection: Product
4:/system/chassis/motherboard/dimm1:entityID: 32entityInstance: 1interfaces:xyz.openbmc_project.Inventory.Decorator.Asset:BuildDate:IPMIFruProperty: Mfg DateIPMIFruSection: ProductManufacturer:IPMIFruProperty: ManufacturerIPMIFruSection: ProductModel:IPMIFruProperty: Model NumberIPMIFruSection: ProductPartNumber:IPMIFruProperty: Part NumberIPMIFruSection: ProductSerialNumber:IPMIFruProperty: Serial NumberIPMIFruSection: Productxyz.openbmc_project.Inventory.Decorator.Revision:Version:IPMIFruProperty: Versionxyz.openbmc_project.Inventory.Item:PrettyName:IPMIFruProperty: NameIPMIFruSection: Product
5:/system:entityID: 7entityInstance: 1interfaces:xyz.openbmc_project.Inventory.Decorator.Asset:Model:IPMIFruProperty: Part NumberIPMIFruSection: ChassisSerialNumber:IPMIFruProperty: Serial NumberIPMIFruSection: Chassis/system/chassis/motherboard:entityID: 7entityInstance: 1interfaces:xyz.openbmc_project.Inventory.Decorator.Asset:BuildDate:IPMIFruProperty: Mfg DateIPMIFruSection: BoardManufacturer:IPMIFruProperty: ManufacturerIPMIFruSection: BoardPartNumber:IPMIFruProperty: Part NumberIPMIFruSection: BoardSerialNumber:IPMIFruProperty: Serial NumberIPMIFruSection: Boardxyz.openbmc_project.Inventory.Item:PrettyName:IPMIFruProperty: NameIPMIFruSection: Board
50:/system/chassis/motherboard/fan0:entityID: 29entityInstance: 1interfaces:xyz.openbmc_project.Inventory.Item:PrettyName:IPMIFruProperty: Product NameIPMIFruSection: Product
51:/system/chassis/motherboard/fan1:entityID: 29entityInstance: 2interfaces:xyz.openbmc_project.Inventory.Item:PrettyName:IPMIFruProperty: Product NameIPMIFruSection: Product
52:/system/chassis/motherboard/fan2:entityID: 29entityInstance: 3interfaces:xyz.openbmc_project.Inventory.Item:PrettyName:IPMIFruProperty: Product NameIPMIFruSection: Product

openbmc开发23:添加fru信息到ipmi相关推荐

  1. 【openbmc添加fru信息通过ipmitool命令读取】

    生不带来,死带不走系列 文章目录 前言 一.下载软件包 二.添加fru信息到ipmi 1.ipmi配置文件转cpp 2.配置ipmi配置文件 3.fru配置文件说明 3-1 ipmi目录下创建phos ...

  2. openbmc开发28:fru配置和测试

    在openbmc开发23:添加fru信息到ipmi中说明了如何将fru信息添加到ipmi中,本文将讲述如何生成fru以及fru信息获取展示以及修改等. 1 yaml配置文件转换成cpp 在软件包下有一 ...

  3. openbmc开发22:添加sensor信息到ipmi

    前面说过如何添加sensor传感器信息(I2C.ADC.FAN),这些信息添加后是可以展示到web页面,而不能通过ipmitool工具展示出来,那么怎么才能把这些传感器信息添加到ipmi中呢?别着急, ...

  4. 【openbmc添加fru信息通过ipmitool命令读取】【后续】

    openbmc的fru配置 文章目录 一.service 1-1 路径 1-2 文件内容 1-3 of-name-to-eeprom.sh 1-4 基于service的配置参数文件 二.fru数据模板 ...

  5. (1)python pyinstaller打包exe添加版本信息(2)python获取exe版本信息(3)pyqt5开发exe添加检查版本更新功能

    笔者总结不容易点个关注吧    一键三联哦!       感谢您! python pyinstaller打包exe添加版本信息 打包并添加版本信息 注意!这里有个坑 如果第二次要修改版权信息 要将fi ...

  6. php添加学生信息,PHP开发 学生管理系统之添加信息PHP页面

    接收从add.php页面传过来的数据,将数据保存到数据库中 提示:本教程是将添加,修改,删除,的PHP代码放在同一个PHP页面,我们用了switch,case语句,下面的代码是不完整的action.p ...

  7. 【OpenBMC 系列】1.OpenBMC 开发环境搭建

    目标: 安装Linux 系统,推荐使用Ubuntu18+,作为开发环境. 安装Qemu 作为bmc运行的虚拟机. 受众:熟悉 Linux 和 BMC 的程序员 先决条件:当前的 Linux.Mac 或 ...

  8. u-boot-2012.04.01移植到TQ2440(七):添加分区信息并启动jffs2文件系统

    一.添加分区信息并启动jffs2文件系统 烧写之前的内核看输出分区信息 TQ2440 # tftp 32000000uImage dm9000 i/o: 0x20000000, id:0x90000a ...

  9. 使用GraceNote Web API开发Mac查询音乐信息应用

    好久没写博客了,最近各种忙,大忙特忙,今晚难得有空,写个博客总结下最近完成的一个任务:使用GraceNote的Web API来开发一个查询音乐信息的应用,其实功能和前面的那些GraceNote SDK ...

最新文章

  1. [转] JSON转换
  2. 一个不错的机器视觉库 SimpleCV: a kinder, gentler machine vision library
  3. only SOY MILK IS NOT ENOUGH FOR BREAKFAST
  4. 使用html记笔记,开始学习HTML,并记下笔记
  5. 第七节:Trigger(SimpleTrigger、CronTrigger)哑火(MisFire)策略 :
  6. 阻塞队列,来写生产者消费者,生产一个消费一个
  7. RSA 非对称加密原理
  8. jQuery给页面弹出层添加半透明背景
  9. PXE安装报错:Cant' write to /dev/sda ,because it is opened read-only
  10. Openbravo怎么给工具栏添加一个按钮
  11. 私募股权和VC有什么区别
  12. 强劲的网络。http://www.chartboost.com/
  13. GitHub账户注册流程及常见问题解析
  14. 服务器cadence比虚拟机慢,Cadence版本选择浅见
  15. 阿米洛键盘使用手册2021-02-22
  16. 《大数据实时处理》学生学期总结
  17. 博通语法纠错技术方案入选ACL2022,论文详细解读
  18. linux tcp fin wait1,关于FIN_WAIT1
  19. 只有“云”知道:手把手教你如何打造汽车版“奇葩说”
  20. 汽车百科系列之(七): 你喜欢什么样的车身颜色

热门文章

  1. MT41K512M16VRP-107 AIT:P内存颗粒D9ZWM
  2. Spring Boot 项目的jsp页面引用css、js、img、fonts的问题解决
  3. 视觉处理_视觉处理单元vpus
  4. 暂停中---小强软件测试疯狂讲义-性能和自动化【自我理解和摘抄总结1】
  5. Area(几何:向量积:有向面积)
  6. 三星sgh-e258手机GRPS设置
  7. 太原美术馆举办生肖漫画展迎己亥猪年
  8. Linux nginx 安装 部署运行前端项目
  9. 农行金融大脑再升级,百度云助力智能金融落地开花
  10. python最新版本教程python练手项目