OpenBMC:hwmon 传感器适配
2026/9/5 11:46:43 网站建设 项目流程

OpenBMC:hwmon 传感器适配

1. hwmon 的作用

hwmon 是 Linux 内核的硬件监控框架,主要用于提供:

  • 温度
  • 电压
  • 电流
  • 功率
  • 能量
  • 风扇转速
  • PWM
  • 告警状态

在 OpenBMC 中,hwmon 是内核传感器驱动和 D-Bus Sensor 之间的重要接口。

物理传感器 ↓ I2C / PMBus / ADC ↓ Linux 传感器驱动 ↓ hwmon ↓ dbus-sensors / phosphor-hwmon ↓ D-Bus Sensor

2. hwmon 目录结构

驱动注册成功后,Linux 会创建:

/sys/class/hwmon/hwmon0 /sys/class/hwmon/hwmon1

目录中可能包含:

name temp1_input temp1_max temp1_crit temp1_label in1_input curr1_input power1_input fan1_input pwm1

常见属性含义:

节点含义
tempX_input温度
inX_input电压
currX_input电流
powerX_input功率
fanX_input风扇转速
pwmXPWM 控制值
X_label通道名称
X_alarm告警状态

具体单位应以 Linux hwmon ABI 为准。例如,温度通常以毫摄氏度表示。


3. 设备树和驱动适配

以 I2C 温度传感器为例:

&i2c0 { status = "okay"; temperature-sensor@48 { compatible = "vendor,temp-sensor"; reg = <0x48>; }; };

设备树中的compatible与驱动匹配后,内核调用probe()

创建 I2C Client ↓ 调用驱动 probe() ↓ 检查芯片和寄存器 ↓ 注册 hwmon 设备 ↓ 生成 sysfs 属性

驱动应通过标准 hwmon 接口注册通道,不应自行创建语义不统一的 sysfs 文件。


4. hwmon 通道配置

一个芯片可能同时提供多个数据通道:

温度通道 1 温度通道 2 输入电压 输入电流 输入功率 风扇转速

驱动需要定义:

  • 通道类型
  • 支持的属性
  • 读取函数
  • 写入函数
  • 是否可见
  • 数据转换方式

处理过程如下:

用户读取 temp1_input ↓ hwmon 核心调用驱动 read() ↓ 驱动读取芯片寄存器 ↓ 转换为 hwmon 标准单位 ↓ 返回用户空间

单位转换应主要在驱动层完成,避免不同用户空间程序分别解释原始寄存器。


5. 接入 dbus-sensors

使用 entity-manager 和 dbus-sensors 时,需要提供传感器配置:

{ "Name": "Board Temp", "Type": "TemperatureSensor", "Bus": 3, "Address": 72 }

运行流程为:

entity-manager 发布 Configuration ↓ dbus-sensors 获取配置 ↓ 根据 Bus、Address 和设备路径匹配 hwmon ↓ 读取 tempX_input ↓ 创建 D-Bus Sensor.Value

最终对象可能为:

/xyz/openbmc_project/sensors/temperature/Board_Temp

hwmon 编号可能随驱动加载顺序变化,因此不应固定依赖hwmon0。匹配时通常需要结合 I2C 设备路径、地址、驱动名称和通道标签。


6. 阈值与数据转换

传感器阈值可以来自:

  • hwmon 芯片寄存器
  • entity-manager 配置
  • 平台策略
  • 用户运行时设置

D-Bus 中常见阈值接口为:

xyz.openbmc_project.Sensor.Threshold.Warning xyz.openbmc_project.Sensor.Threshold.Critical

数据转换链路为:

芯片原始寄存器 ↓ 内核驱动转换为 hwmon 单位 ↓ dbus-sensors 执行必要缩放 ↓ D-Bus 标准单位 ↓ Redfish Reading

应明确每一层的单位,避免重复放大或缩小。


7. 完整适配流程

1. 确认硬件接口和设备地址 2. 启用 I2C、PMBus 或 ADC 控制器 3. 添加设备树节点 4. 启用或编写 Linux 驱动 5. 注册标准 hwmon 通道 6. 添加 entity-manager 配置 7. 启用对应 Sensor 服务 8. 创建 D-Bus Sensor 对象 9. 由 Redfish、IPMI 和风扇控制使用

8. 总结

hwmon 负责在 Linux 内核中统一传感器接口,OpenBMC 用户空间再将这些数据转换为 D-Bus Sensor。

硬件 → 驱动 → hwmon → dbus-sensors → D-Bus → Redfish / IPMI / WebUI

适配过程中最重要的是使用标准 hwmon ABI、保持单位一致,并建立稳定的硬件通道与 D-Bus Sensor 映射关系。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询