忘记是从哪个固件提取出来的了,本来是好几个文件,都写到一个文件里了,并修复了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″