openbmc开发23:添加fru信息到ipmi
前面说过如何添加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相关推荐
- 【openbmc添加fru信息通过ipmitool命令读取】
生不带来,死带不走系列 文章目录 前言 一.下载软件包 二.添加fru信息到ipmi 1.ipmi配置文件转cpp 2.配置ipmi配置文件 3.fru配置文件说明 3-1 ipmi目录下创建phos ...
- openbmc开发28:fru配置和测试
在openbmc开发23:添加fru信息到ipmi中说明了如何将fru信息添加到ipmi中,本文将讲述如何生成fru以及fru信息获取展示以及修改等. 1 yaml配置文件转换成cpp 在软件包下有一 ...
- openbmc开发22:添加sensor信息到ipmi
前面说过如何添加sensor传感器信息(I2C.ADC.FAN),这些信息添加后是可以展示到web页面,而不能通过ipmitool工具展示出来,那么怎么才能把这些传感器信息添加到ipmi中呢?别着急, ...
- 【openbmc添加fru信息通过ipmitool命令读取】【后续】
openbmc的fru配置 文章目录 一.service 1-1 路径 1-2 文件内容 1-3 of-name-to-eeprom.sh 1-4 基于service的配置参数文件 二.fru数据模板 ...
- (1)python pyinstaller打包exe添加版本信息(2)python获取exe版本信息(3)pyqt5开发exe添加检查版本更新功能
笔者总结不容易点个关注吧 一键三联哦! 感谢您! python pyinstaller打包exe添加版本信息 打包并添加版本信息 注意!这里有个坑 如果第二次要修改版权信息 要将fi ...
- php添加学生信息,PHP开发 学生管理系统之添加信息PHP页面
接收从add.php页面传过来的数据,将数据保存到数据库中 提示:本教程是将添加,修改,删除,的PHP代码放在同一个PHP页面,我们用了switch,case语句,下面的代码是不完整的action.p ...
- 【OpenBMC 系列】1.OpenBMC 开发环境搭建
目标: 安装Linux 系统,推荐使用Ubuntu18+,作为开发环境. 安装Qemu 作为bmc运行的虚拟机. 受众:熟悉 Linux 和 BMC 的程序员 先决条件:当前的 Linux.Mac 或 ...
- u-boot-2012.04.01移植到TQ2440(七):添加分区信息并启动jffs2文件系统
一.添加分区信息并启动jffs2文件系统 烧写之前的内核看输出分区信息 TQ2440 # tftp 32000000uImage dm9000 i/o: 0x20000000, id:0x90000a ...
- 使用GraceNote Web API开发Mac查询音乐信息应用
好久没写博客了,最近各种忙,大忙特忙,今晚难得有空,写个博客总结下最近完成的一个任务:使用GraceNote的Web API来开发一个查询音乐信息的应用,其实功能和前面的那些GraceNote SDK ...
最新文章
- [转] JSON转换
- 一个不错的机器视觉库 SimpleCV: a kinder, gentler machine vision library
- only SOY MILK IS NOT ENOUGH FOR BREAKFAST
- 使用html记笔记,开始学习HTML,并记下笔记
- 第七节:Trigger(SimpleTrigger、CronTrigger)哑火(MisFire)策略 :
- 阻塞队列,来写生产者消费者,生产一个消费一个
- RSA 非对称加密原理
- jQuery给页面弹出层添加半透明背景
- PXE安装报错:Cant' write to /dev/sda ,because it is opened read-only
- Openbravo怎么给工具栏添加一个按钮
- 私募股权和VC有什么区别
- 强劲的网络。http://www.chartboost.com/
- GitHub账户注册流程及常见问题解析
- 服务器cadence比虚拟机慢,Cadence版本选择浅见
- 阿米洛键盘使用手册2021-02-22
- 《大数据实时处理》学生学期总结
- 博通语法纠错技术方案入选ACL2022,论文详细解读
- linux tcp fin wait1,关于FIN_WAIT1
- 只有“云”知道:手把手教你如何打造汽车版“奇葩说”
- 汽车百科系列之(七): 你喜欢什么样的车身颜色