Notebook ASUS M6N

Wstęp

Konfiguracja sensorów systemowych jest szczególnie istotna na komputerach mobilnych. Jedną z najczęściej spotykanych przyczyn awarii komputerów jest przegrzanie. Dzięki Linuxowym narzędziom lm_sensors możemy efektywnie monitorować stan naszego komputera, a jeśli to konieczne dzięki dodatkowym narzędziom takim jak cpufrequtils możemy zapobiegać przegrzaniu komputera poprzez obniżenie napięcia i poziomu wydajności procesora. W ten sposób możemy efektywnie używać nasz komputer nawet przez bardzo długi okres czasu.

Konfiguracja sensorów systemowych w Linuxie nie jest trudna, ale może się różnić w zależności od modelu sprzętu. Przekonałem się, że duża część konfiguracji zapewnianej przez pakiet lm_sensors wymaga dodatkowej optymalizacji, bez niej nie działała doskonale. Postaram się tutaj podzielić moją konfiguracją pochodząca z mojego notebooka ASUS M6N, który jest dość starym ale ciągle działającym komputerem. Opisana poniżej konfiguracja dotyczy Gentoo Linuxa, ale jej najważniejsza część czyli plik konfiguracyjny lm_sensors powinien działać w dowolnej dystrybucji. Rozpocznę swój opis od konfiguracji kernela.

Konfiguracja kernela

Mój ASUS M6N posiada czujnik adm1021. Musiałem zaznaczyć w kernelu więcej opcji niż tylko moduł dla czujnika jaki posiadam aby sprawić, że lm_sensors będą działać poprawnie. Aby skonfigurować kernel musiałem wejść do katalogu z jego źródłami i uruchomić menuconfig wykonując następujące komendy w terminalu:

cd /usr/src/linux
make menuconfig

Następnie musiałem zaznaczyć wszystkie moduły potrzebne aby moje sensory zadziałały. Wiele dystrybucji dostarcza wszystkie możliwe moduły czujników, ale w Gentoo tak nie postępujemy. Chcę tutaj pokazać dokładnie, które moduły są wymagane. Rzuć okiem na poniższa listę modułów.

Konfiguracja Kernela Linuxa: moduły Czujników Kernela
Device Drivers  --->
    [*] Misc devices  --->
        EEPROM support  --->
             <M> Old I2C EEPROM reader
    <M> I2C support  --->
        <M> I2C device interface
            I2C Hardware Bus support --->  
                <M> Intel 82801 (ICH/PCH)
    <M> Hardware Monitoring Support --->
        <M> Analog Devices ADM1021 and compatibles

Jak widzisz większa część obsługi sensorów będzie budowana jako moduły. To jest bardzo ważne, gdyż te moduły będą ładowane przez usługę systemową lm_sensors. Teraz możemy skompilować, zainstalować i wykorzystać nowy kernel. Zwykle dokonuję tego wykonując następujące komendy w terminalu:

cd /usr/src/linux
make && make modules_install install

Teraz należy zrestartować komputer z nowym kernelem i zainstalować lm_sensors.

Konfiguracja Lm Sensors

Ja używam lm_sensors 3.x i nie polecam używania starszych wersji. Aby zainstalować lm_sensors w systemie Gentoo należy wydać następującą komendę w terminalu::

emerge -av sys-apps/lm_sensors

Następną rzeczą jaką trzeba zrobić to upewnić się, że programy, które są w stanie wykorzystać czujniki systemowe będą skompilowane, ze wsparciem dla tej funkcji. Aby tego dokonać musimy dodać flagę use lm_sensors do naszego pliku /etc/make.conf. Po dopisaniu tej flagi, dobrze jest sprawdzić, które z zainstalowanych programów powinny zostać ponownie skompilowane. Można to sprawdzić wykorzystując narzędzie equery z pakietu gentoolkit w ten sposób:

equery hasuse lm_sensors
 * Searching for USE flag lm_sensors ... 
[IP-] [  ] kde-base/ksysguard-4.4.4:4.4
[IP-] [  ] net-analyzer/net-snmp-5.4.2.1-r4:0
[IP-] [  ] sys-power/cpufreqd-2.4.2:0

Po przebudowaniu wszystkich pakietów możemy przejśc do konfiguracji lm_sensors. Najpierw należy dokonać konfiguracji modułów lm_sensors. Wraz z pakietem lm_sensors jest dostarczany program sensors-detect, niestety nie mógł on odnaleźć czujników na moim notebooku. Dokonałem konfiguracji ręcznie edytując plik konfiguracyjny /etc/conf.d/lm_sensors. Możesz obejrzeć plik poniżej.

Wyświetl pełny plik konfiguracyjny /etc/conf.d/lm_sensors
  1. # The format of this file is a shell script that simply defines variables:
  2. # HWMON_MODULES for hardware monitoring driver modules, and optionally
  3. # BUS_MODULES for any required bus driver module (for example for I2C or SPI).
  4.  
  5. # Load modules at startup
  6. LOADMODULES=yes
  7.  
  8. # Initialize sensors at startup
  9. INITSENSORS=yes
  10.  
  11. #HWMON_MODULES="adm1021"
  12.  
  13. # For compatibility reasons, modules are also listed individually as variables
  14. # MODULE_0, MODULE_1, MODULE_2, etc.
  15. # Please note that the numbers in MODULE_X must start at 0 and increase in
  16. # steps of 1. Any number that is missing will make the init script skip the
  17. # rest of the modules. Use MODULE_X_ARGS for arguments.
  18. #
  19. # You should use BUS_MODULES and HWMON_MODULES instead if possible.
  20. MODULE_0=i2c-i801
  21. MODULE_1=i2c-dev
  22. MODULE_2=eeprom
  23. MODULE_3=adm1021
  24. MODULE_3_ARGS=force_max1617a=0,0x4c

Jak widzisz najważniejsze linie w tym pliku znajdują się na samym dole i są odpowiedzialne za ładowanie modułów. Możesz tu zobaczyć nazwy modułów, które zaznaczyłem powyżej w kernelu. Bardzo ważną rzeczą dla sensorów ASUS M6N jest przekazanie dodatkowego argumentu do głównego modułu czujników adm1021. Bez argumentu force_max1617a=0,0x4c układ czujnika dla ASUS M6N nie będzie zainicjalizowany.

Ostatnią rzeczą jaką musimy zrobić to skonfigurować czujniki. Domyślna konfiguracja dla lm_sensors jest trzymana w pliku /etc/sensors3.conf. Przekonałem się, że konfiguracje przechowywane tam dotyczące sensorów mojego notebooka są dalekie od doskonałości. Dlatego stworzyłem własną konfigurację. Ważną rzeczą jest aby pamiętać o nie dokonywaniu zmian w domyślnym pliku, ponieważ stracisz swoją konfigurację przy każdej aktualizacji lm_sensors. Powinno się stworzyć osobną konfigurację w katalogu /etc/sensors.d/. Poniżej możesz zobaczyć plik konfiguracyjny stworzony na potrzeby czujników mojego notebooka.

Wyświetl pełny plik konfiguracyjny /etc/sensors.d/asus_notebook
  1. chip "max1617a-*"
  2.  
  3. label temp1 "Board Temp"
  4. label temp2 "CPU Temp"
  5. set temp1_max 66
  6. set temp1_min 40
  7. set temp2_max 90
  8. set temp2_min 50

Jak widzisz konfiguracja jest stosunkowo nieskomplikowana. Mój układ posiada dwa czujniki jeden dla procesora drugi dla płyty głównej. W pliku konfiguracyjnym podaje nazwę układu czujnika, etykiety każdego z sensorów oraz wartość minimalnych i maksymalnych dopuszczalnych temperatur.

Teraz mogę wykorzystać moje sensory. Mogę je uruchomić wykonując następującą komendę w terminalu:

/etc/init.d/lm_sensors start

Aby sprawić żeby moje lm_sensors startowały jako usługa systemowa muszę wykonać następującą komendę w terminalu:

rc-update add lm_sensors default

Aby sprawdzić stan temperatury mojego komputera muszę wykonać następującą komendę w terminalu:

sensors
max1617a-i2c-0-4c
Adapter: SMBus I801 adapter at 0540
Board Temp:  +49.0°C  (low  = +40.0°C, high = +66.0°C)
CPU Temp:    +84.0°C  (low  = +75.0°C, high = +105.0°C)

Dowód, że to działa

Źródła


Komentarze

Jeśli znalazłeś jakieś błędy w powyższej informacji lub po prostu chcesz wypowiedzieć swoje zdanie na jej temat, będę wdzięczny za pozostawienie komentarza.
Wszystkie komentarze będą pokazywać się na stronie po tym jak zostaną zatwierdzone. Przepraszam za to ale chcę mieć pewność, że moja strona będzie wolna od obraźliwych lub wulgarnych treści. Nie mam nic przeciwko krytyce ale zrób to właściwie dobierając słowa.

Pozostaw komentarz