功能简介
支持标准和非标准的电子标签管理,标准电子标签直接由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字段定义
Area | field |
---|---|
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 电子标签对外呈现形式
> 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 用于非标电子标签更新资源协作接口属性
参数 | 签名 | 描述 |
---|---|---|
prop1 | as | 属性名称列表 |
prop2 | as | 属性值列表 |
SetProductAssetTag 设置产品资产标签
参数 | 签名 | 描述 |
---|---|---|
prop1 | y | FruId |
prop2 | s | 资产标签 |
SetSysProductName 设置系统产品名称
参数 | 签名 | 描述 |
---|---|---|
prop1 | y | FruId |
prop2 | s | 产品名 |
- bmc.kepler.FrudataService.IpmiFrudata
Write 写电子标签
参数 | 签名 | 描述 |
---|---|---|
prop1 | y | FruId |
prop2 | s | 属性名 |
prop3 | s | 属性值 |
Read 读电子标签
参数 | 签名 | 描述 |
---|---|---|
prop1 | y | FruId |
prop2 | s | 属性名 |
- 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) |
FruControlCapabilities | FRU控制能力 |
GetFruInventory | 获取FRU库存区域信息 |
GetFruidFromUid | 通过UID获取组件的Fruid |
ReadFruData | 读取FRU数据 |
GetComponentPositionInfo | 获取部件位置信息 |
GetDevicePresence | 获取设备信息(在位状态) |
GetDeviceHealth | 获取设备信息(健康状态) |
GetDeviceBoardID | 获取设备信息(BoardID) |
GetDeviceLocation | 获取设备信息(物理位置) |
GetDeviceFunction | 获取设备信息(功能组或逻辑分组) |
GetDeviceName | 获取设备信息(名称) |
GetDeviceGroupID | 获取设备信息(设备所属组ID) |
GetDeviceFruid | 获取设备信息(Device ID) |
GetDeviceUniqueId | 获取设备信息(组件唯一标识) |
GetGeneralDeviceManufacture | 获取设备信息(设备厂商名称) |
配置介绍
"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
}
注意事项:
- fruid配置为1-63会自动分配fruid,默认可以配为1
- fruid为0保留给挂耳,配置64-255不会进行fruid分配
- Fru里面的FruDataId需要关联到对应的Frudata对象
- 天池规范的电子标签配置为TianChi,非天池的规范的标准电子标签配置为EepromV2
- 非标电子标签StorageType可以配为MCU等,不做限制