忘记是从哪个固件提取出来的了,本来是好几个文件,都写到一个文件里了,并修复了restart
创建 /etc/init.d/fan 写入以下内容,完事了记得 chmod +x /etc/init.d/fan ,然后 /etc/init.d/fan enable 自启, /etc/init.d/fan start 启动。
#!/bin/sh /etc/rc.common
START=21
STOP=21
start() {
fan_control &
}
stop() {
# 查找并杀死 fan_control 进程
SELF_PID=$$
PID=$(pgrep -f "fan")
if [ -n "$PID" ]; then
kill $PID
logger -p user.info -t "pwmfan" "Stopped fan (PID: $PID)"
fi
}
# Fan control logic
fan_control() {
# Determine fan controller
if [ -d /sys/devices/platform/pwm-fan ]; then
(cd /sys/devices/virtual/thermal/thermal_zone0 && {
logger -p user.info -t "pwmfan" "set the conditions for fan"
[ -f trip_point_3_temp ] && {
# select fan level 1
echo 50000 > trip_point_3_temp
}
[ -f trip_point_4_temp ] && {
# select fan level 2-4
echo 55000 > trip_point_4_temp
}
})
(cd /sys/devices/virtual/thermal/cooling_device0 && {
TYPE=$(cat type)
if [ "$TYPE" = 'pwm-fan' ]; then
# run 5s
for i in $(seq 1 5); do
logger -p user.info -t "pwmfan" "start to spin ${i}/5"
echo 3 > cur_state
sleep 1
done
logger -p user.info -t "pwmfan" "set to auto"
echo 0 > cur_state
fi
})
else
logger -p user.info -t "pwmfan" "not found cooling device"
if [ -d /sys/class/pwm/pwmchip0 ]; then
fan_control_direct &
fi
fi
}
# Direct fan control logic
fan_control_direct() {
# Determine fan controller
if [ -d /sys/devices/platform/pwm-fan ]; then
echo "pls use fan_control."
exit 1
fi
if [ ! -d /sys/class/pwm/pwmchip0 ]; then
echo "this model does not support pwm."
exit 1
fi
if [ ! -d /sys/class/pwm/pwmchip0/pwm0 ]; then
echo 0 > /sys/class/pwm/pwmchip0/export
fi
sleep 1
while [ ! -d /sys/class/pwm/pwmchip0/pwm0 ]; do
sleep 1
done
ISENABLE=$(cat /sys/class/pwm/pwmchip0/pwm0/enable)
if [ "$ISENABLE" -eq 1 ]; then
echo 0 > /sys/class/pwm/pwmchip0/pwm0/enable
fi
echo 50000 > /sys/class/pwm/pwmchip0/pwm0/period
echo 1 > /sys/class/pwm/pwmchip0/pwm0/enable
# max speed run 5s
echo 46990 > /sys/class/pwm/pwmchip0/pwm0/duty_cycle
sleep 5
echo 25000 > /sys/class/pwm/pwmchip0/pwm0/duty_cycle
# Temperature thresholds and PWM duty cycles
CpuTemps="75000 63000 58000 52000"
PwmDutyCycles="25000 35000 45000 46990"
Percents="100 75 50 25"
DefaultDuty=49990
DefaultPercents=0
while true; do
temp=$(cat /sys/class/thermal/thermal_zone0/temp)
INDEX=0
FOUNDTEMP=0
DUTY=$DefaultDuty
PERCENT=$DefaultPercents
# Convert space-separated strings to lists
set -- $CpuTemps
for i in 0 1 2 3; do
if [ "$temp" -gt "$1" ]; then
INDEX=$i
FOUNDTEMP=1
break
fi
shift
done
if [ "$FOUNDTEMP" -eq 1 ]; then
set -- $PwmDutyCycles
for i in $(seq 1 $((INDEX + 1))); do
DUTY=$1
shift
done
fi
echo "$DUTY" > /sys/class/pwm/pwmchip0/pwm0/duty_cycle
sleep 2
done
}
如果你希望修改不同温度对应的转速,修改脚本里下面的这些内容(分别是75,63,58,52摄氏度)
Temperature thresholds and PWM duty cycles
CpuTemps=”75000 63000 58000 52000″
PwmDutyCycles=”25000 35000 45000 46990″