Linuxでの温度/電圧/Fanの監視

最近のマザーボードやチップセットには温度センサーなどがついており、これを モニターすることで、電源電圧、CPU・内部温度、ファン回転数などOS上で取得 することができるようにするのがlm-sensorsというプログラムです。
詳細はこちらhttp://secure.netroedge.com/~lm78/

必要要件

lm-sensorsが対応しているセンサーチップが搭載されていること
実際にセンサーが実装されていること
kernel 2.4.13 or later

テスト環境

RedHat6.3(kernel 2.4.18-3smp)
lm_sensors-2.6.5
i2c-2.6.5

必要なファイルをダウンロードする。

lm_sensors-2.6.5.tar.gz
i2c-2.6.5.tar.gz
他にインストールにはbison,flexが必要。

インストール

kernelにパッチを当てる方法もありますが、今回はmoduleとしてインストールします。
kernelがi2cに対応している必要があります。/usr/src/linux-2.4/.confgを見て確認します。
i2cをインストール
$ gzip -dc i2c-2.6.5.tar.gz|tar xvf -
$ cd i2c-2.6.5.tar.gz
Makefileを編集。
LINUX=/usr/src/linux-2.4
MODPREF := /lib/modules/`grep 2.4.18-3smp $(LINUX_HEADERS)/linux/version.h|cut -f 2 -d'"'`

$ make
$ su
# make install
# /sbin/depmod -a
lm-sensorsをインストール
$ gzip -dc lm_sensors-2.6.5.tar.gz|tar xvf -
$ cd lm_sensors-2.6.5
MODPREF := /lib/modules/`grep 2.4.18-3smp $(LINUX_HEADERS)/linux/version.h|cut -f 2 -d'"'`

$ make
$ su
# make install
# /sbin/depmod -a
/etc/ld.so.confに/usr/local/libを追加する
# /sbin/ldconfig
デバイスを作る。
# prog/mkdev/mkdev.sh
センサーを検出する。
# prog/detect/sensors-detect 指示にしたがって適当に答えていくと、起動スクリプトとmodules.confを 作成してくれる。
WARNING! If you have some things built into your kernel, the 
below list will contain too many modules. Skip the appropriate ones!
To load everything that is needed, add this to some /etc/rc* file:

#----cut here----
# I2C adapter drivers
modprobe i2c-isa
# I2C chip drivers
modprobe via686a
#----cut here----

To make the sensors modules behave correctly, add these lines to either
/etc/modules.conf or /etc/conf.modules:

#----cut here----
# I2C module options
alias char-major-89 i2c-dev
#----cut here----
また、/etc/sysconfig/lm_sensorsも自動生成される。
Do you want to generate /etc/sysconfig/lm_sensors? (YES/no): 
Copy prog/init/lm_sensors.init to /etc/rc.d/init.d/lm_sensors
for initialization at boot time.

# cp prog/init/lm_sensors.init /etc/rc.d/init.d/lm_sensors
# cd /etc/rc.d/init.d
# chkconfig --add lm_sensors
# /etc/rc.d/init.d/lm_sensors restart
うまく行っていればsensorsコマンドで次のような出力が得られる。
[root@selespeed detect]# sensors
eeprom-i2c-0-50
Adapter: SMBus Via Pro adapter at 5000
Algorithm: Non-I2C SMBus adapter
Memory type:            SDRAM DIMM SPD
SDRAM Size (MB):        512

eeprom-i2c-0-51
Adapter: SMBus Via Pro adapter at 5000
Algorithm: Non-I2C SMBus adapter
Memory type:            SDRAM DIMM SPD
SDRAM Size (MB):        512

via686a-isa-6000
Adapter: ISA adapter
Algorithm: ISA algorithm
CPU core:  +1.38 V  (min =  +0.00 V, max =  +3.03 V)   
+2.5V:     +1.36 V  (min =  +2.29 V, max =  +2.74 V)   ALARM
I/O:       +3.22 V  (min =  +2.95 V, max =  +3.62 V)   
+5V:       +4.75 V  (min =  +4.47 V, max =  +5.49 V)   
+12V:     +12.40 V  (min = +10.79 V, max = +13.18 V)   
CPU Fan:  5625 RPM  (min = 3000 RPM, div = 2)          
P/S Fan:  5921 RPM  (min = 3000 RPM, div = 2)          
SYS Temp:  +35.3  (limit =  +60, hysteresis =  +50) 
CPU Temp:  +46.3  (limit =  +60, hysteresis =  +50) 
SBr Temp:  +25.1  (limit =  +60, hysteresis =  +50) 
閾値などはマシンに合わせて/etc/sensors.confで調整する。