Come gestire i sensori della scheda madre
Qualche giorno fa un amico mi ha fatto scoprire il
pacchetto lm_sensors:
una serie di moduli in grado di gestire i sensori presenti
nella scheda madre al fine di poter monitorare vari
parametri come la velocità delle ventole di raffreddamento, la
temperatura interna del computer e le tensioni di alimentazione.
Nel sistema in pratica viene creata una nuova
directory virtuale /proc/sys/dev/sensors/ attraverso la quale si
possono leggere tali valori oltre ai valori soglia.
Sebbene nel pacchetto venga fornita anche una libreria
linkabile per poter implementare direttamente all'interno dei propri
programmi la gestione dei sensori e un demone per il controllo continuo
dei loro valori, ci sono una serie di cose che non mi piacciono e che mi
hanno spinto a crearmi un qualcosa per conto mio:
-
Il programma di visualizzazione dei valori dei sensori mostra tutti
i sensori senza possibilità di escludere quelli non presenti nella
propria scheda madre: poiché io ho solo una ventola
monitorizzabile (quella del processore) e solo un sensore della
temperatura (quello della scheda madre) gli altri valori non vengono
indicati correttamente, facendo scattare gli allarmi del sistema.
-
Per il motivo visto in precedenza anche il demone di controllo, uno
shell script che si appoggia al programma di cui sopra controllando
se nel suo output appare la scritta ALARM, nel mio sistema
non può funzionare se non apportando una serie di modifiche.
-
La libreria vuole poter gestire in maniera universale ogni scheda
madre e ogni sistema, diventando quindi pesante nella gestione
per un semplice controllo del proprio sistema.
Poiché in realtà ogni sistema usa un ridotto numero dei moduli
forniti è possibile alleggerire un po'
la cosa copiandosi direttamente nella directory misc dei moduli
del kernel i file necessari e gestire il tutto lavorando direttamente sui
file nella directory /proc. Dopo aver quindi smanettato un po' ho
ridotto all'essenziale i moduli, come mostrato dalla lista:
[~]# /sbin/lsmod
Module Size Used by
lm78 7108 0
sensors 5264 0 [lm78]
i2c-piix4 2984 0 (unused)
smbus 1692 0 [lm78 sensors i2c-piix4]
i2c-proc 2668 0 (unused)
i2c-core 3984 0 [lm78 sensors i2c-piix4 smbus i2c-proc]
|
Attenzione perché sebbene risulti che il modulo
i2c-piix4 non è utilizzato, se viene rimosso non
sarà più possibile accedere correttamente ai dati in
/proc. Il modulo i2c-proc serve invece per aggiungere nella
directory /proc/bus anche le voci riguardanti il sistema di
controllo dei sensori, nel mio caso i seguenti due file:
[~]# cat /proc/bus/i2c
i2c-0 smbus SMBus PIIX4 adapter at e800 Non-I2C SMBus adapter
[~]# cat /proc/bus/i2c-0
2d LM78 chip LM78(-J) and LM79 sensor driver
|
Non è comunque necessario caricare tale modulo
se non ci interessa avere le informazioni sul bus utilizzato. Alla fine
dei giochi in definitiva per caricare tutti i moduli necessari al mio
sistema per gestire i sensori mi basta dare i seguenti comandi:
modprobe i2c-proc
modprobe i2c-piix4
modprobe lm78
|
A questo punto come dicevo all'interno di
/proc/sys/dev/sensors/ sono disponibili una serie di file virtuali
contenenti i valori misurati dai sensori; studiando un po' la
documentazione fornita e i sorgenti, ho creato un semplice
script perl (tipo sconosciuto, 1528 byte) in
grado di visualizzare in maniera formattata tali valori:
[~]# /usr/sbin/sensori
Temperatura : 32° C OK
Ventola : 4787 RPM OK
+3.3V : +3.44 V OK
+5V : +4.99 V OK
+12V : +12.20 V OK
-12V : -12.34 V OK
-5V : -4.98 V OK
|
Il passo successivo è stato quello di creare (questa volta in C) un
demone (sorgente C, 6950 byte) in grado di
controllare costantemente tali
valori e avvisare in caso di problemi; nel programma sono presenti due
diverse definizioni del numero di secondi dopo il quale ricontrollare il
sistema, a seconda che si sia verificato un allarme oppure no. Il caso di
allarme, viene segnalato il problema a tutti gli utenti collegati, e dopo
il numero definito di controllo consecutivi con esito negativo, il
sistema si spegne automaticamente. Logicamente tutti i
problemi che si verificano vengono accuratamente scritti anche nel log si sistema.
RIFERIMENTI
Vi metto a disposizione tutto il materiale,
ricordandovi che è stato sviluppato per funzionare sul mio
sistema, che monta una scheda madre Asus P2B-F: molto
probabilmente sarà necessario modificare i moduli da caricare al
boot, adattare i vari nomi dei file da controllare e le costanti per le
quali moltiplicare le tensioni di alimentazione.
Il sito ufficiale di lm_sensors, il
pacchetto per monitorare la temperatura del PC e la velocità delle ventole.
L'archivio del
pacchetto contenente i moduli per la gestione dei sensori.
-
Lo script perl (tipo sconosciuto, 1528 byte) in grado
di visualizzare i valori dei sensori.
-
Il demone (sorgente C, 6950 byte) per il
controllo constante dei valori dei sensori e la segnalazione degli errori.
-
Lo script di init (tipo sconosciuto, 741 byte) per lanciare il demone in ambiente RedHat o Mandrake.