本指南记录了在 Milk-V Jupiter(SpacemiT K1)开发板上,如何通过 sysfs 接口手动控制主板 FAN 接口的 PWM 风扇,包括硬件接线验证与手动送电测试。
目录
1. 背景:Bianbu OS 默认低温不供电
Milk-V Jupiter 板载一个 FAN 接口(JST 1.25mm 4-Pin),默认由 SoC 的 PWM 控制器管理。Bianbu OS 的自动温控策略在 CPU/GPU 温度较低时(通常 < 50°C),不输出任何电压,导致风扇完全静止。
[!WARNING] 如果风扇完全不转,并不代表接线错误;请先进行手动送电测试以排除系统策略干扰,再做结论。
2. 确认风扇对应的 hwmon 设备节点
通过遍历 udev hwmon 设备,可以快速确定哪个节点对应风扇:
root@milkv-jupiter:~# for i in /sys/class/hwmon/hwmon*; do echo -n "$i: "; cat "$i/name"; done
/sys/class/hwmon/hwmon0: top_thermal
/sys/class/hwmon/hwmon1: gpu_thermal
/sys/class/hwmon/hwmon2: cluster0_thermal
/sys/class/hwmon/hwmon3: cluster1_thermal
/sys/class/hwmon/hwmon4: pwmfan
| 设备节点 | 名称 | 说明 |
|---|---|---|
hwmon0 | top_thermal | CPU 顶层温度传感器 |
hwmon1 | gpu_thermal | GPU 温度传感器 |
hwmon2 | cluster0_thermal | 核心簇 0 温度传感器 |
hwmon3 | cluster1_thermal | 核心簇 1 温度传感器 |
hwmon4 | pwmfan | PWM 风扇控制器 |
确认风扇的节点为 /sys/class/hwmon/hwmon4(名称是 pwmfan)。
3. 手动强送电测试
[!WARNING] 本测试将强制主板 FAN 接口输出 5V 最大电压,请确保风扇已正确连接,且电流消耗在主板承受范围内。
在开发板终端(SSH 或串口)依次执行以下命令:
# 1. 切换到风扇控制目录
cd /sys/class/hwmon/hwmon4
# 2. 将风扇切换为手动控制模式
echo 1 > pwm1_enable
# 3. 写入最大值 255(强行让主板 FAN 接口输出最大 5V 电压)
echo 255 > pwm1
写入后风扇应立刻做出反应。
还原自动温控
测试完成后,如需还原为系统温控:
# 切回自动控制模式
echo 0 > pwm1_enable
# 或直接重启主板
reboot
4. 结果排查与下一步动作
执行 echo 255 > pwm1 后,根据风扇状态判断:
风扇立刻开始旋转
结论:接线完全正确!
- 这证实了之前的猜想:在默认低温状态下,Bianbu OS 是完全不给风扇送电的。
- 既然接线正确,你可以选择:
- 输入
echo 0 > pwm1_enable交还给系统自动温控。 - 或直接
reboot重启主板,系统会重新加载默认策略。
- 输入
风扇依然不转
结论:红黑线序依然是反的,或者接口接触不良。
- 因为刚才的命令已经强制主板在该引脚输出了 5V 电压,如果风扇还不转,说明电流方向和风扇内部的直流马达极性仍然是冲突的。
- 解决: 你需要彻底断电,重新检查 JST 1.25mm 插头的红黑线序是否对调,或者检查之前挑线时金属端子是否变形,导致插回接口后没有接触到主板的插针。
5. 参考链接
- Milk-V Jupiter 硬件接口文档(含 FAN 接口 Pinout): https://milkv.io/docs/jupiter/jupiter-interface.webp
- Milk-V Jupiter 上手指南(硬件): https://milkv.io/zh/docs/jupiter/getting-started/hardware
- AskUbuntu - Cannot control old HP desktop fan after installing Ubuntu Server 22.04: https://askubuntu.com/questions/1526646/cannot-control-old-hp-desktop-computer-fan-after-installing-ubuntu-server-22-04