lm_sensors 2.10.0 Slackware Linux HOWTO

Slackware FAQ - czyli baza pytań i odpowiedzi.

Moderatorzy: Moderatorzy, Administratorzy

ODPOWIEDZ
Awatar użytkownika
difrost
Moderator
Posty: 2802
Rejestracja: 2006-03-11, 12:31
Lokalizacja: Wrocław
Kontakt:

lm_sensors 2.10.0 Slackware Linux HOWTO

Post autor: difrost » 2006-03-12, 15:23

lm_sensors 2.10.0 Slackware Linux HOWTO


CEL HOWTO: Opis dotyczy budowy pakietu lm_sensors w wersji 2.10.0, sysfsutils 2.0.0 oraz ,,konfiguracji'' tylko w oparciu o jadra >2.6.12

SPIS TRESCI

Kod: Zaznacz cały

 1. Wstęp
 2. Czego będziemy potrzebować?
 3. Struktura katalogów
 4. Środowisko kompilacji
 5. Schemat budowy pakietów
 6. Kompilacja sysfsutils
 7. Kompilacja lm_sensors
 8. Uruchamianie czujników
1. Wstęp
Na wstępie wytłumaczę dlaczego własnie jądra >2.6.12. Mianowicie dla takich jąder kod sensorow przeniesiony zostal z Opcji Device Drivers > I2C support > Hardware Sensors Chip support do Device Drivers > Hardware Monitoring support.

Opis odnoszący się do wcześniejszych wersji jądra jak i pełna konfiguracja (z cyklu co można dale zrobić gdy mamy działające lm_sensors) znajduje się w świetnym FAQ autorstwa Sayetana, które można znaleźć pod tym adresem -> http://forum.slackware.pl/viewtopic.php?t=5055

Wszystkie czynności przedstawione w tym FAQ, mające na celu utworzenie paczki z lm_sensors i sysfsutils zostały zautomatyzowane w skryptach BBS, które można wykorzystać z systemem BDT lub przerobic na SlackBuildy. W tarballu poza skryptami BBS znajdują się również odpowiednie pliki slack-desc i doinst.sh.

2. Czego będziemy potrzebować?
*) sysfsutils -- ostatnia wersja to 2.0.0; składa się z libsysfs (biblioteki, z której korzysta lm_sensors!!!) oraz systool -- prostego narzędzia napisanego jako przykład wykorzystania biblioteki.
*) lm_sensors -- ostatnia wersja 2.10.0, zawiera ona sporo zmian.

Będziemy paczkować wyniki naszej pracy :) więc potrzebne będa dwa pliki: slack-desc.sysfsutils, slack-desc.lm_sensors.

Na przyklad:
-- slack-desc.sysfsutils:

Kod: Zaznacz cały

sysfsutils: 
sysfsutils: This is sysfsutils package, set of utilities interfacing with sysfs
sysfsutils: virtual system.
sysfsutils: 
sysfsutils: Package includes:
sysfsutils: 	libsysfs - a library for accessing system devices;
sysfsutils: 	systool	 - an aplication to view system device information.
sysfsutils:
sysfsutils:
sysfsutils:
sysfsutils:
-- slack-desc.lm_sensors:

Kod: Zaznacz cały

lm_sensors: 
lm_sensors: This is lm_sensors package.
lm_sensors: 
lm_sensors: lm_sensors package include essential tools for monitoring the 
lm_sensors: hardware health of Linux systems containing hardware health 
lm_sensors: monitoring.
lm_sensors: 
lm_sensors: 
lm_sensors:
lm_sensors:
lm_sensors:
Nie chcemy też, aby instalacja nowej paczki nadpisała nam plik /etc/sensors.conf, więc skorzystamy ze znanego sposobu: tworzymy plik lm_sensors-doinst.sh o znanej postaci :D

Kod: Zaznacz cały

config() {
  NEW="$1"
  OLD="`dirname $NEW`/`basename $NEW .new`"
  if [ ! -r $OLD ]; then
    mv $NEW $OLD
  elif [ "`cat $OLD | md5sum`" = "`cat $NEW | md5sum`" ]; then 
    rm $NEW
  fi
}

config etc/sensors.conf.new
3. Struktura katalogów

Najlepiej jest sobie zorganizować jakoś miejsce pracy. W tym celu tworzymy drzewo katalogów, np:

Kod: Zaznacz cały

./slack_devel
  |
  |__ src
  |__tmp
  |__prod
  \__packages
gdzie:
*) src -- katalog gdzie mamy zapisane źrodła oraz pliki slack-desc.*, lm_sensors-doinst.sh;
*) tmp -- tutaj będziemy rozpakowywać źrodła i kompilować;
*) prod -- KATALOG ROBOCZY (KR), tutaj przekierujemy instalacje;
*) packages -- miejsce do przechowywania pakietów.

4. Środowisko kompilacji

Musimy ustawić sobie środowisko pracy, tj. ustawić zmienne CFLAGS i/lub LDFLAGS (nie musimy ustawiać CXXFLAGS -- nie będziemy mieli do czynienia z kodem C++). Przykładowo:

Kod: Zaznacz cały

export CFLAGS="-O2 -mtune=prescott -pipe"
export LDFLAGS=-s
Proponuje jednak nie używać LDFLAGS w tej postaci. Opcja '-s' powoduje, że podczas linkowania binarki będą ,,wstępnie'' stripowane. Stripowanie jest zdecydowanie lepiej zrobić samemu -- ,,na własną rękę :)'' -- przy użyciu komendy strip (man strip).

Zmienna CFLAGS odpowiada za flagi dodawane przy kompilacji źrodła C. Znaczenie kolejnych opcji jest następujące:
*) -O2 -- włącza optymalizacje kodu na poziomie 2 (poziomów jest 3, w kompilatorach serii 3.4.5 i wyżej jest jeszcze poziom 4). Jest to rozsądny wybór, dlatego, że optymalizacja na poziomie wyższym, tj. 3, rzadko daje pożądany efekt w postaci mniejszej binarki.
*) -mtune=ARCH -- włącza kilka flag optymalizujacych kod specjalnie pod architekture ARCH procesora. Jesli nie wiesz pod jaką nazwą występuje architektura twojego procesora to w man gcc znajdziesz więcej informacji na ten temat. UWAGA!!! Opcja -mtune występuje tylko w kompilatorach GCC 3.4.x i wyższych. We wcześniejszych wersjach należy stosowac opcje -march!
*) -pipe -- opcja ta nie optymalizuje kodu, ale przyspiesza proces kompilacji. Mowi ona kompilatorowi, aby zamiast plików tymczasowych używal potoków, co znacząco przyspiesza kompilacje.

Oczywiście możesz tutaj podawać jakie chcesz opcje.

5. Schemat budowy pakietów
Schemat budowy pakietu jest zasadniczo zawsze taki sam, tj:
1) kompilujemy źrodło (większość pakietów umieszczamy z prefixem ustawionym na /usr);
2) przekierowujemy instalacje do KATALOGU ROBOCZEGO (KR), gdzie będzie składany pakiet;
3) tworzymy w KR katalog install i do niego kopiujemy odpowiedni plik slack-desc i/lub doinst.sh.
4) składamy pakiet komendą makepkg.

Jeszcze jedna mała uwaga:
Jeśli posiadacie komputer z HT lub maszynę wieloprocesorowa (2 to juz wiele:D), to można podać odpowiednią opcję (-jX, gdzie X to ilość wątków) do make, tak aby kompilowane było kilka plików jednocześnie, np. dla HT:

Kod: Zaznacz cały

make -j2
jest dobrym wyborem :).

6. Kompilacja sysfsutils

Zaczynamy od rozpakowania źrodła:

Kod: Zaznacz cały

cd tmp
tar zxvf ../src/sysfsutils-2.0.0.tar.gz
cd sysfsutils-2.0.0
Teraz kompilujemy:

Kod: Zaznacz cały

./configure --prefix=/usr --disable-klibc --enable-shared --enable-static
make
Jesli wszystko poszło dobrze, to teraz przekierowujemy instalację do KR:

Kod: Zaznacz cały

make install DESTDIR=/sciezka_do_KR
UWAGA Zmienna DESTDIR, która znajduje się w większości plików Makefile pozwala na przekierowanie ścieźki instalacji. To co jest podane w DESTDIR będzie prefixem dla podanego wcześniej przy configure --prefix. Nie należy ustawiać --prefix na katalog, do którego chcemy przekierować instalację, dlatego, że format binarek ELF zapisuje takie informacje. Poza tym DESTDIR nie zawsze jest w Makefile. Dla takich pakietów należy poszukać innej alternatywy (istnieje możliwość ustawienia poszczególnych zmiennych PREFIX, BINDIR, ... -- patrz MPlayer -- lub podobnych, np. dla glibc będzie to install_root) lub ,,ręcznie'' wyłuskiwać konkretne pliki.

Po tych operacjach w katalogu KR będziemy mieli całe drzewo naszego pakietu.

Teraz, będąc w katalogu KR, wydajemy komendę, która zestripuje nam biblioteki za pomocą komendy strip (man strip). Usuwa ona niepotrzebne symbole z binarek (--strip-unneeded) lub symbole potrzebne do debugowania (-g).

Kod: Zaznacz cały

  find . | xargs file | grep "executable" | grep ELF | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null
  find . | xargs file | grep "shared object" | grep ELF | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null
Te dwie linijki można używac na każdej generowanej paczce (znajdziemy je rownież w większości SlackBuild'ów) z kilkoma wyjątkami, np. glibc!

Spakujemy strony manuala tak aby paczka była mniejsza (mało to da w tym przypadku, ale w niektórych przypadkach może znacząco zmniejszyć rozmiar paczki):

Kod: Zaznacz cały

gzip -9 usr/man/man*/*
Na koniec kilka kosmetycznych zagrań:
1) Wszystkie pliki wykonywalne znajdujące się w katalogach bin i sbin muszą mieć właściciela ustawionego na root, a grupę na bin:

Kod: Zaznacz cały

chown -R root.bin usr/bin
UWAGA: Użytkownicy Slackware-current posiadający paczke aaa_base-10.2.0-noarch-4 powinni pominąć ten etap, gdyż wraz z tą paczką grupa bin nie jest już potrzebna, a prawa powinny być ustawione na root.root.

2) Tworzymy katalog install, wrzucamy do niego plik slack-desc.sysfsutils i tworzymy paczkę:

Kod: Zaznacz cały

mkdir install
cat ../src/slack-desc.sysfsustils > install/slack-desc
makepkg -l y -c n ../packages/sysfsutils-2.0.0-prescott-1.tgz
Oczywiście zamiast 'prescott' podajemy użytą przez nas (patrz zmienna CFLAGS) architekurę.

Instalujemy paczkę:

Kod: Zaznacz cały

installpkg ../packages/sysfsutils-2.0.0-prescott-1.tgz
I to byłoby na tyle jeśli chodzi o sysfsutils:)

7. Kompilacja lm_sensors

Początek wygląda tak samo, tj. rozpakowujemy paczkę ze źrodłlami lm_sensors do katalogu tmp.

Kompilacja lm_sensors wygląda innaczej niż kompilacja typu ./configure && make && make install. Nie ma tutaj skryptu configure, a kompilacja odbywa się przez wydanie komendy make user. Wcześniej jednak musimy zmienić wartość zmiennej PREFIX w pliku Makefile tak aby wskazywała ona katalog /usr zamiast /usr/local. Robimy to korzystając z sed'a:

Kod: Zaznacz cały

mv Makefile Makefile.backup
sed '/PREFIX/s/\/usr\/local/\/usr/' Makefile.backup > Makefile
Uwaga: Zmienne pliku Makefile (takie jak choćby PREFIX) można zmieniać przez podanie ich w linii komend, np:

Kod: Zaznacz cały

make user PREFIX=/usr
lub exportując zmienną tak jak to zrobiliśmy podczas ustawiania środowiska (zmienne CFLAGS i LDFLAGS). W tym przypadku podawane zmienne z linii komend są ignorowane -- przynajmniej u mnie tak było -- stąd zastosowanie sed'd do zmiany PREFIX.

Przekierowanie instalacji robimy w ten sam sposób jak w przypadku sysfsutils:

Kod: Zaznacz cały

make install DESTDIR=/sciezka_do_KR
cd /sciezka_do_KR
Rownież: stripujemy binarki, kompresujemy manuale -> jak wyżej. Zmieniamy nazwę pliku sensors.conf na sensors.conf.new:

Kod: Zaznacz cały

mv etc/sensors.conf etc/sensors.conf.new
Ustawiamy odpowiedniego wlaściciela i grupę dla binarek:

Kod: Zaznacz cały

chown -R root.bin usr/bin
chown -R root.bin usr/sbin
Tworzymy katalog install i wrzucamy do niego, tym razem, dwa pliki:

Kod: Zaznacz cały

mkdir install
cat ../src/slack-desc.lm_sensors > install/slack-desc
cat ../src/lm_sensors-doinst.sh > install/doinst.sh
Na koniec składamy paczkę do qpy i instalujemy:

Kod: Zaznacz cały

makepkg -l y -c n ../packages/lm_sensors-2.10.0-prescott-1.tgz
installpkg ../packages/lm_sensors-2.10.0-prescott-1.tgz
8. Uruchamianie czujników

Lm_sensors wymaga odpowiednio skompilowanego jądra. Co należy wybrać:

Kod: Zaznacz cały

Device Drivers --> I2C support
<M> I2C support
  <M>   I2C device interface
I2C Algorithms
 <M> I2C bit-banging interfaces
 <M> I2C PCF 8584 interfaces
 <M> I2C PCA 9564 interfaces

I2C Hardware Bus support
 <M> ALI 1535
 <M> ALI 1563
 <M> ALI 15x3
 <M> AMD 756/766/768/8111 and nVidia nForce
 <M> AMD 8111
 <M> Intel 82801 (ICH)
 <M> Intel 810/815
 <M> Intel PIIX4
 <M> Nvidia nForce2, nForce3 and nForce4
 <M> Parallel port adapter (light)
 <M> S3/VIA (Pro)Savage
 <M> S3 Savage 4
 <M> NatSemi SCx200 ACCESS.bus
 <M> SiS 5595
 <M> SiS 630/730
 <M> SiS 96x
 <M> I2C/SMBus Test Stub
 <M> VIA 82C586B
 <M> VIA 82C596/82C686/823x
 <M> Voodoo 3
 <M> PCA9564 on an ISA bus
Jeśli ktoś wie jaką ma szynę (I2C korzysta z ISA i/lub SMBus), to zaznacza oczywiście tylko jeden moduł. Jeśli nie wiesz co zaznaczyć, zaznacz wszystko jako moduł -- tak jak wyżej.

W Miscellaneous I2C Chip support wystarczy zazwyczaj zaznaczyć tylko

Kod: Zaznacz cały

<M> EEPROM reader
Trzeba jeszcze wybrać odpowiedni ,,sterownik'' sensora pomiarowego. W Device Drivers --> Hardware Monitoring support zaznaczamy wszystko jako moduł, chyba, że znamy rodzaj sensora - wtedy wybieramy tylko ten jeden zaznaczając go jako moduł.

Bootujemy się z nowego jadra i jako root odpalamy sensors-detect. Skrypt ten postara się odgadnać jakich modułów należy użyc do obsługi czujników na twojej płycie. Na końcu wyrzuci ich nazwy. Dodajemy odpowiednie wpisy w /etc/rc.d/rc.modules, tak aby potrzebne moduły ładowaly się przy starcie systemu. Do pliku /etc/rc.d/rc.local dodajemy jeszcze linijke:

Kod: Zaznacz cały

/usr/bin/sensors -s
W tym momencie mamy już (zazwyczaj :D) działający pomiar z czujników. Aktualny stan sprawdzamy wydając komendę sensors.

Powinniśmy jeszcze skonfigurować lm_sensors w pliku /etc/sensors.conf. Co tam można zrobić, to już temat na osobny artykul (wersja angielska).


I TO BY BYLO NA TYLE. MILEJ ZABAWY! POZDRAWIAM


Autor: difrost
Ostatnio zmieniony 2006-09-14, 22:57 przez difrost, łącznie zmieniany 6 razy.

ODPOWIEDZ