Podobnie jak w innych systemach uniksowych obowiązuje
tutaj zasada "everything is a file", czyli wszystko jest plikiem.
Dzięki takiemu podejściu uproszczono sposób komunikacji z
urządzeniami, poprzez odwoływanie się do specjalnych plików,
odpowiadających konkretnym urządzeniom. Pliki te są przechowywane w
katalogu /dev, zwykły użytkownik nie musi się
martwić o jego zawartość, wystarczy że będzie znał powiązania
między fizycznymi urządzeniami a nazwami tych plików.
Z nazw urządzeń najczęściej korzysta się w przypadku operacji
dyskowych, warto zatem znać zasadę ich określania, więcej
szczegółów na ten temat podano w tym dokumencie.
Podstawowe informacje o urządzeniu
Nazwy urządzeń nadawane są tak, aby ułatwiać życie użytkownikom,
dla jądra są właściwie obojętne. Jądro rozróżnia urządzenia
za pomocą pary liczb: major (głównej) i
minor (pobocznej). To jakie
są wartości tych liczb odczytamy następująco:
ls -l /dev/hda2
brw-rw---- 1 root disk 3, 2 2005-11-11 15:08 /dev/hda2 |
Na powyższym przykładzie major jest równa 3, zaś minor jest
równa 2. Pierwsza literka w łańcuchu opisującego uprawnienia
określa rodzaj pliku, znak "b" (jak na powyższym
przykładzie) oznacza urządzenie blokowe, zaś "c" urządzenie
znakowe.
Jeśli potrzebujemy samodzielnie utworzyć plik urządzenia,
to użyjemy do tego programu mknod np.:
# /bin/mknod /dev/zero c 1 5 |
Numery major i minor oraz inne informacje odnajdziemy w dokumentacji
kernela, jeśli zainstalujemy pakiet kernel-doc to
powinniśmy zapoznać się z zawartością pliku
/usr/src/linux/Documentation/devices.txt
Systemy plików-urządzeń
Są dwa sposoby dostarczania plików urządzeń dla systemu:
dev - statyczny
i udev - dynamiczny. Każdy z nich ma wsparcie w
PLD, jednak domyślnie instalowany jest pakiet udev. Jeśli
chcemy użyć innego mechanizmu, wystarczy że odinstalujemy
udev a zainstalujemy dev w jego miejsce, dla pewności tą
operację lepiej przeprowadzać przy pomocy operacji
chroot-a.
Najstarszym z rozwiązań jest pakiet
dev, dzięki niemu w
katalogu /dev zostanie utworzona spora
ilość węzłów (nawet jeśli nie mamy danego rodzaju urządzenia),
wystarczająca dla większości zastosowań. Jeśli jednak mamy
jakieś egzotyczne urządzenie to będziemy musieli samemu
utworzyć wymagane pliki. Pliki urządzeń tworzymy za
pomocą opisanego wcześniej programu mknod.
W odróżnieniu od statycznej bazy plików urządzeń w ostatnim
czasie popularność zdobywają systemy automatycznego tworzenia
węzłów w katalogu /dev. W chwili
podłączenia urządzenia lub startu systemu automatycznie
tworzone są wymagane pliki. Jest to ogromne ułatwienie
dla użytkowników, gdyż nie wymaga od nich wiedzy na ten temat.
UDEV
Udev automatycznie tworzy pliki
urządzeń, jednak sam potrzebuje kilku z nich, aby mógł
zacząć działać, są to: /dev/console,
/dev/null, /dev/zero.
Pliki te są dostarczane razem z pakietem, a więc nie
musimy się to martwić.
System udev jest wart uwagi dlatego, że nie tylko tworzy
wymagane węzły urządzeń lecz dodatkowo
ładuje wymagane moduły jądra dla danego urządzenia.
Więcej informacji o udev znajdziemy w
tym dokumencie
Należy pamiętać o tym, że udev jest wywoływany z
rc-skryptów, i nie wystartuje przy użycia parametru jądra
init lub przy próbie wykonania
operacji chroota z innego systemu.
Wtedy wymagane pliki nie zostaną utworzone, co może
spowodować nieoczekiwane problemy z działaniem programów.
W przypadku wykonania operacji chroota problem ten
rozwiązujemy poprzez wcześniejsze podmontowanie katalogu
/dev z systemu głównego. W pozostałych
przypadkach uruchamiamy skrypt
/etc/rc.d/rc.sysinit, w ostateczności
tworzymy wymagane urządzenia za pomocą programu
mknod lub skądś je kopiujemy.
Operacja chroota została szerzej opisana w
tym dokumencie.
Parametr jądra init jak i wiele innych
szerzej opisano w tym dokumencie.
Jaki system wybrać?
Na stacji roboczej bez
zastanowienia można polecić udev, gdyż pozwoli na
znaczne podniesienie komfortu pracy. W przypadku
serwerów będzie to głównie zależało od preferencji
administratora i wybór nie będzie miał tu większego
znaczenia.
Zupełnie inaczej to wygląda w przypadku
systemów zamkniętych typu chroot, zarówno plikami
urządzeń jak i modułami zajmuje się system gospodarz,
ponadto udev może stać się poważnym wyłomem w
bezpieczeństwie klatki. W takim wypadku powinniśmy
użyć statycznych plików (dev), których lista powinna
zostać poważnie ograniczona do kilku niezbędnych.
|