openubmc 新增一个 IPMI Sensor

新增一个IPMI Sensor ​

一个常见的场景便是需要将硬件上的某一个器件的读值,通过IPMI协议中定义的门限传感器呈现给用户。在本章节中,我们将配置一个LM75温度器件,同时配置一个对应的IPMI门限传感器,并呈现至对外接口。

CSR配置 ​

openUBMC采用一种软件描述性语言描述一个硬件的具体信息,这种描述性语言被称之为Component Self-description Record(CSR)。

关于CSR的具体介绍,请参考《硬件自描述文件(CSR)》

首先我们先获取CSR仓库:

cd /home/workspace
git clone https://gitcode.com/openUBMC/vpd.git

打开服务机型(vendor/Huawei/Server/Kunpeng/openUBMC)的root.sr

打开后可以发现一系列配置。首先我们需要在硬件拓扑链路中声明一个LM75器件。

在实际的硬件链路拓扑中,I2c_8总线下地址为0x90处有一个LM75温感芯片。

在CSR的ManagementTopology中找到对应的I2c_8的配置,如果没有I2c_8,请在ManagementTopology中粘贴下面的配置(可参考I2c_2的配置)。

"ManagementTopology": {
    ...
    "I2c_8": {
        "Chip": [
            "Lm75_DemoSensor"
        ]
    }
    ...
}

这样CSR中便完成了实际的硬件链路拓扑配置。

同时,在与ManagementTopology同级的objects下面定义Lm75器件的具体信息,和两个业务对象:

"Objects": {
    ...
    "Lm75_DemoSensor": {
        "OffsetWidth": 1,
        "AddrWidth": 1,
        "Address": 144
    },
    "Scanner_GetTemperature": {
        "Chip": "#/Lm75_DemoSensor",
        "Size": 1,
        "Offset": 0,
        "Mask": 255,
        "Period": 1000
    },
    "ThresholdSensor_DemoSensor": {
        "AssertMask": 29312,
        "DeassertMask": 29312,
        "ReadingMask": 6168,
        "Linearization": 0,
        "M": 100,
        "RBExp": 224,
        "UpperCritical": 48,
        "UpperNoncritical": 46,
        "PositiveHysteresis": 2,
        "NegativeHysteresis": 2,
        "OwnerId": 32,
        "OwnerLun": 0,
        "EntityId": "<=/Entity_DemoSensor.Id",
        "EntityInstance": "<=/Entity_DemoSensor.Instance",
        "Initialization": 127,
        "Capabilities": 104,
        "SensorType": 1,
        "ReadingType": 1,
        "SensorName": "Demo Temperature Sensor",
        "Unit": 128,
        "BaseUnit": 1,
        "ModifierUnit": 0,
        "Analog": 1,
        "MaximumReading": 127,
        "MinimumReading": 128,
        "Reading": "<=/Scanner_GetTemperature.Value"
    },
    "Entity_DemoSensor":{
        "Id": 99,
        "Name": "Demo Temperature Sensor",
        "PowerState": 1,
        "Presence": 1,
        "Instance": 96
    },
    ...
}

此处我们定义了两个对象,一个是Lm75器件,一个是定期扫描任务Scanner,一个是IPMI门限传感器的软件对象。 我们通过引用语法将Scanner和Lm75器件关联起来;通过同步语法将Scanner的读值同步至ThresholdSensor的读值。

具体IPMI传感器的配置,请参考《IPMI Sensor & SEL》

组件构建 ​

由于修改了vpd仓库,因此我们需要对vpd仓库进行重新构建。

为了和之前版本进行区分,我们需要将service.json中的version字段进行更新

bingo build --stage=stable

整包构建 ​

找到vpd声明位置,将版本改至对应的构建版本,然后在manifest中再次进行整包构建

bingo build

整包测试 ​

整包升级后,我们可以通过ipmitool进行传感器查询。

> ./ipmitool.exe -H ip -I lanplus -p 623 -U TestUser -P OpenUBMC@123 -C 17 sdr
> Demo Temperature   | 28 degrees C      | ok
posted @ 2026-09-17 14:11  一枚码农  阅读(13)  评论(0)    收藏  举报