这是一项围绕 K3 Pico-ITX 风扇策略展开的技术实践。目标不是提供一组只能在单台机器上执行的命令,而是先确认控制链,再形成能够验证、能够退出、不会和内核自动温控互相争抢的调试方法。
问题背景
风扇同时涉及 Linux thermal framework、pwm-fan 驱动与 EC。直接写入 PWM 或照搬固定的 thermal_zone3、hwmon8 路径,可能在不同启动顺序下访问错误节点;手动控制结束后如果没有恢复自动温控,还会让系统长期失去散热保护。
分析与方案
首先从设备树和运行时节点确认控制关系:thermal_cluster0 通过 step_wise governor 选择 cooling state,pwm-fan 再把档位映射为 EC PWM channel 0 的占空比。
调试流程据此拆成四步:
- 按节点
type或name动态查找 thermal、cooling device 和 hwmon 路径。 - 只读检查温度、策略、当前档位、PWM、实际 RPM 与故障状态。
- 保存当前状态,暂停自动温控后再执行有限时间的手动调速。
- 恢复原档位和 thermal zone 自动模式,并再次验证状态。
关键取舍
- 不把
pwm1_enable当作 Linux 自动/手动切换开关。 - 不把 PWM 百分比等同于实际转速百分比,而是同时读取 RPM 和故障状态。
- 不把没有 critical trip 的 thermal zone 当作过热关机保护。
- 不建议用 PWM 0 做常规测试,避免低占空比下风扇无法可靠起转。
结果
最终形成了一份从控制链、温度档位到 sysfs 与 ectool 操作的完整指南。其中的节点动态发现和状态恢复原则,也可作为其他 Linux BSP 调试工作的参考。