【sensor】一、温度传感器添加到Dbus & Hwmon

2024-01-08 12:46:59

开始之前,我们可以先了解一下hwmon子系统:OpenBMC hwmon内核子系统
一、查看传感器信息
AST2500代码默认是没有配置任何sensor的,所以我们在webui中看不到任何的sensor信息。
在这里插入图片描述

接下来我们围绕BMC小板上面的一个温度传感器一步一步配置,让它显示在系统中。

二、调试I2C设备
1、确定I2C设备的所在bus以及从地址
从BMC的i2c框图我们可以看到,在i2c第六路上面有两个设备,一个是PCA9546,一个是LM75,LM75是BMC小板上面的温度传感器,为了方便后面调试可以直观看到读数,就用这颗设备来进行探索开发。
在这里插入图片描述

其中硬件的i2c6对应的软件的i2c-5(因为硬件从1开始,软件从0开始),硬件的从地址0x98对应的软件的0x4c(0x98右移一位),得到i2c设备地址为 i2c-5从地址0x4C
2、在dts中打开对应的i2c设备
首先下载代码 devtool modify linux-aspeed
然后确定自己机型用的什么dts文件名,我的机型为ast2500-default,那么可以在我的机型配方目录下的machine目录,找到一个ast2500-default.conf配置文件:meta-aspeed-sdk/meta-ast2500-sdk/conf/machine/ast2500-default.conf
在这个配置文件中KERNEL_DEVICETREE 指定的就是我们使用的dts文件,为aspeed-ast2500-evb.dts
在这里插入图片描述

在linux-aspeed代码中找到.dts文件,把i2ct通道打开,文件路径:workspace/sources/linux-aspeed/arch/arm/boot/dts/aspeed-ast2500-evb.dts
&i2c5 {
status = “okay”;
lm75@4c {
compatible = “national,lm75”;
reg = <0x4c>;
};
};
其中4c为从地址,lm75为驱动型号,national 应该是厂商名。

重新编译 :bitbake obmc-phosphor-image -c clean && bitbake obmc-phosphor-image
重启后分别执行 i2cdetect -l和i2cdump -f -y 5 0x4c 可以看到i2c-5已经打开,并且可以正常读到温度的值.
OpenBMC内置了i2c-tools,工具使用可以参考:i2c-tools常用命令
在这里插入图片描述
在这里插入图片描述

3、新增传感器配置文件
在自己机型的可以加载到的配方目录下找到recipes-phosphor,创建sensors目录,在目录中添加两个文件:
recipes-phosphor/sensors/phosphor-hwmon/obmc/hwmon/ahb/apb/bus@1e78a000/i2c-bus@180/lm75@4c.conf
recipes-phosphor/sensors/phosphor-hwmon_%.bbappend
在这里插入图片描述

其中:
phosphor-hwmon/obmc/hwmon/ahb/apb/ 路径名是openbmc固定的不能更改
bus@1e78a000 1e78a000是ast2500芯片的 i2c 寄存器地址,AST2500 芯片手册在文章末尾提供。
i2c-bus@180 180是ast2500芯片的 i2c-5 寄存器基于 1e78a000 偏移地址,之前用i2cdetect -l命令可以查到是 1e78a180
lm75@4c.conf lm75内核要加载的驱动名,此驱动是默认打开的所以不需要手动再打开,4c为传感器设备从地址

在这里插入图片描述

– LM75驱动默认加载

lm75@4c.conf 内容如下:
LABEL_temp1=BmcBoard
WARNLO_temp1=20000
WARNHI_temp1=40000
CRITHI_temp1=50000
CRITLO_temp1=10000
LABEL_tempx——是显示名称
WARNLO_tempx——低告警值
WARNHI_tempx——高告警值
CRITHI_tempx——严重低告警值
CRITLO_tempx——严重高告警值
后面的告警值是实际值乘以1000,即放大了1000倍,系统在计算时候会自行转换。
此配置文件会在openbmc的 /etc/default/obmc/hwmon 目录下。

phosphor-hwmon_%.bbappend 内容如下:
FILESEXTRAPATHS:prepend := “ T H I S D I R / {THISDIR}/ THISDIR/{PN}:”

NAMES = " bus@1e78a000/i2c-bus@180/lm75@4c "
ITEMSFMT = “ahb/apb/{0}.conf”

ITEMS = “${@compose_list(d, ‘ITEMSFMT’, ‘NAMES’)}”

ENVS = “obmc/hwmon/{0}”
SYSTEMD_ENVIRONMENT_FILE:${PN}:append = " ${@compose_list(d, ‘ENVS’, ‘ITEMS’)}"
此文件为编译文件,NAMES 为配置文件lm75@4c.conf的路径名。
完成上面的工作后,重新编译,升级后重启设备。

三、检查结果
查看hwmon
工作方式:在内核启动前会先读取dts设备数中的设备,按照设备树中的参数创建i2c设备,内核加载驱动后,在文件系统中/sys/class/hwmon/路径下创建hwmon设备节点,
在这里插入图片描述

cat hwmon1/uevent可以确定hwmon1是我们的配置的温度传感器。
在这里插入图片描述

hwmon1下可以看到创建了temp1_input文件,这是在驱动中定义好的(里面的读数就是温度的值了)。
在这里插入图片描述

最后,hwmon启动phosphor-hwmon-readd程序,读取/etc/default/obmc/hwmon 下的配置文件(dts中有指定配置文件名以及驱动和子设备地址,这里必须保证配置文件和驱动一致性),
如果需要适配自己的板卡需要修改原有的驱动或者在设备树中指定其他驱动。
在这里插入图片描述

查看Dbus
当一切加载正常,会有一个xyz.openbmc_project.Hwmon-.Hwmon1 dbus服务器运行,
在这里插入图片描述

是由系统自动处理的,可以在/etc/default/obmc/hwmon/ahb/apb/bus@1e78a000/i2c-bus@180/lm75@4c.conf 文件中看到。
在这里插入图片描述
在这里插入图片描述

使用 busctl tree xyz.openbmc_project.Hwmon-b08f2dd6a0eae44de00693a4a54a5bc68bf38766545e7d2a3ec55fe6d53c60d4.Hwmon1 命令查看此服务:
在这里插入图片描述

可以看到下面有一个对象:/xyz/openbmc_project/sensors/temperature/BmcBoard ,就是我们之前配置的传感器设备,继续查看里面的信息:
busctl introspect xyz.openbmc_project.Hwmon-b08f2dd6a0eae44de00693a4a54a5bc68bf38766545e7d2a3ec55fe6d53c60d4.Hwmon1 /xyz/openbmc_project/sensors/temperature/BmcBoard
在这里插入图片描述

可以看到我们在之前的配置文件中的高低警告值,以及温度的读值。

到此说明hwmon和dbus加载已经成功了,但是redfish和ipmi中还是仍然没有显示的,需要进一步配置才能实现:
【sensor】二、温度传感器注册到Redfish & WebUI
【sensor】三、温度传感器注册到IPMI

AST2500 芯片手册需要的可以自取:2500v16.pdf

文章来源:https://blog.csdn.net/qq_38202733/article/details/135452454
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。