Fancontrol y BIOS "CPU Fan Error" [Resuelto]

Resulta que en mi BIOS AMI el QFAN profile que me daba a elegir solo conseguía estar a mínimas rpms hasta que la CPU se ponía cerca de los 70º, momento en el que pasaba a tope de rpm. Esto se traducía en que tenia el ordenador a 62º sin hacer nada.

Leyendo he configurado fancontrol de los lm-sensors y me funciona perfectamente, la velocidad según la temperatura y tal. El problema es que cuando fancontrol termina, antes de salir pone el ventilador a 100% y au. Dado que lo he habilitado para que se inicie con el sistema, esto no es mayor problema, ya que solo esta funcionando al 100% durante los segundos que tarda en apagarse, pero al reiniciar, en la comprobación de la BIOS tarda más tiempo de lo normal y al final aparece el mensaje que pongo en el asunto "CPU Fan Error!".
Un vez vuelvo a entrar en linux arranca fancontrol de nuevo y funciona sin problemas, pero me gustaría saber si puedo hacer que cuando termine fancontrol devuelva el control del ventilador a la BIOS...

He estado leyendo acerca de como se indica el modo de funcionamiento en el kernel, encontrando el archivo pwm2_enable (que es el referente al ventilador de mi CPU), que esta a 1 (Manual mode), y se que con el valor 2 pasaría a (Thermal Cruise) todo esto siguiendo esta documentación. He pensado en modificar el script de fancontrol puesto que he localizado la función que ejecuta al terminar y se encarga de ponerlos al 100% con algo tipo sudo echo "2" > /<ruta>/pwm2_enable pero supongo que habría que ejecutar algo para que surgiese efecto... o seguramente no se pueda hacer así, a pelo y tan sencillo. La función es:

function restorefans()
{
local status=$1
echo 'Aborting, restoring fans...'
let fcvcount=0
while (( $fcvcount < ${#AFCPWM[@]} )) # go through all pwm outputs
do
pwmo=${AFCPWM[$fcvcount]}
pwmdisable $pwmo
let fcvcount=$fcvcount+1
done
echo 'Verify fans have returned to full speed'
exit $status
}

trap 'restorefans 0' SIGQUIT SIGTERM
trap 'restorefans 1' SIGHUP SIGINT

Y esa es mi duda, como veis he estado buscando pero no he encontrado solución.

Gracias gente solo por leerlo!!

---------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------
Edito: RESUELTO
---------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------

Bueno, después de estar toda la mañana, y publicar este largo mensaje he conseguido resolverlo, asi que pongo como por si a alguien le ayuda...

Explorando el script, me he fijado en la llamada pwmdisable $pwmo que hace la función que hay arriba. En ella, tras comprobar que existe el fichero pwm2_enable, intenta ponerlo a 0, con esta parte

# Try pwmN_enable=0
echo 0 > $ENABLE 2> /dev/null
if [ `cat $ENABLE` -eq 0 ]
then
# Success
return 0
fi

Dado que en la especificación del driver en el kernel no acepta valor 0, pasaba al siguiente caso en el que lo ponia a 1 y la velocidad a tope. Pues dada dicha docuemntación, sabía que tenía que ser 2 en vez de 0, he cambiado el echo 0 y el 0 del if por un 2 y perfecto!! [sonrisa] , quedando...

echo 2 > $ENABLE 2> /dev/null
if [ `cat $ENABLE` -eq 2 ]
then
# Success
return 0
fi

Espero que le sirva a alguien!!

Saludos!!
0 respuestas