frudata
更新时间:2024/12/19
在Gitcode上查看源码

功能简介

支持标准和非标准的电子标签管理,标准电子标签直接由frudata组件将存储在eeprom和file里面的数据按域和字段解析出来,非标准电子标签由多样化硬件APP负责数据读写和解析,将数据发送给frudata,并且由frudata组件统一对外提供电子标签的读写接口。

关键特性

1 frudata资源协作接口设计

Fru类描述的是现场可替换单元(fru)的相关信息,例如主板, Raid卡, Riser卡, 硬盘背板等,一个fru只有一个Fru对象; Frudata类描述的是Fru里面的eeprom存储的信息,一个fru最多有一个Frudata对象; Frus主要在fru对象分发过来后,给sensor发送fruid信号来管理sdr数据; Component类表示部件管理信息,如内存、硬盘、风扇等,一个fru里可以有多个部件,配置告警也会配一个Component对象,供event管理; Components供WEB页面查询系统事件,根据部件类型进行筛选,需要从资源协作接口获取当前存在的所有对象的部件类型。

2 frudata业务流程

3 frudata业务代码分层设计

四层模型

APP层:只负责自发现对象注册和RPC、IPMI接口注册,业务进行下沉,单一职责; 对象服务层:承载对象的统一创建、代理,分离变化; 对象层:实现对象的差异化接口,高内聚,开闭原则; 数据层:使用统一的数据结构,存储不同格式的电子标签,向稳定方向依赖。

使用代理模式来屏蔽app层的调用接口差异

4 Area和field字段定义

Areafield
FRU_AREA_CHASSISINFO = 1 FRU_CHASSIS_TYPE = 0
FRU_CHASSIS_PART_NUMBER = 1
FRU_CHASSIS_SERIAL_NUMBER = 2
FRU_CHASSIS_EXTRA = 3
FRU_AREA_BOARDINFO = 2 FRU_BOARD_MFGDATE = 0
FRU_BOARD_MANUFACTURER = 1
FRU_BOARD_PRODUCTNAME = 2
FRU_BOARD_SERIALNUMBER = 3
FRU_BOARD_PARTNUMBER = 4
FRU_BOARD_FRUFILEID = 5
FRU_BOARD_EXTRA = 6
FRU_AREA_PRODUCT = 3 FRU_PRODUCT_MANUFACTURER = 0
FRU_PRODUCT_NAME = 1
FRU_PRODUCT_PARTNUMBER = 2
FRU_PRODUCT_VERSION = 3
FRU_PRODUCT_SERIALNUMBER = 4
FRU_PRODUCT_ASSETTAG = 5
FRU_PRODUCT_FRUFILEID = 6
FRU_PRODUCT_EXTRA = 7
FRU_AREA_SYS = 6 FRU_SYSTEM_MANUFACTURE = 0
FRU_SYSTEM_PRODUCTNAME = 1
FRU_SYSTEM_VERSION = 2
FRU_SYSTEM_SERIALNUMBER = 3

5 电子标签对外呈现形式

shell
> busctl --user introspect bmc.kepler.frudata /bmc/kepler/Systems/1/FruDatas/FruData_Fru0_010104

NAME                                TYPE      SIGNATURE   RESULT/VALUE                             FLAGS
bmc.kepler.FrudataService.Frudata   interface -           -                                        -
.SetProductAssetTag                 method    a{ss}ys     -                                        -
.SetSysProductName                  method    a{ss}ys     -                                        -
.Update                             method    a{ss}asas   -                                        -
bmc.kepler.Object.Properties        interface -           -                                        -
.GetAllWithContext                  method    a{ss}s      a{sv}                                    -
.GetOptions                         method    a{ss}ss     a{ss}                                    -
.GetPropertiesByNames               method    a{ss}sas    a{sv}a{sv}                               -
.GetPropertiesByOptions             method    a{ss}sa{ss} as                                       -
.GetWithContext                     method    a{ss}ss     v                                        -
.SetWithContext                     method    a{ss}ssv    -                                        -
.ClassName                          property  s           "FruData"                                emits-change
.ObjectIdentifier                   property  (ysss)      1 "1" "1" "010104"                       emits-change
.ObjectName                         property  s           "FruData_Fru0_010104"                    emits-change
bmc.kepler.Systems.FruData.Board    interface -           -                                        -
.BoardCustomInfo                    property  s           "5=96;1=44;2=1;3=1;4=4;6=96;7=96;8=9;9=… -
.BoardFRUFileID                     property  s           "5.07.00.01"                             -
.BoardManufacturer                  property  s           "openUBMC"                                 emits-change
.BoardPartNumber                    property  s           "0"                                      emits-change
.BoardProductName                   property  s           "1"                                      emits-change
.BoardSerialNumber                  property  s           "Bar"                                    emits-change
.MfgDate                            property  s           "2023/11/29 Wed 11:43:00"                emits-change
bmc.kepler.Systems.FruData.Chassis  interface -           -                                        -
.ChassisCustomInfo                  property  s           "1=11"                                   -
.ChassisPartNumber                  property  s           "3"                                      emits-change
.ChassisSerialNumber                property  s           "4"                                      -
.ChassisType                        property  s           "Defachable"                             -
bmc.kepler.Systems.FruData.Overview interface -           -                                        -
.FruId                              property  y           0                                        emits-change
.FruName                            property  s           "BMC"                                    -
.FruType                            property  s           "0"                                      -
bmc.kepler.Systems.FruData.Product  interface -           -                                        -
.AssetTag                           property  s           "000"                                    emits-change
.ManufacturerName                   property  s           "8"                                      emits-change
.ProductCustomInfo                  property  s           "2=22"                                   -
.ProductFRUFileID                   property  s           "5.07.00.01"                             -
.ProductName                        property  s           "5"                                      emits-change
.ProductPartNumber                  property  s           "12345678901234567890123456789012345678… emits-change
.ProductSerialNumber                property  s           "12345678901234567890123456789012345678… emits-change
.ProductVersion                     property  s           "9"                                      -
bmc.kepler.Systems.FruData.System   interface -           -                                        -
.SystemManufacturer                 property  s           "22"                                     -
.SystemProductName                  property  s           "23"                                     emits-change
.SystemSerialNumber                 property  s           "24"                                     emits-change
.SystemVersion                      property  s           "37"                                     -
org.freedesktop.DBus.Introspectable interface -           -                                        -
.Introspect                         method    -           s                                        -
org.freedesktop.DBus.ObjectManager  interface -           -                                        -
.GetManagedObjects                  method    -           a{oa{sa{sv}}}                            -
org.freedesktop.DBus.Peer           interface -           -                                        -
.GetMachineId                       method    -           s                                        -
.Ping                               method    -           -                                        -
org.freedesktop.DBus.Properties     interface -           -                                        -
.Get                                method    ss          v                                        -
.GetAll                             method    s           a{sv}                                    -
.Set                                method    ssv         -                                        -
.PropertiesChanged                  signal    sa{sv}as    -                                        -

Board Info Area :该区域提供单板上FRU存储设备的序列号、部件号和其它信息; Chassis Info Area :该区域通常用来保存有关系统机框的序列号、部件号和其它信息; Overview Info Area :该区域描述fru类型和fruid; Product Info Area :该区域提供产品的序列号、部件号、制造商和其它信息; Extended Info Area :该区域的信息都是键值对,也就是“key=value”的形式; System Info Area :该区域只在挂耳(fruid为0)可以查询,描述整机配置信息。

对外接口

资源协作接口

  • bmc.kepler.FrudataService.Frudata

Update 用于非标电子标签更新资源协作接口属性

参数签名描述
prop1as属性名称列表
prop2as属性值列表

SetProductAssetTag 设置产品资产标签

参数签名描述
prop1yFruId
prop2s资产标签

SetSysProductName 设置系统产品名称

参数签名描述
prop1yFruId
prop2s产品名
  • bmc.kepler.FrudataService.IpmiFrudata

Write 写电子标签

参数签名描述
prop1yFruId
prop2s属性名
prop3s属性值

Read 读电子标签

参数签名描述
prop1yFruId
prop2s属性名
  • bmc.kepler.Systems.Components

GetComponentTypes 获取当前所有的部件类型

IPMI接口

  • 具体参数参考本组件配置文件ipmi.json
方法描述
ClearElabelData清除电子标签
WriteElabelData设置电子标签
ReadElabelData查询电子标签
UpdateElabelData更新电子标签
GetPicmgProperties获取PICMG属性
GetAddressInfo获取地址信息
ComputePowerProperties计算功率属性
GetFruidInfo获取FRU信息
IpmiWriteFrudata写入FRU数据
GetComponentInfo获取组件信息
IpmiDftCustom设置定制化配置(Customize Flag)
IpmiGetDftCustom查询DFT全局参数(Customize Flag)
FruControlCapabilitiesFRU控制能力
GetFruInventory获取FRU库存区域信息
GetFruidFromUid通过UID获取组件的Fruid
ReadFruData读取FRU数据
GetComponentPositionInfo获取部件位置信息
GetDevicePresence获取设备信息(在位状态)
GetDeviceHealth获取设备信息(健康状态)
GetDeviceBoardID获取设备信息(BoardID)
GetDeviceLocation获取设备信息(物理位置)
GetDeviceFunction获取设备信息(功能组或逻辑分组)
GetDeviceName获取设备信息(名称)
GetDeviceGroupID获取设备信息(设备所属组ID)
GetDeviceFruid获取设备信息(Device ID)
GetDeviceUniqueId获取设备信息(组件唯一标识)
GetGeneralDeviceManufacture获取设备信息(设备厂商名称)

配置介绍

json
"Eeprom_EXU": {
  "OffsetWidth": 2,
  "AddrWidth": 1,
  "Address": 174,
  "WriteTmout": 100,
  "ReadTmout": 100,
  "RwBlockSize": 32,
  "WriteInterval": 20,
  "HealthStatus": 0
},
"Accessor_EXUWP": {
  "Chip": "#/Smc_ExpBoardSMC",
  "Size": 1,
  "Offset": 11776,
  "Mask": 255,
  "Type": 0,
  "Value": 0
},
"FruData_Expander": {
  "FruId": 1,
  "FruDev": "#/Eeprom_EXU",              -- 关联eeprom
  "EepromWp": "#/Accessor_EXUWP.Value",  -- 关联写保护寄存器
  "StorageType": "TianChi"               -- 存储介质类型
},
"Fru_Expander": {
  "PcbId": 1,                         -- 需要关联到硬件, 从硬件读取Id
  "PcbVersion": ".A",                 -- PCB版本
  "FruId": 1,
  "FruName": "ExpBoard{Slot}", 
  "PowerState": 1, 
  "Health": 0, 
  "EepStatus": "<=/Eeprom_EXU.HealthStatus", 
  "Type": 50, 
  "FruDataId": "#/FruData_Expander",  -- EEPROM状态, 当此属性关联到Accessor时进行EEPROM的监控
  "ConnectorGroupId": "{GroupId}",    -- 关联Anchor的GroupId
  "BoardId": 65535,                   -- 非天池:组件单板BoardID
  "UniqueId": "00000001010302023922"  -- 天池:组件唯一标识,Vendor + ComponentID
}

注意事项:

  1. fruid配置为1-63会自动分配fruid,默认可以配为1
  2. fruid为0保留给挂耳,配置64-255不会进行fruid分配
  3. Fru里面的FruDataId需要关联到对应的Frudata对象
  4. 天池规范的电子标签配置为TianChi,非天池的规范的标准电子标签配置为EepromV2
  5. 非标电子标签StorageType可以配为MCU等,不做限制