Instalacja i konfiguracja lm_sensors

Slackware FAQ - czyli baza pytań i odpowiedzi.

Moderatorzy: Moderatorzy, Administratorzy

ODPOWIEDZ
sayetan
Moderator w st. spocz.
Posty: 2193
Rejestracja: 2004-06-20, 21:47
Lokalizacja: Jelenia Góra

Instalacja i konfiguracja lm_sensors

Post autor: sayetan »

[center]Instalacja i konfiguracja lm_sensors[/center]

UWAGA: Ostatnia wersja lm_sensors wymaga do kompilacji biblioteki libsysfs, którą można znaleźć w sysfsustils pod adresem http://linux-diag.sourceforge.net/Sysfsutils.html

Spis treści:

Kod: Zaznacz cały

1. Wstęp
2. Instalacja
  a)Konfiguracja jądra
  b)Instalacja standardowa
  c)Instalacja przez SlackBuild (tylko dla jądra 2.6.*)
3. Konfiguracja lm_sensors
  a) Pierwsza konfiguracja
  b) Polecenie sensors
  c) Plik /etc/sensors.conf
4. Konfiguracja fancontrol

1. Wstęp

lm_sensors to pakiet programów do monitorowania temperatury i napięć w komputerze, jak również do kontrolowaniu prędkości obrotów jego wentylatorów. Każdy wie że cisza lepiej wpływa na prace przy komputerze a odpowiedni monitoring zapewni naszym podzespołom długie życie. Zapraszam do lektury.

2. Instalacja

Proces instalacji zależny jest od wersji jądra, ponieważ jądra z serii 2.4.* nie posiadają obsługi sensorów, trzeba je samemu ściągnąć i zainstalować.
<BLOCKQUOTE>a) Konfiguracja jądra
W tym punkcie omówie poprawną konfiguracje jądra opierając się o wersje 2.4.31 oraz o wersje 2.6.12. Zacznijmy:

2.4.31
Character Devices > I2C support --->

Kod: Zaznacz cały

<M> I2C support                                                   
<M> I2C bit-banging interfaces
<M> I2C /proc interface (required for hardware sensors)
2.6.12
Device Drivers > I2C support --->

Kod: Zaznacz cały

<*> I2C support
<*>   I2C device interface
Device Drivers > I2C support > I2C Algorithms --->

Kod: Zaznacz cały

<*> I2C bit-banging interfaces
Device Drivers > I2C support > I2C Hardware Bus support --->

Kod: Zaznacz cały

<*> ISA Bus support                                            
<*> Nazwa Chipsetu Płyty Głównej
Device Drivers > I2C support > Hardware Sensors Chip support --->

Kod: Zaznacz cały

<*> Winbond W83627HF, W83627THF, W83637HF, W83697HF
W Hardware Sensors Chip support wybieramy taki sensor jaki jest na naszej płycie. Jeśli nie wiesz jaki sensor posiada Twoja płyta, to:
*) przejdź do instalacji lm_sensors i po zainstalowaniu uruchom # sensors-detect
*) sprawdź na swojej płycie
*) sprawdź w instrukcji od płyty głównej.
Oczywiście można zaznaczyć te rzeczy jako moduły, ale potem trzeba będzie je ładować. W dalszej części artykułu będe opierał się o wbudowaną obsługe.


b)Instalacja standardowa
Jak już wcześniej wspomniałem, zarówno proces konfiguracji jądra, jak i instalcji lm_sensors troche się od siebie różni na różnych wersjach jądra.

2.4.31 ściągamy i2c oraz lm_sensors

instalacja i2c:

Kod: Zaznacz cały

# tar xzf i2c-2.9.1.tar.gz
# cd i2c-2.9.1
# make
# make install
# depmod -a
Od teraz w /lib/modules/2.4.31/kernel/drivers/i2c/ będą nowe moduły, te które obsługiwać będą nasze sensory.

instalacja lm_sensors

Kod: Zaznacz cały

# tar xzf lm_sensors-2.9.1.tar.gz
# cd lm_sensors-2.9.1
# make
# make install PREFIX=/usr
2.6.12: ściągamy lm_sensors

instalacja lm_sensors

Kod: Zaznacz cały

# tar xzf lm_sensors-2.9.1.tar.gz
# cd lm_sensors-2.9.1
# make user
# make user_install PREFIX=/usr

c) Instalacja przez SlackBuild
Na swoje potrzeby stworzyłem SlackBuild, wszystkie potrzebne pliki są poniżej:

Plików nie ma ponieważ zginęły na serverze. Będą jak uda mi się je odtworzyć

Po ściągnięciu wystarczy wydać polecenie # chmod 700 lm_sensors.SlackBuild i uruchomić # ./lm_sensors.SlackBuild. Jak wszystko pójdzie ok, to w /tmp będzie paczka, wystarczy ją zainstalować:

# installpkg /tmp/lm_sensors-2.9.1-i486-1.tgz

To wszystko. Możesz już przejśc do konfiguracji lm_sensors.</BLOCKQUOTE>

3. Konfiguracja lm_sensors

Konfiguracja lm_sensors przebiega w dwóch etapach, ale polecenie # sensors ma tutaj istotne znaczenie, ponieważ to dzięki niemu będzie aktualizować zmiany w pliku /etc/sensors.conf.
<BLOCKQUOTE>a) Pierwsza konfiguracja
Zaczniemy od wykrycia sensorów, do tego służy polecenie # sensors-detect. Jest to konfigurator tekstowy, a pytać będzie o czynności jakie ma wykonać. Zaczynamy:

Kod: Zaznacz cały

We can start with probing for (PCI) I2C or SMBus adapters.
You do not need any special privileges for this.
Do you want to probe now? (YES/no): YES

We will now try to load each adapter module in turn.
Load `rivatv' (say NO if built into your kernel)? (YES/no): no       < tego modułu nie ma w jądrze
Load `i2c-nforce2' (say NO if built into your kernel)? (YES/no): no  < ten moduł mamy wkompilowany

To continue, we need module `i2c-dev' to be loaded.
If it is built-in into your kernel, you can safely skip this.
i2c-dev is not loaded. Do you want to load it now? (YES/no): no     < ten moduł mamy wkompilowany

Do you want to scan the ISA bus? (YES/no): YES

Do you want to scan for Super I/O sensors? (YES/no): YES

Do you want to scan for secondary Super I/O sensors? (YES/no): YES

I will now generate the commands needed to load the I2C modules.
Sometimes, a chip is available both through the ISA bus and an I2C bus.
ISA bus access is faster, but you need to load an additional driver module
for it. If you have the choice, do you want to use the ISA bus or the
I2C/SMBus (ISA/smbus)? ISA

Do you want to generate /etc/sysconfig/lm_sensors? (YES/no): no
Wpis o ładowaniu modułów możemy sobie pominąć(ale tylko na jądrze 2.6.*) ponieważ to co potrzebne mamy wkompilowane w jądro. Jeżeli wszystko poszło ok, wydajemy polecenie # sensors -s a następnie # sensors. Te ostatnie pokaże nam działanie sensorów.

b) Polecenie sensors
Ten program wyświetla nam aktualne temperatury naszych podzespółów oraz napięcia. Program jest dosyć prosty w użyciu, opisz tutaj najczęściej stosowane paramtery:

# sensors - pokazuje pomiary z czujników
# sensors -s - ustawia nowe wartości zmienione w pliku /etc/sensors.conf
# sensors -f - pokazuje temperatury w stopniach fahrenheit
# sensors -c /ścieżka/sensors.conf - wgrywa alternatywny config

Należy pamiętać aby po każdej zmianie w pliku /etc/sensors.conf wydać polecenie # sensors -s.

c) Plik /etc/sensors.conf
W tym pliku przechowywane są inforamcje dotyczące konfiguracji wszystkich Chipów, dlatego najlepszym wyjściem jest skasowanie tego co jest nam niepotrzebne. W pliku powinny zostać wpisy pomocy(czyli to na początku pliku co jest zahaszowane[#]) i wpis dotyczący naszego chipu(zaczynający sie od jego nazwy np. chip "w83627thf-*" "w83637hf-*"). Posłuże się tutaj przykładem konfiguracji Chipu w83627thf-*. Jak zapewne zauważyliście po wydaniu polecenia # sensors pokazuje nam temp1: zamiast np. M/B Temp: to wszystko właśnie zmienia sie w pliku konfiguracyjnym.

Kod: Zaznacz cały

# Ten wpis oznacza że wszystko co jest poniżej dotyczy tego Chipa
chip "w83627thf-*" "w83637hf-*"

# Cały wpis poniżej ustawia nam nazwy dla odczytów poszczególnych napięć,
# możemy to zostawić tak jak jest, nic nie trzeba zmieniać.    
  
    label in0 "VCore"
    label in1 "+12V"
    label in2 "+3.3V"
    label in3 "+5V"
    label in4 "-12V"
    label in7 "V5SB"
    label in8 "VBat"

# Tutaj są skomplikowane obliczenia więc dajmy sobie spokój z ich zmianą.
  
    compute in1 ((28/10)+1)*@, @/((28/10)+1)
    compute in3 ((34/51)+1)*@, @/((34/51)+1)
    compute in4 (5.14*@)-14.91, (@+14.91)/5.14
    compute in7 ((6.8/10)+1)*@ ,  @/((6.8/10)+1)

# Ustawienia granic dla alarmu. Ustawiałem wartości wg standardu ATX 2.01.
# Jak spojrzymy pare linijek wyżej zobaczymy że "in0" odpowiada za "VCore" itd.
  
    set in0_min vid * 0.95
    set in0_max vid * 1.05
    set in1_min 12 * 0.955
    set in1_max 12 * 1.05
    set in2_min 3.3 * 0.96
    set in2_max 3.3 * 1.04
    set in3_min 5.0 * 0.95
    set in3_max 5.0 * 1.05
    set in4_min -12 * 0.955
    set in4_max -12 * 1.05
    set in7_min 5 * 0.95
    set in7_max 5 * 1.05
    set in8_min 3.0 * 0.80
    set in8_max 3.0 * 1.20

# Wpis poniżej określa typ czujnika jaki jest zainstalowany do pomiaru.
# 1 = dioda, 3435 = thermistor w przypdaku mojego chipsetu.
   
    set sensor1 3435
    set sensor2 1
    set sensor3 3435

# Ustalamy jak mają sie nazywać poszczególne odczyty z czujników.

    label temp1 "M/B Temp"
    label temp2 "CPU Temp"
    label temp3 "NB Temp"

# Zakres w jakim ma sie włączać alarm
# tempX_over - alarm sie włącza, tempX_hyst - alarm sie wyłącza.
# Zalecane jest aby tempX_hyst było a pare stopni niższa niż tempX_over
# Wartości 52 oraz 47 to minimum.
  
    set temp1_over 40
    set temp1_hyst 35
    set temp2_over 60
    set temp2_hyst 50
    set temp3_over 52
    set temp3_hyst 47

# Włączanie alarmu, jeśli wiatraczki kręcą się później.
# 2675 obrotów to minimum. Dlatego poniżej odczytuje jako 0.
  
    set fan1_min 4500
    set fan2_min 2675

# Nadajemy nazwy wiatraczkom

    label fan1 "NB Fan"
    label fan2 "CPU Fan"

# Ignorujemy reszte, której nie chcemy:

    ignore fan3
    ignore vid
    ignore alarms

# Włączamy alarm przez pc_speaker
    set beep_enable 1
</BLOCKQUOTE>
4. Konfiguracja fancontrol

Program fancontrol służy do regulowania obrotów wentylatorów zależnie od temperatury. Żeby fancontrol zadziałał musimy pierw go skonfigurować. Do tego służy polecenie pwmconfig. Po uruchomieniu powinniśmy ujrzeć coś podobnego:

Kod: Zaznacz cały

Found the following PWM controls:
   0-0290/pwm1
   0-0290/pwm2
   0-0290/pwm3

Found the following fan sensors:
   0-0290/fan1_input     current speed: 4856 RPM
   0-0290/fan2_input     current speed: 2973 RPM
   0-0290/fan3_input     current speed: 0 ... skipping!

Warning!!! This program will stop your fans, one at a time,
for approximately 5 seconds each!!!
This may cause your processor temperature to rise!!!
If you do not want to do this hit control-C now!!!
Hit return to continue:
Tak, to prawda. pwmconfig rzeczywiście zatrzyma nasze wentylatory w komputerze, dlatego do tego punku zalecam ściągnięcie obudowy z boku, ponieważ będziemy musieli zdefiniować kiedy nasz wentylatorek przestaje sie kręcić. Naciskamy enter i dostajemy kolejny komunikat:

Kod: Zaznacz cały

Testing pwm control 0-0290/pwm1 ...
    0-0290/fan1_input ... speed was 4856 now 0
    It appears that fan 0-0290/fan1_input
    is controlled by pwm 0-0290/pwm1
    Would you like to generate a detailed correlation (y)?
Wciskamy y, enter i dostajemy coś takiego:

Kod: Zaznacz cały

    PWM 255 FAN 5075
    PWM 240 FAN 5075
    PWM 225 FAN 5000
    PWM 210 FAN 4787
    PWM 195 FAN 4530
    PWM 180 FAN 4245
    PWM 165 FAN 3947
    PWM 150 FAN 3668
    PWM 135 FAN 3375
    PWM 120 FAN 3040
    PWM 105 FAN 2700
    PWM 90 FAN 0
    Fan Stopped at PWM = 90
Polecam zapisać sobie to gdzieś do pliku, jaką małą podpowiedź. Jak widać znowu daje o sobie znać limit 2675 RPM, na szczęście da się to obejść. pwmconfig testuje teraz drugi wentylator:

Kod: Zaznacz cały

  0-0290/fan2_input ... speed was 2973 now 0
    It appears that fan 0-0290/fan2_input
    is controlled by pwm 0-0290/pwm2
Would you like to generate a detailed correlation (y)?
Tutaj czynimy tak samo jak poprzednio, dusimy y i enter, znowu dostajemy cyferki:

Kod: Zaznacz cały

    PWM 255 FAN 2973
    PWM 240 FAN 2960
    PWM 225 FAN 2800
    PWM 210 FAN 0
    Fan Stopped at PWM = 210
I znowu ten limit... ale to nic, zaraz zobaczysz, że można to obejść. Na pytanie:

Kod: Zaznacz cały

Did you see/hear a fan stopping during the above test (n)? 
odpowiadamy y i na następne pytanie:

Kod: Zaznacz cały

The fancontrol script can automatically respond to temperature changes
of your system by changing fanspeeds.
Do you want to set up its configuration file now (y)? 
też y. Naciskamy enter potwierdzając ścieżke do pliku konfiguracyjnego(/etc/fancontrol). Teraz będzie troche zabawy, głównie po to trzeba zdjąć boczną ściankę komputera, aby widzieć kiedy wentylator zatrzymuje się.

Kod: Zaznacz cały

Select fan output to configure, or other action:
1) 0-0290/pwm3	       4) Change INTERVAL     7) Show configuration
2) 0-0290/pwm2	       5) Just quit
3) 0-0290/pwm1	       6) Save and quit
select (1-n): 
Z wcześniejszych komunikatów(linijka It appears that fan ...) wiem, że 0-0290/pwm1 kieruje wiatraczkiem fan1. Teraz zajmę się jego konfiguracją - naciskam więc klawisz 3 i enter:

Kod: Zaznacz cały

Current temperature readings are as follows:
0-0290/temp1_input	22
0-0290/temp2_input	33
0-0290/temp3_input	33

Select a temperature sensor as source for 0-0290/pwm1:
1) 0-0290/temp1_input
2) 0-0290/temp2_input
3) 0-0290/temp3_input
4) None (Do not affect this PWM output)
select (1-n): 
Wiem że fan1, który kręci sie domyślnie 5000 RPM, to mój wiatraczek od chipsetu nForce3, a temperatura chipsetu to temp3. Tak więc powiązuje pwm1(którzy zarządza fan1) z temp3 nacskając 3:

Kod: Zaznacz cały

Enter the low temperature (C)
at which the fan should be switched off (0):
Tutaj proponuje zastosować domyślne wartości abyś zrozumiał o co chodzi, jak zrozumiesz wtedy sobie ustawisz tyle ile potrzebujesz.

Kod: Zaznacz cały

Enter the high temperature (C)
at which the fan should be switched to full speed (60):
Tutaj sytuacja się powtarza.

Kod: Zaznacz cały

Enter the minimum PWM value (0-255)
at which the fan STARTS spinning (press t to test) (150): 
O! Dochodzimy do sedna sprawy, naciskamy klawisz "t" i patrzymy na wentylatorek kiedy zacznie się kręcić, mniej więcej tak:

Kod: Zaznacz cały

Now we increase the PWM value in 10-unit-steps.
Let the fan stop completely, then press return until the
fan starts spinning. Then enter 'y'.
We will use this value +20 as the starting speed.
Setting 0-0290/pwm1 to 10...
Setting 0-0290/pwm1 to 20...
Setting 0-0290/pwm1 to 30...
Setting 0-0290/pwm1 to 40...
Setting 0-0290/pwm1 to 50...
Setting 0-0290/pwm1 to 60...
Setting 0-0290/pwm1 to 70...70
OK, using 90
Kiedy widzimy że np. przy 70 wentylatorek zaczyna się kręcić, wpisujemy tą wartość, a program sam doda 20 ze względów bezpieczeństwa.

Kod: Zaznacz cały

Enter the minimum PWM value (0-255)
at which the fan STOPS spinning (press t to test) (100): 
Tutaj ta sama sytuacja, oczywiście możemy pominąć test i zastosować wartości o których mówiłem wcześniej, że można wyeksportować do jakiegoś pliku w formie ściągi.

Kod: Zaznacz cały

Now we decrease the PWM value in 10-unit-steps.
Let the fan reach full speed, then press return until the
fan stops spinning. Then enter 'y'.
We will use this value +20 as the minimum speed.
Setting 0-0290/pwm1 to 245...
Setting 0-0290/pwm1 to 235...
Setting 0-0290/pwm1 to 225...
Setting 0-0290/pwm1 to 215...
Setting 0-0290/pwm1 to 205...
Setting 0-0290/pwm1 to 195...
Setting 0-0290/pwm1 to 185...
Setting 0-0290/pwm1 to 175...
Setting 0-0290/pwm1 to 165...
Setting 0-0290/pwm1 to 155...
Setting 0-0290/pwm1 to 145...
Setting 0-0290/pwm1 to 135...
Setting 0-0290/pwm1 to 125...
Setting 0-0290/pwm1 to 115...
Setting 0-0290/pwm1 to 105...
Setting 0-0290/pwm1 to 95...
Setting 0-0290/pwm1 to 85...
Setting 0-0290/pwm1 to 75...
Setting 0-0290/pwm1 to 65...
Setting 0-0290/pwm1 to 55...
Setting 0-0290/pwm1 to 45...45
OK, using 65
Tak samo postępujemy z 0-0290/pwm2 i powiązujemy go z odpowiednim pomiarem temperatury. Kiedy już skończymy i ujrzymy ponownie prośbe o wpisanie literki, wciskamy 4.

Kod: Zaznacz cały

Current interval is 10 seconds.
Enter the interval at which fancontrol should update PWM values (in s):
wartość zmieniamy na z 10 na 5 i wciskamy enter. Klawisz 7 pokazuje konfiguracje, a klawiszem 6 zapisujemy zmiany i wychodzimy. Kiedy mamy już poprawnie skonfigurowany config od fancontrol nie pozostaje nic innego jak go uruchomić. Wpisujemy # fancontrol & i dostajemy:

Kod: Zaznacz cały

Loading configuration from /etc/fancontrol ...
Common settings:
  INTERVAL=5

Settings for 0-0290/pwm1:
  Depends on 0-0290/temp3_input
  Controls 
  MINTEMP=20
  MAXTEMP=60
  MINSTART=100
  MINSTOP=65

Settings for 0-0290/pwm2:
  Depends on 0-0290/temp2_input
  Controls 0-0290/fan1_input
  MINTEMP=10
  MAXTEMP=60
  MINSTART=100
  MINSTOP=95

Enabling PWM on fans...
Starting automatic fan control...
Od teraz możemy zauważyć jak zrobiło się cicho :) Pozostaje nam teraz dopisać dwa polecenia do skryptów startowych. Może to być np. /etc/rc.d/rc.local:

Kod: Zaznacz cały

#!/bin/sh
#
# /etc/rc.d/rc.local:  Local system initialization script.
#
# Put any local setup commands in here:

# Przeładowanie konfiguracji /etc/sensors.conf
/usr/bin/sensors -s

# Uruchomienie fancontrol
/usr/sbin/fancontrol 1> /dev/null &
Celowo tutaj użyłem przekierowania stdout, ponieważ w razie jego braku podczas startu wywali nam na konsole mase śmieci. To już koniec.

Artykuł jest troche długi i troche bałaganu w nim, ale to co tutaj opisałem wcale nie wygląda na takie trudno i zagmatwane.

Autor: sayetan
Poprawki: bocian, difrost
Ostatnio zmieniony 2006-07-03, 15:30 przez sayetan, łącznie zmieniany 5 razy.
ODPOWIEDZ