本文主要从新手的角度出发,描述如何基于 openUBMC 配置一个传感器。传感器作为一种硬件,归属于南向管理模块,配置内容均遵循 CSR 框架和语法规则。
传感器定制流程包括传感器Entity配置、对象配置(门限传感器配置、离散传感器配置)、传感器事件配置、事件过滤配置和事件描述配置,它们的作用和配置要求如下表。下面将对这些配置项进行详细介绍。
配置项 | 是否必须配置 | 配置说明 |
---|---|---|
Entity | 是 | 传感器对应的硬件实体 |
传感器对象:门限 or 离散 | 是 | 资源协作接口的传感器对象 |
传感器事件 | 是 | 仅离散事件需配置该项 |
事件过滤 | 否 | 事件过滤方法 |
事件描述 | 否 | 传感器上报事件的等级及描述 |
Entity 传感器实体配置
传感器实体是后续配置的基础,配置传感器时应当优先定义实体对象。
配置属性
属性名称 | 属性类型 | 属性说明 |
---|---|---|
Id | uint8 | 传感器对应的实体标识 具体参照 Table 43-, Entity ID Codes(P550) |
Instance | uint8 | 传感器对应的实体实例标识,通常以 0x60 开始配置 具体参照 Section 39.1 System- and Device-relatice Entity Instance Values(P492) |
Slot | uint8 | 实体所在的槽位,默认 0xFF 。如果槽位不是默认,则会根据槽位生成唯一的Instance |
Name | string | 实体的名称 |
Presence | uint8 | 实体的在位状态,需要关联对应的在位信号来源 若不存在部件动态拔插,则配置为 1 |
PowerState | uint8 | 实体的上下电状态,需要关联对应的上下电信号来源 若与上下电状态无关,则配置为 1 |
配置关键点
Entity Id
建议按照IPMI规范中的表格进行配置。Entity Instance
保证同一Entity Id
下唯一,即确保 id+instance 能够唯一确定一个实例。
配置示例
下面以风扇为例,展示如何新增一个传感器实体。在南向管理框架中,实体对象是通过Accessor/Scanner对象与硬件交互的,如下所示, Entity_Fan1
是通过同步 Scanner_Fan1_Presence
和 Scanner_PowerGood
的Value值来获得风扇的在位状态和上下电状态的。下列传感器配置在风扇板的CSR文件中,以TaiShan2280为例,风扇板对应的CSR文件为 manifest/temp/build_openUBMC_debug_dev/conan_install/vpd/opt/bmc/sr/14100363_00000001050302035475.sr。
"Entity_FanBoard": {
"Id": 11,
"Instance": 117, // id + instance全局唯一
"Name": "FanBoard${Slot}",
"PowerState": 1, // 上下电状态
"Presence": 1 // 在位状态
},
"Entity_Fan1": {
"Id": 30,
"Instance": 96,
"Name": "Fan1",
"Presence": "<=/Scanner_Fan1_Presence.Value",
"PowerState": "<=/Scanner_PowerGood.Value"
},
"Scanner_Fan1_Presence": { // Scanner配置参考《板卡适配》
"Chip": "#/Smc_FanBoardSMC",
"Offset": 402656001,
"Size": 1,
"Mask": 1,
"Type": 0,
"Period": 2000, // scanner扫描周期
"Debounce": "None", // 防抖配置
"ScanEnabled": "<=/Scanner_PowerGood.Value",
"NominalValue": 1,
"@Default": {
"ScanEnabled": 0
},
"Value": 0
},
"Scanner_PowerGood": {
"Chip": "#/Smc_ExpBoardSMC",
"Offset": 469765888,
"Size": 1,
"Mask": 255,
"Type": 0,
"Period": 100,
"Debounce": "None",
"Value": 0
},
"Smc_FanBoardSMC": { // 根据SMC规范定义
"Address": 96,
"AddrWidth": 1,
"OffsetWidth": 1,
"WriteTmout": 0,
"ReadTmout": 0
},
配置完成后,出包验证资源协作接口上是否成功挂载了Entity_FanBoard
和 Entity_Fan1
。
> busctl --user tree bmc.kepler.sensor
...
├─/bmc/kepler/Systems
│ └─/bmc/kepler/Systems/1
...
├─/bmc/kepler/Systems/1/Entities
│ │ └─/bmc/kepler/Systems/1/Entities/Entity_FanBoard_0101
│ │ └─/bmc/kepler/Systems/1/Entities/Entity_Fan1_0101
...
ThresholdSensor 门限传感器配置
配置属性
属性名称 | 属性类型 | 属性说明 |
---|---|---|
OwnerId | uint8 | 传感器的归属Id BMC - 0x20 |
OwnerLun | uint8 | 传感器的归属Lun owner为系统软件 - 0x00 |
EntityId | uint8 | 传感器对应实体标识,关联传感器对应的 Entity.Id |
EntityInstance | uint8 | 传感器对应实体实例,关联传感器对应的 Entity.Instance |
Initialization | uint8 | 传感器初始化选项,门限传感器 -0x7F |
Capabilities | uint8 | 传感器能力,用于配置包括自动调整模式、迟滞量、阈值访问、事件控制等特性 具体参照 Table 43-,Full Sensor Record -SDR Type 01h(P521) |
SensorType | uint8 | 传感器类型 具体参照 Table 42-, Sensor Type Codes(P505) |
ReadingType | uint8 | 传感器读值类型,门限传感器 -0x01 具体参照 Table 42-, Event/Reading Type Code Ranges(P503) |
SensorName | string | 传感器名称,该字段超过16字符时会截断 |
AssertMask | uint16 | 传感器事件产生掩码,决定是否能产生事件,需要与传感器配置的Threshold保持匹配 |
DeassertMask | uint16 | 传感器事件恢复掩码,决定是否能恢复事件,需要与传感器配置的Threshold保持匹配 |
ReadingMask | uint16 | 传感器读值掩码,决定是否能对外显示门限,需要与传感器配置的Threshold保持匹配 |
Unit | uint8 | 传感器单位 具体参照Table 43-, Sensor Unit Type Codes(P554) |
BaseUnit | uint8 | 传感器基准单位 具体参照Table 43-, Sensor Unit Type Codes(P554) |
ModifierUnit | uint8 | 传感器单位描述符 具体参照Table 43-, Sensor Unit Type Codes(P554) |
Linearization | uint8 | 传感器线性计算方程,计算方式参考门限传感器原始值到读值的转换 |
Analog | uint8 | 传感器模拟特性标志,通常配置为 1 |
NominalReading | uint8 | 传感器名义读值,来源于IPMI规范,在数据格式范围内即可 |
MaximumReading | uint8 | 传感器实际最大读值,与数据格式有关 若为无符号数,配置为 255 ;若为有符号数,配置为 127 |
MinimumReading | uint8 | 传感器实际最小读值,与数据格式有关 若为无符号数,配置为 0 ;若为有符号数,配置为 128 |
Reading | uint8 | 传感器原始读值,引用传感器的数据源(如Scanner)读值同步 当数据源过长时,该属性会选择低八位读取,导致读值错误,解决方法参见配置关键点3 |
ReadingStatus | uint8 | 传感器读值状态,引用传感器的数据源(如Scanner)读值状态同步 若通过表达式自行配置,则严格参照门限传感器读值状态定义及转换进行配置 |
若有特殊需要,可以选配下列字段。
属性名称 | 属性类型 | 属性说明 |
---|---|---|
Linearization | uint8 | 传感器线性计算方程,计算方式参考门限传感器原始值到读值的转换 |
M | uint8 | Linearization参数之一,默认配置为 1 ,传感器M计算表达式低8bit |
MT | uint8 | Linearization参数之一,传感器M计算表达式高2bit和容差 |
B | uint8 | Linearization参数之一,传感器B计算表达式低8bit |
BA | uint8 | Linearization参数之一,传感器B计算表达式高2bit和准确率低6bit |
Accuracy | uint8 | Linearization参数之一,传感器准确率高6bit和传感器方向 |
RBExp | uint8 | Linearization参数之一,传感器R/B计算表达式,各4bit |
NormalMaximum | uint8 | 传感器正常最大读值,默认值为零 |
NormalMinimum | uint8 | 传感器正常最小读值,默认值为零 |
UpperNonrecoverable | uint8 | 按需配置,传感器紧急事件上限 |
UpperCritical | uint8 | 按需配置,传感器严重事件上限 |
UpperNoncritical | uint8 | 按需配置,传感器一般事件上限 |
LowerNonrecoverable | uint8 | 按需配置,传感器紧急事件下限 |
LowerCritical | uint8 | 按需配置,传感器严重事件下限 |
LowerNonCritical | uint8 | 按需配置,传感器一般事件下限 |
PositiveHysteresis | uint8 | 按需配置,传感器上升事件恢复迟滞量 |
NegativeHysteresis | uint8 | 按需配置,传感器下降事件恢复迟滞量 |
SensorNumber | uint16 | (选填)传感器编号,默认255,来自于IPMI规范,由BMC自行生成;如果需要特殊的编号,则需要单独在传感器定制化进行定制(BMC正常运行时插入的部件的传感器不支持定制) |
配置关键点
- 传感器类型
SensorType
建议按照IPMI规范中的 Table 42-, Sensor Type Codes(P505) 配置。 - 三个
Mask
属性要与配置的门限匹配,若配置了某个门限,Mask
相应bit需要置位 - 注意当前
Reading
(也即原始值),数据源的范围不可超过255
,若不满足则需要通过表达式进行一定程度的缩放,并通过传感器的表达公式进行还原。一般情况下,功率、电压等传感器的数据源实际值容易出现数值越界的情况,需要转换到int8范围内。若不进行数据范围限制和转换,Reading可能不符合预期。
配置示例
下面以温度传感器为例展示普通门限传感器配置方法,以风扇功率为例展示需要缩放的门限传感器配置方法。其中 Reading
缩放一般采用管道语法实现,可参考表达式语法。
非缩放传感器
json// 风扇温度传感器 "ThresholdSensor_FanBoardTemp": { "OwnerId": 32, "OwnerLun": 0, "EntityId": "<=/Entity_FanBoard.Id", "EntityInstance": "<=/Entity_FanBoard.Instance", "Initialization": 127, // 门限传感器固定取值 "Capabilities": 104, "SensorType": 1, "ReadingType": 1, "SensorName": "CLU${Slot} Temp", "AssertMask": 0, // 事件产生掩码 "DeassertMask": 0, // 事件恢复掩码 "ReadingMask": 0, // 读值掩码 "Unit": 128, // 单位 "BaseUnit": 1, "ModifierUnit": 0, "Linearization": 0, // 线性计算方程参数 "M": 100, // 线性计算方程参数 "RBExp": 224, // 线性计算方程参数 "Analog": 1, // 线性计算方程参数 "NominalReading": 0, // 传感器名义读值 "NormalMaximum": 0, "NormalMinimum": 0, "MaximumReading": 127, "MinimumReading": 128, "Reading": "<=/Scanner_FanBrdTemp.Value", // 原始读值 "ReadingStatus": "<=/Scanner_FanBrdTemp.Status" // 读值状态,可配置表达式 }, "Scanner_FanBrdTemp": { "Chip": "#/Smc_FanBoardSMC", "Size": 2, "Offset": 4865, "Mask": 65280, "Period": 2000, "Debounce": "None", "Value": 0, "Status": 0 }
相关属性取值范围:
AssertMask
:DeassertMask
:ReadingMask
:Unit
:Capabilities
:
缩放传感器
json// 风扇功率传感器 "ThresholdSensor_FanBoardPower": { "OwnerId": 32, "OwnerLun": 0, "EntityId": "<=/Entity_FanBoard.Id", "EntityInstance": "<=/Entity_FanBoard.Instance", "Initialization": 127, "Capabilities": 104, "SensorType": 11, "ReadingType": 1, "SensorName": "FanBoard${Slot} Power", "AssertMask": 0, "DeassertMask": 0, "ReadingMask": 0, "Unit": 0, "BaseUnit": 6, "ModifierUnit": 0, "Linearization": 0, "M": 5, "Analog": 1, "NominalReading": 0, "NormalMaximum": 0, "NormalMinimum": 0, "MaximumReading": 255, "MinimumReading": 0, "Reading": "<=/Scanner_Fan1_Pwr.Value |> expr($1 * 0.0002 / 5)", // 原始读值可通过表达式缩放至uint8取值范围内 "ReadingStatus": "<=/Scanner_Fan1_Pwr.Status" }, "Scanner_Fan1_Pwr": { "Chip": "#/Smc_FanBoardSMC", "Offset": 4864, "Size": 3, "Mask": 0, "Type": 1, "Value": 0, "Status": 0, "Period": 1000, "Debounce": "None" }
该传感器对象 Reading 字段读值缩放使用了 expr 语法,保证数据范围在预期内,具体的缩放规则由业务侧决定。
门限传感器原始值到读值的转换
门限传感器的原始值到读值通过计算公式进行转换,具体如下,参考IPMI标准规范36.3 Sensor Reading Conversion Formula(P483)。
1、转换公式涉及的属性
属性名称 | 属性类型 | 属性说明 |
---|---|---|
Linearization | uint8 | 传感器计算表达式 [7] - 保留字段 [6:0] - 公式 00h-0bh:enum(linear, ln, log10, log2, ...) 70h:non-linear 最常用线性表达式,配置为0x00 |
M | uint8 | [7:0] - M(有符号,二补数),共10-bit,低8-bit |
MT | uint8 | [7:6] - M(有符号,二补数),共10-bit,高2-bit [5:0] - 容差(无符号),共6-bit |
B | uint8 | [7:0] - B(有符号,二补数),共10-bit,低8-bit |
BA | uint8 | [7:6] - B(有符号,二补数),共10-bit,高2-bit [5:0] - 精度(无符号),共10-bit,低6-bit |
Accuracy | uint8 | [7:4] - 精度(无符号),共10-bit,高4-bit [3:2] - 精度指数(无符号),共2-bit [1:0] - 传感器方向 |
RBExp | uint8 | [7:4] - RExp(K2,有符号,二补数),共4-bit [3:0] - BExp(K1,有符号,二补数),共4-bit |
Reading | uint8 | 传感器原始值 |
2、计算公式
二补数:即补码,也就是需要先将属性值转化为有符号数
按以下计算公式,将原始值转换成读值
temp = (M * x + B * 10K1) * 10K2
y = L(temp)
示例:M = 100,B = 3,K1 = 2,K2 = -2,ori_v = 200,L = 0x00 (线性表达式,计算出来是多少即是多少) 计算结果为:y = (100 * ori_v + 3 * 100) * 0.01 = ori_v + 3 = 203
门限传感器读值状态(ReadingStatus)定义及转换
1、读值状态与Scanner的Status属性取值的含义对应
读值状态 | 取值 | 状态含义 |
---|---|---|
SCAN_NORMAL | 0 | 扫描正常 |
SCAN_FAILURE | 1 | 扫描失败,连续持续N(可配置)个防抖周期均失败 失败之后传感器会禁用状态,并且上报SEL |
SCAN_PRE_FAILURE | 2 | 扫描预失败,一般为一个防抖周期,全部失败则为失败 失败之后传感器会禁用状态 |
SCAN_NOT_ACCESSIBLE | 3 | 扫描不可访问,扫描的对象器件不支持扫描 比如:掉电、状态更新中、读值为NA |
SCAN_NOT_SCANNED | 4 | 初始未扫描状态 |
2、可支持的读值状态之间的转换及转换条件
当前状态 | 变化状态 | 转换条件 |
---|---|---|
0 | 2 | 一次读取失败 |
0 | 3 | ScanEnable值由1->0 |
1 | 0 | 连续M次读取成功 |
1 | 3 | ScanEnable值由1->0 |
2 | 0 | 一次读取成功 |
2 | 1 | 连续N次读取失败 |
2 | 3 | ScanEnable值由1->0 |
3 | 0 | ScanEnable值由0->1且下一次读取成功 |
3 | 2 | ScanEnable值由0->1且下一次读取失败 |
DiscreteSensor 离散传感器配置
配置属性
属性名称 | 属性类型 | 属性说明 |
---|---|---|
OwnerId | uint8 | 同 ThresholdSensor |
OwnerLun | uint8 | 同 ThresholdSensor |
EntityId | uint8 | 同 ThresholdSensor |
EntityInstance | uint8 | 同 ThresholdSensor |
Initialization | uint8 | 传感器初始化选项,离散传感器取值为 0x63 |
Capabilities | uint8 | 传感器能力,用于配置包括自动调整模式、迟滞量、阈值访问、事件控制等特性 具体参照 Table 43-,Full Sensor Record -SDR Type 01h(P521) |
SensorType | uint8 | 传感器类型 具体参照 Table 42-, Sensor Type Codes(P505) |
ReadingType | uint8 | 传感器读值类型 具体参照 Table 42-, Event/Reading Type Code Ranges(P503) |
SensorName | string | 传感器名称 |
AssertMask | uint16 | 传感器事件产生掩码,决定是否能产生事件。每bit位表示的含义为: [15] - 保留,0b [14:0] - 分别对应15个离散事件,配置需要与关联传感器的离散事件匹配。 例如:当前配置EventData1分别为1、3的离散事件,则产生事件掩码的bit1、bit3需要置位。 |
DeassertMask | uint16 | 传感器事件恢复掩码,决定是否能恢复事件。每bit位表示的含义为: [15] - 保留,0b [14:0] - 分别对应15个离散事件,配置需要与关联传感器的离散事件匹配。 例如:当前配置EventData1分别为1、3的离散事件,且需要上报回复事件,则恢复事件掩码的 bit1、bit3 需要置位。 |
DiscreteMask | uint16 | 传感器离散值掩码。每bit位表示的含义为: [15] - 保留,0b [14:0] - 表示离散状态是否能通过传感器返回,分别对应 15 个离散事件,配置时需要与关联传感器的离散事件匹配。 例如:当前配置EventData1分别为1、3的离散事件,则离散值掩码的bit1、bit3需要置位。 |
Unit | uint8 | 传感器单位,离散传感器取值为 0xC0 |
BaseUnit | uint8 | 传感器基准单位,离散传感器取值为 0 |
ModifierUnit | uint8 | 传感器单位描述符,离散传感器取值为 0 |
DiscreteType | uint8 | 传感器离散类型,具体类型参照Table 42-, Sensor Type Codes(P505) 普通离散: 0 ;数字离散:1 |
RecordSharing | uint16 | 传感器记录共享、离散参考方向,配置为 1 |
SensorNumber | uint16 | (选填)传感器编号,默认255,来自于IPMI规范,由BMC自行生成;如果需要特殊的编号,则需要单独在传感器定制化进行定制(BMC正常运行时插入的部件的传感器不支持定制) |
配置关键点
- 传感器类型
SensorType
建议按照IPMI规范中的表格配置。 - 离散传感器的读值类型
ReadingType
分为两种:02h~0Ch
、6Fh
,需要根据离散事件的配置场景相应配置该属性。 - 离散传感器的配置与挂载的离散事件相关,二者应当相互配合,注意三个
Mask
的配置需要与离散事件配置匹配。
配置示例
"DiscreteSensor_FAN1FPresence": {
"OwnerId": 32,
"OwnerLun": 0,
"EntityId": "<=/Entity_Fan1.Id",
"EntityInstance": "<=/Entity_Fan1.Instance",
"Initialization": 99, // 离散传感器固定取值
"Capabilities": 64,
"SensorType": 10,
"ReadingType": 8,
"SensorName": "FAN1 Presence",
"DiscreteType": 0, // 离散值掩码
"Unit": 192,
"BaseUnit": 0,
"ModifierUnit": 0,
"RecordSharing": 1, // 传感器记录共享、离散参考方向
"Reading": 0, // 此参数在离散传感器中无实际意义,一般无需配置
"SensorNumber": 255
}
相关属性取值范围:
Capabilities
:
DiscreteEvent 离散事件配置
对于离散传感器来说,如果不配置离散事件,那该传感器就不能被 BMC 管理。离散事件一般配置在软件CSR中。
配置属性
属性名称 | 属性类型 | 属性说明 |
---|---|---|
ListenType | uint8 | 离散事件监听方式:0 :组合监听,表征 SEL 的三个数据和方向均来自于 Property 属性1 :独立监听,表征 SEL 的三个数据和方向来自于本对象属性 |
Property | uint32 | 离散事件监听的属性,应用场景为监听方式是组合监听 共4字节,从高到低分别表示 event_dir、event_data3、event_data2、event_data1 ,数据含义参照本对象对应属性的解释 |
Conversion | uint8 | 离散事件翻转标识,高4bit用于组合监听时event_data1 的掩码,低4bit用来表征是否翻转事件方向:1 :翻转;非1 :不翻转 |
EventDir | uint8 | 离散事件监听的属性,应用场景为监听方式是独立监听 离散事件产生的方向: 0 :恢复非0 :产生 |
EventData1 | uint8 | 应用场景为监听方式是独立监听 离散事件产生的数据1,数据含义参照29.7 Event Data Field Formats,其中低4bit表示事件的偏移,配置时参照Table 42-, Generic Event/Reading Type Codes或Table 42-, Sensor Type Codes的 Offset 列 |
EventData2 | uint8 | 应用场景为监听方式是独立监听 离散事件产生的数据2,数据含义参照29.7 Event Data Field Formats;应用需求参照Table 42-, Generic Event/Reading Type Codes或Table 42-, Sensor Type Codes中的描述;若无应用需求,配置为默认值 255 |
EventData3 | uint8 | 应用场景为监听方式是独立监听 离散事件产生的数据3,数据含义参照29.7 Event Data Field Formats;应用需求参照Table 42-, Generic Event/Reading Type Codes或Table 42-, Sensor Type Codes中的描述;若无应用需求,配置为默认值 255 |
SensorObject | string | 离散事件关联的离散传感器,当IPMI SEL产生或者恢复时体现在当前传感器的健康状态以及SEL上 |
配置关键点
- 监听方式无固定要求,可以根据场景任意选择。若选择组合监听,需要保证
Property
属性按要求进行配置,保证各个字节的数据皆按照含义正确配置;若选择独立监听,需要保证三个EventData数据及EventDir属性按照含义正确配置。 - 离散事件是遵循IPMI规范定义的,因此建议参照IPMI规范中的描述和定义进行配置。
配置示例
以风扇在位传感器为例,下面将为其配置一个风扇在位事件。
"DiscreteEvent_FAN1FPresence": {
"Property": "<=/Scanner_Fan1_Presence.Value",
"ListenType": 1, // 独立监听
"EventData1": 0,
"EventData2": 255,
"EventData3": 255,
"EventDir": "<=/Scanner_Fan1_Presence.Value",
"Conversion": 1, // 事件翻转
"SensorObject": "#/DiscreteSensor_FAN1FPresence" // 关联上一小节的离散传感器
}
上述内容配置完成后,BMC就可以管理FAN1在位状态和温度、功率状态,可以进入调测步骤。
IpmiSelFilter 事件过滤配置
IpmiSelFilter 和 IpmiSelDesc 作为公共机制,具体设计与实现参见《sensor》。
传感器能否上报事件还需要经过事件过滤,能成功过滤则能够上报事件,若不需要上报事件则忽略。当前 openUBMC 已开发了60个通用性较强的 IpmiSelFilter,位于 sensor
仓库中的 proto/datas.yaml
路径下,用户可按需取用,若现有过滤器不满足需求则需要自行新增。
配置属性
属性名称 | 属性类型 | 属性说明 |
---|---|---|
SensorType | uint8 | 传感器类型,需要与传感器的 SensorType 一致 |
ReadingType | uint8 | 读值类型,需要与传感器的 ReadingType 一致 |
FilterMask1 | uint16 | 过滤掩码1,需要与传感器的 AssertMask 一致 |
FilterMask2 | uint16 | 过滤掩码2,默认配置 0xFFFF |
FilterMask3 | uint16 | 过滤掩码3,默认配置 0xFFFF |
配置示例
t_ipmi_sel_filters: // 具体配置由实际业务决定
- FilterMask1: 0x0a94
FilterMask2: 0xffff
FilterMask3: 0xffff
ReadingType: 0x01
SensorType: 0x01
IpmiSelDesc 事件描述配置
传感器上报事件的等级及描述。这类对象的定义与IpmiSelFilter相同,位于 sensor
仓库中的 proto/datas.yaml
路径下,模型定义位于 sensor
仓库中的 mds/model.json
中,可参考源码深入了解。
配置属性
属性名称 | 属性类型 | 属性说明 |
---|---|---|
SensorType | uint8 | 传感器类型,需要与传感器的 SensorType 一致 |
ReadingType | uint8 | 读值类型,需要与传感器的 ReadingType 一致 |
SelData1 | uint8 | 参数1,默认配置 0xFFFF |
SelData2 | uint8 | 参数2,默认配置 0xFFFF |
SelData3 | uint8 | 参数3,默认配置 0xFFFF |
SelDesc | string | 事件描述 |
AlarmLevel | uint8 | 对应事件的等级 |
ShieldFlag | uint8 | 事件是否屏蔽标识,默认配置 0 |
配置示例
t_ipmi_sel_descs: // 具体配置由实际业务决定
- SensorType: 0xff
ReadingType: 0x01
SelData1: 0x00
SelData2: 0xff
SelData3: 0xff
SelDesc: "Lower Non-critical going low"
AlarmLevel: 1
ShieldFlag: 0
调测方法
传感器定制可以通过出包+上板调测的方式来验证是否成功。参考《适配一款硬件》 完成组件构建、整包构建、整包升级后,可通过以下 4 种方式查询传感器。
Web
openUBMC Web 提供了门限传感器查询。Web 登录 openUBMC 后,【系统管理】 -> 【系统信息】-> 【传感器】,即可查询当前的门限传感器。
IPMI
openUBMC 支持 IPMI 命令查询所有传感器。可通过带内与带外的方式查询,命令为
sensor list
。- 带内查询:
ipmitool sensor list
- 带外查询:
ipmitool -I lanplus -H <host> -p 623 -U <username> -P <password> -C 17 sensor list
- 带内查询:
CLI
openUBMC 支持 CLI 命令查询所有传感器。SSH 登录 openUBMC 后执行命令
ipmcget -t sensor -d list
。Redfish
openUBMC 支持 redfish 接口查询。通过 get 请求分别查询门限传感器和离散传感器。使用Postman工具向测试环境发送下列请求:
- 门限传感器 uri:
redfish/v1/Chassis/:chassisid/ThresholdSensors
- 离散传感器 uri:
redfish/v1/Chassis/:chassisid/DiscreteSensors
- 门限传感器 uri: