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

【openbmc添加fru信息通过ipmitool命令读取】【后续】openbmc 的 fru 配置文章目录一 service1 1 路径 1 2 文件内容 1 3of name to eeprom sh1 4 基于 service 的配置参数文件二 fru 数据模板 yaml 文件 2 1 路径 2 2 内容 2 3yaml 文件数据解析三 配置 3 1yaml 文件加载一 service 将 eeprom 数据读取到 bus 上的 service1 1 路径 xxx project meta phosphor recipes phosphor ipmi phosphor ipmi fru ob

openbmc的fru配置



一、service

将eeprom数据读取到bus上的service

1-1 路径

xxx-project\meta-phosphor\recipes-phosphor\ipmi\phosphor-ipmi-fru\obmc-read-eeprom@.service

1-2 文件内容

[Unit] Description=Read %I EEPROM Wants=mapper-wait@-xyz-openbmc_project-inventory.service After=mapper-wait@-xyz-openbmc_project-inventory.service StartLimitBurst=10 [Service] Restart=on-failure Type=oneshot EnvironmentFile={ 
     envfiledir}/obmc/eeproms/%I ExecStartPre={ 
     bindir}/of-name-to-eeprom.sh { 
     envfiledir}/obmc/eeproms/%I ExecStart=/usr/bin/env phosphor-read-eeprom --eeprom $SYSFS_PATH --fruid $FRUID SyslogIdentifier=phosphor-read-eeprom [Install] WantedBy=multi-user.target 

1-3 of-name-to-eeprom.sh

#!/bin/bash -eu [ -n "${OF_NAME+1}" ] || exit 0 path="$(grep -xl "$OF_NAME" /sys/bus/i2c/devices/*/of_node/name)" eeprom="${path%/of_node/name}/eeprom" sed -i "s,^SYSFS_PATH=.*$,SYSFS_PATH=$eeprom," "$1" 

这里结合service文件来看,是根据OF_NAME从i2c下的”of_node/name”参数grep出绝对路径,对SYSFS_PATH重新做了赋值,防止SYSFS_PATH参数错误导致service失败,所以要么保证OF_NAME对,要么保证SYSFS_PATH对,并且不用OF_NAME,用了OF_NAME,SYSFS_PATH参数值就不重要了

1-4 基于service的配置参数文件

SYSFS_PATH=/sys/bus/i2c/devices/8-0050/eeprom FRUID=50 OF_NAME=eeprom 

参数前面有说明

二、fru数据模板-yaml文件

2-1 路径

meta-ibm\recipes-phosphor\configuration\acx22-yaml-config\mihawk\acx22-ipmi-fru-bmc.yaml

2-2 内容

fru.yaml文件数据介绍

75: /system/chassis/motherboard/powersupply0: entityID: 10 entityInstance: 1 interfaces: xyz.openbmc_project.Inventory.Item: PrettyName: IPMIFruProperty: Board Name IPMIFruSection: Board PartNumber: IPMIFruProperty: Part Number IPMIFruSection: Board SerialNumber: IPMIFruProperty: Serial Number IPMIFruSection: Board Model: IPMIFruProperty: Model Number IPMIFruSection: Board Manufacturer: IPMIFruProperty: Manufacturer IPMIFruSection: Board BuildDate: IPMIFruProperty: Mfg Date IPMIFruSection: Board 76: /system/chassis/motherboard/powersupply1: entityID: 10 entityInstance: 2 interfaces: xyz.openbmc_project.Inventory.Item: PrettyName: IPMIFruProperty: Board Name IPMIFruSection: Board PartNumber: IPMIFruProperty: Part Number IPMIFruSection: Board SerialNumber: IPMIFruProperty: Serial Number IPMIFruSection: Board Model: IPMIFruProperty: Model Number IPMIFruSection: Board Manufacturer: IPMIFruProperty: Manufacturer IPMIFruSection: Board BuildDate: IPMIFruProperty: Mfg Date IPMIFruSection: Board 

2-3 yaml文件数据解析

● entityID #指定传感器entityID,具体见ipmi协议2.0中的43.14小结节 ● entityInstance #示例标号,相同entityID的sensor,要有不同的entityInstance编号进行区分,每个类型从0开始,具体见ipmi协议2.0中的39.1小结节 ● sensorType #传感器类型,具体见ipmi协议2.042.2小节 ● path #传感器Dbus对象 ● sensorReadingType #传感器读类型具体见ipmi协议2.042.1小节 ● sensorNamePattern #可以给定字符串(最大长度为16),或者使用如下方式从path或者属性中获取 ○ nameLeaf:从path中解析(最后一个“/”后面的为传感器名)得到,一般用这个。 ○ nameParentLeaf:从path中解析,后两个为传感器名,例如“path:/xyz/openbmc_project/sensors/temperature/temp1”,怎传感器名为“temperature_temp1” ○ nameProperty:传感器名即interfaces的属性 ○ interfaces: ○ xyz.openbmc_project.Control.Boot.RebootAttempts: ○ AttemptsLeft: ○ Offsets:0xFF: ○ type: uint32_t ○ 则传感器名为“AttemptsLeft” ● multiplierM #ipmi协议中的算子,一般multiplierM*255 要稍大于可能的最大值,以保证精度 ● offsetB #偏移量 ● bExp #offsetB的指数,一般给0 ● unit #传感器单位,配置文件做了转换为字符串,具体见ipmi协议2.042.17小节 ● scale #缩放因子,是10的指数,一般温度电压等都是-3,即读取值是实际值的1000倍 ● rExp #和scale一样的指数,一般给0 1、scale是用于ipmid程序将从传感器中得到的值转化成实际值,一般hwmonz子系统中,传感器驱动创建的文件中存放的都是将实际值放大1000倍的值,因此sclae=-3 。如果自己写的驱动或者创建的文件中存放的值是实际值,则scale=0。 如hwmon子系统创建的文件 /sys/class/hwmon/hwmon1/temp1_input中的值是52000,则scal=-3。 如自己创建的文件/var/hwmon/hwmon0/temp1_input中值是52,则scale=02、ipmi协议中一般阈值型传感器是有计算公式的(参见ipmi协议2.036.3小节),在ipmid程序中需要通过计算得到公式的中x值,并返回给发起者(netfn=04,cmd=0x21)。 3、配置文件中配置这些值会转化到ipmi协议数据中(multiplierM一个字节,offsetB一个字节,bExp(低4bits)和rExp(高4bits)一个字节,具体参见ipmi协议第43小节),命令发起者得到数据后,利用公式计算得到实际值,计算值的范围是[ offsetB * 10 ^bExp, multiplierM255 + offsetB * 10 ^bExp] * 10 ^rExp。在不考虑rExp和offsetB的情况下(rExp=bExp=0),计算值y的最大范围是[0,65025](此时 multiplierM=255)。 4、一般除了温度外,offsetB=0,rExp=-3,即计算值y的最大范围是[0, 65.25],为了保证精度,我们可以调小multiplierM值,尽量使最大值稍大于阈值中设置的最大值。快速计算:multiplierM=(最大阈值 - offsetB10 ^bExp) /255向上取整数。 例如例如12V的电压传感器,假设阈值中设置最大上限值是14V,则可以设置 multiplierM = 14000/25555(向上取整),即配置文件中内容如下: ■ multiplierM=55 ■ offsetB=0 ■ bExp=0 ■ scale=-3 ■ rExp=-3 5、 一般温度传感器multiplierM=1,offsetB=-127,scale =-3, bExp =0,rExp=0,计算的y值范围是[-127,128]基本满足正常使用情况。 一般温度下限可能到不了-127,我们可以调整offsetB为-100,这样取值范围是[-100, 155]。 如果想提高精度,可以給rExp=-2, bExp=2,multiplierM=100,offsetB=-100,这样取值范围是[-100,155],并且可以显示两位小数。 6、ipmi计算得到的值和ipmid程序获取到的值是有细微的差距,例如bmcweb页面上显示的阈值是配置文件设置的值(一般在/etc/default/obmc/hwmon下),但是ipmitool显示是略小于设置的阈值。这是因为在计算得到 multiplierM和x都是8bits的整数,为了包含最大的阈值,进行了稍微的放大(向上取整),这样ipmid在计算时以及ipmitool计算时会存在除法除不尽时候的舍去误差,因此为了尽量缩小误差,尽量取最小满足条件的 multiplierM值( multiplierM越大,误差也越大(当然一些值和rExp也有关系))。 ● hasScale #是否缩放,取值“true”或者“false” ● mutability # Mutability::Read和 Mutability::Write,用于设置是否可读写 ● serviceInterface #传感器DBus服务接口,不同的 ○ org.freedesktop.DBus.Properties #属性类,set设置属性,get获取属性 ○ xyz.openbmc_project.Inventory.Manager #管理类,get获取,notify通知 ● readingType #获取dbus接口值或者属性等的方法,这里是指定的是调用的函数名 ○ readingType和 serviceInterface接口有关,get(netfn cmd 0x4 0x2D)方法有四种,set(netfn cmd 0x4 0x30)方法有6种,对于接口时xyz.openbmc_project.Inventory.Manager的只有assertion一种,对于yaml文件一定不要写错了,这几种对应的是函数。 ○ readingAssertion #传感器有效状态作为值类型 ○ readingData #读取值常用的温度电压传感器 ○ assertion #bool有效型 ○ eventdata # 紧set方法有 ○ eventdata1 # 紧set方法才有 ○ eventdata2 #属性值是字符串 ○ 更多请参看源码下的sensordatahandler.hpp和sensordatahandler.cpp文件 ● interfaces #获取传感器信息Dbus的接口 ○ xyz.openbmc_project.Sensor.Value #获取传感器值接口 ○ xyz.openbmc_project.State.Boot.Progress #启动进度 ○ xyz.openbmc_project.State.OperatingSystem.Status #系统启动方式 ○ xyz.openbmc_project.Inventory.Manager #资产类,比如内存条、CPU核等 ○ 。。。。更多见DBus接口(cmd:busctrl tree) ● Value #Dbus对应接口的的属性,常见的温度电压等传感器都是value ○ Present #在位 ○ Functional # ○ Prereqs # ● Offsets #指定数据偏移字节,不同传感器类型偏移不一样,具体见ipmi协议2.042.2小节 ● type #vlaue的类型,一般传感器值是int64_t或者double,离散量是bool或者string ● skipOn #指定跳过跟新类型,一般离散量不在位不能更新。 ○ xyz.openbmc_project.Inventory.Item: Present: Offsets: 0x07: assert: true deassert: false skipOn: deassert type: bool 

三、配置

3-1 yaml文件加载

TODO

3-4 属性配置文件xxx-fru-properties.yaml文件

/system/chassis/motherboard/bmc: xyz.openbmc_project.Inventory.Decorator.Cacheable: Cached: 'true' xyz.openbmc_project.Inventory.Decorator.Replaceable: Field Replaceable: 'true' xyz.openbmc_project.Inventory.Item: Present: 'true' 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/232057.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • tabnine激活码(注册激活)

    (tabnine激活码)好多小伙伴总是说激活码老是失效,太麻烦,关注/收藏全栈君太难教程,2021永久激活的方法等着你。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.htmlS32PGH0SQB-eyJsaWNlbnNlSWQi…

    2022年3月26日
    44
  • tree 命令安装

    tree 命令安装一、用yum安装tree命令yuminstall-ytree二、下载包安装下载安装包yuminstall-ywgetwgethttp://mama.indstate.edu/users/ice/tree/src/tree-1.8.0.tgztar-zxvftree-1.8.0.tgz-C/opt/softcdtree-1.8.0/yuminstall-ymakemakeinstall测试使用,命令:treemake:gcc:命令未找到make:**

    2022年7月25日
    16
  • 短短数月 两代“矿工”遭遇冰与火的洗礼「建议收藏」

    短短数月 两代“矿工”遭遇冰与火的洗礼「建议收藏」“比特币又跳水了。”  “那还有回暖的机会吗?”  最近这段时间,相信因为数字货币价格集体跳水而感到恐慌的,不止是炒币的投机客,还有大量“矿工”。  在过去一年多时间里,区块链逐渐变为人人热议的亲民话题,“挖矿”也成为很多人热议的火爆职业。甚至有金融界、互联网公司金领不惜放弃高薪,转型成为比特币“矿工”。  在过去的大半年时间里,比特币等数字货币也经历过几次不同程度的震荡。在遭遇价格上的大起大落之…

    2022年5月6日
    37
  • c语言反三角函数有哪些,反三角函数公式有哪些?

    01反三角函数公式包括1、arcsin(-x)=-arcsinx。2、arccos(-x)=π-arccosx。3、arctan(-x)=-arctanx。4、arccot(-x)=π-arccotx。5、arcsinx+arccosx=π/2=arctanx+arccotx。6、sin(arcsinx)=x=cos(arccosx)=tan(arctanx)=cot(arccotx)。7、当x∈…

    2022年4月8日
    183
  • PyCharm for Anaconda

    PyCharm for AnacondaPyCharmforAnaconda新版本的特点智能Python帮助 PyCharm提供了智能代码完成、代码检查、动态错误突出显示和快速修复,以及自动化的代码重构和丰富的导航功能。 Web开发框架 PyCharm为现代web开发框架(如Django、Flask、Google应用程序引擎、Pyramid和web2py)提供了强大的特定于框架的支持。 科学工具(新版本的)…

    2022年8月29日
    7
  • 长尾分布数据_厚尾分布

    长尾分布数据_厚尾分布长尾分布数据11.什么是长尾分布数据长尾分布数据是一种偏态分布,是指几个类别(亦叫头类)包含大量的样本,而大多数类别(亦叫尾类)只有非常少量的样本。类似这样的数据集会使得深度学习网络在头部类中表现良好,在尾部类中效率不高,整体的识别精度显著下降。2.解决办法大多数研究者通过不平衡学习策略来解决长尾识别问题,主要分为两类:数据级方法和算法级方法。数据级方法数据水平的策略包括尾部类过采样,头部类欠采样,以及其他新的抽样方法。所以解决手段主要着力于如何对数据进行抽样。这种方法存在的问题是,过采

    2025年8月8日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号