Logo PJ
Home
Arcade
Musica
FabLab
Linux
DreamBox
Giochi
 
   Introduzione   Perle   Programmi   SSH   SAMBA   Firewall   GPS   WIFI   Jukebox   PCcar 

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.