Next Previous Contents

## 3. The mainboard's sensors

## 3.1 lm-sensors

### Getting the drivers

Get the lm_sensors 2.6.2 or more recent: http://www.lm-sensors.nu/archive/lm_sensors-2.6.2.tar.gz You'll need kernel sources too in order to compile that one.

### Installing them

tar -xzvf i2c-2.6.2.tar.gz

cd i2c-2.6.2

make && make install

Then there was a problem when making install for me, so if it doesn't work, just do the following:

cp kernel/i2c-core.o /lib/modules/`uname -r`/misc/i2c-core.o

cp kernel/i2c-proc.o /lib/modules/`uname -r`/misc/i2c-proc.o

Now let's copy the specific driver:

cp kernel/chips/it87.o /lib/modules/`uname -r`/misc/it87.o

ok now

cp prog/sensors/sensors /usr/bin/sensors

--------------------------------------------------------------------

Edit `/etc/modules.conf` and add to it the following lines:

> `

>     alias char-major-89 i2c-dev
>     options it87 temp_type=0x31

> `

now:

modprobe i2c-proc

modprobe it87

modprobe i2c-isa

sensors

should output you some data

When it works, you can write it to a file, that will be loaded automatically on boot. Under SuSE the file is: `/etc/init.d/boot.local` (used to be `/sbin/init.d/`) and you should just add: `sensors -s` Under mandrake, the install should have created that file: `/etc/init.d/sensors`, which you can edit freely, sensord being just a daemon to watch over temperature and fan speed, I assume no one will need something like that for her/his own machine.

Paolo reports that in order to start up sensord on boot, he put in /etc/sysconfig/sensors:

> `

>     MODULE_0=i2c-proc
>     MODULE_1=it87
>     MODULE_2=i2c-isa

> `

Now as root you should edit your `/etc/sensors.conf` search for that line: `chip "it87-*"` and below you should be able to modify everything to get the right data, here is a copy of what i have in there: (please note that temp1 is trash and only temp2 and temp3 should be kept)

--------------------------------------------------------------------

## 3.2 lm-sensors the Debian way

This time you'll be forced to compile the modules. install the source and programs:

apt-get install lm-sensors lm-sensors-source

> `

>      The upstream lm-sensors maintainers know of a problem using
>      lm-sensors with IBM ThinkPad computers, resulting in
>      firmware corruption.  If you are installing this package on
>      a ThinkPad, you should wait until the upstream maintainers
>      have solved this problem before building modules from it.
>      For more information, see
>      /usr/share/doc/lm-sensors-source/README.thinkpad.
>      IBM ThinkPad brokenness -- really install lm-sensors?

> `

Answer yes to this question, you can't have an IBM thinkpad and the k7s5a in the same box as far as I know!

cd /usr/src

tar xzvf lm-sensors.tar.gz

cd modules/lm-sensors/

make && make install

Then you should have modutils take a few arguments, the best way is probably to use a new file, like: /etc/modutils/sensors with this content:

> `

>     alias char-major-89 i2c-dev
>     options it87 temp_type=0x31

> `

run

update-modules

modprobe i2c-isa it87

You can now type sensors to access to the informations (note that you should edit sensors.conf, otherwise you'll see strange and inaccurate things :] )

You can also put i2c-isa and it87 in /etc/modules (one by line!) to have them be automatically loaded on boot, I don't know yet, how/whether it is possible to use some automatic loading/removing process with /etc/modules.conf

## 3.3 Sensors.conf for the K7s5a

> `

>     #David Thorarinsson explained me that all the 'set' lines should be after the compute ones,
>     #this is now fixed,
>     chip "it87-*"

>     # The values below have been tested on Asus CUSI, CUM motherboards.
>     # Voltage monitors as advised in the It8705 data sheet

>         label in0 "VCore"
>         label in1 "Vcc2.5V"
>         label in2 "+3.3V"
>         label in3 "+5V"
>         label in4 "+12V"
>         label in5 "-12V"
>         label in6 "-5V"
>         label in7 "SB 5V"
>         label in8 "V battery"

>         # vid not monitored by IT8705F
>         ignore  vid

>     # For this family of chips the negative voltage equation is different from
>     # the lm78.  The chip uses two external resistor for scaling but one is
>     # tied to a positive reference voltage.  See ITE8705/12 datasheet (SIS950
>     # data sheet is wrong)

>     # Vs = (1 + Rin/Rf) * Vin - (Rin/Rf) * Vref.
>     # Vref = 4.096 volts, Vin is voltage measured, Vs is actual voltage.

>     #    compute in2 (1 + 1)*@ ,       @/(1 + 1)
>         compute in3 ((6.8/10)+1)*@ ,  @/((6.8/10)+1)
>         compute in4 ((30/10) +1)*@  , @/((30/10) +1)

>     # The next two are negative voltages (-12 and -5).
>     # The following formulas must be used. Unfortunately the datasheet
>     # does not give recommendations for Rin, Rf, but we can back into
>     # them based on a nominal +2V input to the chip, together with a 4.096V Vref.

>     # Formula:
>     #    actual V = (Vmeasured * (1 + Rin/Rf)) - (Vref * (Rin/Rf))
>     #    For -12V input use Rin/Rf = 6.68
>     #    For -5V input use Rin/Rf = 3.33
>     # Then you can convert the forumula to a standard form like:

>         compute in5 -(36/10)*@, -@/(36/10)
>     #(7.67 * @) - 27.36  ,  (@ + 27.36) / 7.67
>         compute in6 -(56/10)*@, -@/(56/10)
>     #(4.33 * @) - 13.64  ,  (@ + 13.64) / 4.33
>         compute in7 ((6.8/10)+1)*@ ,  @/((6.8/10)+1)

>         set in0_min 1.7 * 0.95
>         set in0_max 1.7 * 1.05
>         set in1_min 2.4
>         set in1_max 2.6
>         set in2_min 3.3 * 0.95
>         set in2_max 3.3 * 1.05
>         set in3_min 5.0 * 0.95
>         set in3_max 5.0 * 1.05
>         set in4_min  12 * 0.95
>         set in4_max  12 * 1.05
>         set in5_min -12 * 0.95
>         set in5_max -12 * 1.05
>         set in6_min  -5 * 0.95
>         set in6_max  -5 * 1.05
>         set in7_min   5 * 0.95
>         set in7_max   5 * 1.05

>     # Temperature

>         label temp3       "Processor"
>         set   temp3_over  40
>         set   temp3_hyst  20
>         label temp2       "Mainboard"
>         set   temp2_over  45
>         set   temp2_hyst  25
>         ignore temp1

>     # Fans

>         label fan1"Processor's Fan"
>         set fan1_min 2000
>         ignore fan3
>         ignore fan2
>     #
>     #  If you have a system fan, comment 'ignore fan2'
>     #  and uncomment the following lines :
>     #  Thanks to gro.reirual@erreip
>     #
>     #    label fan2        "System Fan"
>     #    set   fan2_min    3000
>     #    set   fan2_div    4

> `

## 3.4 Sensors on 2.6 kernels

### Kernel 2.6.1 configuration:

> `

>        # Bus options (PCI, PCMCIA, EISA, MCA, ISA)
>        CONFIG_ISA=y
>        # I2C support
>        CONFIG_I2C=m
>        CONFIG_I2C_CHARDEV=m
>        # I2C Hardware Bus support
>        CONFIG_I2C_ISA=m
>        # I2C Hardware Sensors Chip support
>        CONFIG_I2C_SENSOR=m
>        CONFIG_SENSORS_IT87=m

> `

### Setting up the modules

mount sysfs pseudo filesystem if you have not done it yet.

mount -t sysfs sysfs /sys

See Documentation/filesystems/sysfs.txt and Documentation/i2c/sysfs-interface in the kernel sources tree

modprobe it87

modprobe i2c-isa Sensors can be accessed in the sysfs pseudo file system. But if you want you can use the lm_sensors user tools...

### The lm_sensors user tools

Install sensors user tools:

cd lm_sensors-2.8.3

copy this into a file named chips-it87.diff

NOTE: This patch is only required for old versions of lm_sensors, Paolo wrote:

"A reply from lm_sensors developers said that the next version of lm_sensors will fix this. It is already fixed in CVS."

> `

>     --- lib/chips.c Sun Jan 25 00:13:49 2004
>     +++ ../lm_sensors-2.8.3.OK/lib/chips.c  Sat Jan 24 01:23:43 2004
>     @@ -3757,13 +3757,13 @@
>                               R, IT87_SYSCTL_TEMP2, VALUE(3), 1 },
>          { SENSORS_IT87_TEMP3, "temp3", NOMAP, NOMAP,
>                               R, IT87_SYSCTL_TEMP3, VALUE(3), 1 },
>     -    { SENSORS_IT87_TEMP1_LOW, "temp1_hyst", SENSORS_IT87_TEMP1,
>     +    { SENSORS_IT87_TEMP1_LOW, "temp1_min", SENSORS_IT87_TEMP1,
>                                    SENSORS_IT87_TEMP1, RW,
>                                    IT87_SYSCTL_TEMP1, VALUE(2), 1 },
>     -    { SENSORS_IT87_TEMP2_LOW, "temp2_hyst", SENSORS_IT87_TEMP2,
>     +    { SENSORS_IT87_TEMP2_LOW, "temp2_min", SENSORS_IT87_TEMP2,
>                                    SENSORS_IT87_TEMP2, RW,
>                                    IT87_SYSCTL_TEMP2, VALUE(2), 1 },
>     -    { SENSORS_IT87_TEMP3_LOW, "temp3_hyst", SENSORS_IT87_TEMP3,
>     +    { SENSORS_IT87_TEMP3_LOW, "temp3_min", SENSORS_IT87_TEMP3,
>                                    SENSORS_IT87_TEMP3, RW,
>                                    IT87_SYSCTL_TEMP3, VALUE(2), 1 },
>          { SENSORS_IT87_TEMP1_HIGH, "temp1_over", SENSORS_IT87_TEMP1,

> `

apply the patch:

$ patch -p0<chips-it87.diff

$ make user

# make user_install

edit sensors.conf file it87 chip section (There is an example for more recent versions of lm_sensors in the following section)

## 3.5 Newer version of Sensors.conf

This version was sent by Paolo BERVA for lm_sensors 2.8.3.

> `

>     chip "it87-*" "it8705-*" "it8712-*"

>     # The values below have been tested on Asus CUSI, CUM motherboards.

>     # Voltage monitors as advised in the It8705 data sheet

>         label in0 "VCore 1"
>         label in1 "VCore 2"
>         label in2 "+3.3V"
>         label in3 "+5V"
>         label in4 "+12V"
>         label in5 "-12V"
>         label in6 "-5V"
>         label in7 "Stdby"
>         label in8 "VBat"

>         set in0_min 1.7 * 0.95
>         set in0_max 1.7 * 1.05
>         set in1_min 2.4
>         set in1_max 2.6
>         set in2_min 3.3 * 0.95
>         set in2_max 3.3 * 1.05
>         set in3_min 5.0 * 0.95
>         set in3_max 5.0 * 1.05
>         set in4_min 12 * 0.95
>         set in4_max 12 * 1.05
>         set in5_max -12 * 0.95
>         set in5_min -12 * 1.05
>         set in6_max -5 * 0.95
>         set in6_min -5 * 1.05
>         set in7_min 5 * 0.95
>         set in7_max 5 * 1.05
>         #the chip does not support in8 min/max

>         # vid is not monitored by IT8705F
>         # and is not supported by driver at this time
>         ignore  vid

>     # If 3.3V reads 2X too high (Soyo Dragon and Asus A7V8X-X, for example),
>     # comment out following line.
>     #    compute in2   2*@ , @/2
>     #
>         compute in3 ((6.8/10)+1)*@ ,  @/((6.8/10)+1)
>         compute in4 ((30/10) +1)*@  , @/((30/10) +1)
>     # For this family of chips the negative voltage equation is different from
>     # the lm78.  The chip uses two external resistor for scaling but one is
>     # tied to a positive reference voltage.  See ITE8705/12 datasheet (SIS950
>     # data sheet is wrong)
>     # Vs = (1 + Rin/Rf) * Vin - (Rin/Rf) * Vref.
>     # Vref = 4.096 volts, Vin is voltage measured, Vs is actual voltage.

>     # The next two are negative voltages (-12 and -5).
>     # The following formulas must be used. Unfortunately the datasheet
>     # does not give recommendations for Rin, Rf, but we can back into
>     # them based on a nominal +2V input to the chip, together with a 4.096V Vref.
>     # Formula:
>     #    actual V = (Vmeasured * (1 + Rin/Rf)) - (Vref * (Rin/Rf))
>     #    For -12V input use Rin/Rf = 6.68
>     #    For -5V input use Rin/Rf = 3.33
>     # Then you can convert the forumula to a standard form like:
>     #    compute in5 (7.67 * @) - 27.36  ,  (@ + 27.36) / 7.67
>     #    compute in6 (4.33 * @) - 13.64  ,  (@ + 13.64) / 4.33
>     #
>     # this much simpler version is reported to work for a
>     # Eltite Group K7S5A board
>     #
>        compute in5 -(34/10)*@, -@/(34/10)
>        compute in6 -(51/10)*@, -@/(51/10)
>     #   compute in6 -(56/10)*@, -@/(56/10)
>     #
>         compute in7 ((6.8/10)+1)*@ ,  @/((6.8/10)+1)

>     # Temperature
>     #
>     # Important - if your temperature readings are completely whacky
>     # you probably need to change the sensor type.
>     # Adujst and uncomment the appropriate lines below.
>     # The old method (modprobe it87 temp_type=0xXX) is no longer supported.
>     #
>     # 2 = thermistor; 3 = thermal diode
>     #   set sensor1 3
>        set sensor2 2
>        set sensor3 2

>         ignore temp1
>         label temp2       "M/B Temp"
>         set   temp2_over  40
>         set   temp2_min  20
>         label temp3       "CPU Temp"
>         set   temp3_over  45
>         set   temp3_min  25

>     # The A7V8X-X has temperatures inverted, and needs a conversion for
>     # CPU temp. Thanks to Preben Randhol for the formula.
>     #   label temp1       "CPU Temp"
>     #   label temp2       "M/B Temp"
>     #   compute temp1     (-15.096+1.4893*@), (@+15.096)/1.4893

>     # The A7V600 also has temperatures inverted, and needs a different
>     # conversion for CPU temp. Thanks to Dariusz Jaszkowski for the formula.
>     #   label temp1       "CPU Temp"
>     #   label temp2       "M/B Temp"
>     #   compute temp1     (@+128)/3, (3*@-128)

>     # Fans
>         label fan1 "CPU/Fan"
>         set fan1_div 2
>         set fan1_min 2000
>         label fan2 "Sys/Fan"
>         set fan2_div 4
>         set fan2_min 2000
>         ignore fan3

> `

Next Previous Contents