Linux 系统 PWM 风扇驱动框架学习记录

一、前言

        最近在折腾嵌入式平台的驱动框架学习,在遇到 pwm-fan 风扇驱动时,发现不只是 PWM 控制占空比那么简单,还涉及到 thermal 子系统的温度监控以及 hwmon 子系统的硬件控制。

        内核源码的文档下,也有风扇驱动的介绍:

二、三者的关系

PWM 是底层的硬件控制接口,直接控制风扇的转速。

hwmon 提供了对 PWM 和风扇转速的访问接口,同时还可以监控其他硬件传感器(如温度)。

thermal 是更高层的热管理框架,负责根据温度数据自动调整冷却设备(如风扇)的状态。

温度监控:

        Thermal 子系统通过温度传感器(如 coretemp)读取温度数据。温度数据通过 thermal_zoneX/temp 暴露给用户空间。

温度控制:

        当温度超过预设的触发点(trip_point_X_temp)时,Thermal 子系统会触发冷却行为。Thermal 子系统通过 hwmon 接口调整风扇的 PWM 信号(pwm1)来控制风扇速度。

风扇控制:

        hwmon 接口通过 PWM 信号直接控制风扇的转速。用户也可以通过 hwmon 接口手动设置风扇速度。

职责分离:

PWM 接口专注于硬件控制。

hwmon 接口专注于硬件监控和控制。

thermal 接口专注于热管理策略。

三、风扇控制

pwm 接口

例如:

/sys/class/pwm/pwmchip0/

        如果是使用通用风扇驱动 pwm-fan,通常无法 export 风扇的pwm,因为已经被驱动申请。如果想通过 pwm 接口来控制,需要将设备树的 compatible 属性修改,或者新编写一个 pwm 的驱动,这样就可以拥有该 GPIO 的控制权。

hwmon 接口

这里可以看我另一篇博客:

香橙派Linux系统手动调节PWM风扇转速_linux主板风扇控制-优快云博客icon-default.png?t=O83Ahttps://blog.youkuaiyun.com/plmm__/article/details/144697337?spm=1001.2014.3001.5502

thermal 接口

路径为:

/sys/class/thermal

可以看到冷却设备和温度设备:

每个接口内部的 type ,如果输出是 Processor,则表示这是一个 CPU 频率调节设备,而不是风扇。如果输出是 pwm-fan 或 fan,则表示这是一个风扇设备。

cat /sys/class/thermal/cooling_device0/type

        我的设备没有 pwm-fan 或 fan,硬件可能没有通过标准接口(如 PWM 或 hwmon)暴露风扇控制功能。如果有,则可以通过对 cur_state 写入挡位来控制,需要 sudo 权限。

可以通过 max_state 查看挡位最大值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

plmm烟酒僧

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值