风扇转速、PWM 与热管理
1. 驱动
pwm-fan.c:PWM 输出 + 可选 tach;gpio-fan.c:离散 GPIO 档位;- EMC/MAX/NCT 等外部 fan controller;
- SoC PWM/tacho controller。
2. RK3588 pwm-fan
本树多个 RK3588 EVB/vehicle/toybrick DTS 有:
1 | fan: pwm-fan { |
厂商树还支持 rockchip,temp-trips notifier 路径。
3. Probe
1 | pwm_fan_probe() |
4. HWMON
pwm1:0..255 duty command;pwm1_enable:enable mode;fanN_input:RPM(仅有 tach IRQ 时)。
没有 tach 输入时仍有 PWM control,但无法证明风扇真的转动。
5. RPM
tach IRQ累积脉冲,定时器按采样窗口计算:
1 | RPM = pulses * 60 / (sample_seconds * pulses_per_revolution) |
pulses-per-revolution 默认通常为 2,必须匹配风扇规格。
6. PWM
driver把 0..255 转为 duty cycle:
1 | duty = pwm * (period - 1) / 255 |
低 duty 可能无法克服启动转矩。实际曲线常需要:
- kick-start;
- 最低稳定 duty;
- hysteresis;
- spin-up delay;
- stall detection。
7. Cooling device
cooling-levels[] 将 thermal state 映射到 PWM。Thermal governor选择 state,driver调用 set_pwm()。这与用户直接写 pwm1 存在控制权冲突,生产系统应明确由谁控制。
8. Rockchip notifier
如果启用 ROCKCHIP_SYSTEM_MONITOR 且 DT 有 rockchip,temp-trips,本厂商驱动注册 notifier并直接按温度映射 state,然后提前返回,不再注册通用 OF cooling device。调试时必须识别实际走哪条控制路径。
9. 配置事实
公共主 defconfig未显式写 SENSORS_PWM_FAN;rk3588_edge.config 明确设置 CONFIG_SENSORS_PWM_FAN=y。DTS 有 fan 节点不代表最终内核一定能 probe。
10. 排查
1 | cat /sys/class/hwmon/hwmon*/name |
写 PWM 前确认 cooling governor/daemon 没有同时改值。
正在加载留言…