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
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:
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:
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
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
*) 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
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
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
Kod: Zaznacz cały
./configure --prefix=/usr --disable-klibc --enable-shared --enable-static
make
Kod: Zaznacz cały
make install DESTDIR=/sciezka_do_KR
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
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*/*
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
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
Instalujemy paczkę:
Kod: Zaznacz cały
installpkg ../packages/sysfsutils-2.0.0-prescott-1.tgz
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
Kod: Zaznacz cały
make user PREFIX=/usr
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
Kod: Zaznacz cały
mv etc/sensors.conf etc/sensors.conf.new
Kod: Zaznacz cały
chown -R root.bin usr/bin
chown -R root.bin usr/sbin
Kod: Zaznacz cały
mkdir install
cat ../src/slack-desc.lm_sensors > install/slack-desc
cat ../src/lm_sensors-doinst.sh > install/doinst.sh
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
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
W Miscellaneous I2C Chip support wystarczy zazwyczaj zaznaczyć tylko
Kod: Zaznacz cały
<M> EEPROM reader
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
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