next up previous contents
Next: Tworzenie i usuwanie urządzeń Up: Podstawowe pojęcia Previous: Podstawowe pojęcia   Spis rzeczy

Typy urządzeń, numery główne i podrzędne

W Linuxie identyfikacja urządzeń odbywa się poprzez typ urządzenia i parę numerów. Wyróżniamy dwa typy urządzeń: Do identyfikacji używane są ponadto dwa numery:

Numery: główny i podrzędny składają sie na wewnętrzny numer urządzenia (16-bitowy typu k_dev, zdefiniowany jako short), który jest zapisany w strukturze i-węzła w polu i_dev. Makrodefinicje MAJORMINOR pobierają numer główny i podrzędny z 16-bitowego numeru, a makro MKDEV łączy je w jeden numer. Makra znajdują się w pliku include/linux/kdev_t.h.

#define MINORBITS	8 
#define MINORMASK	((1U << MINORBITS) - 1)
typedef unsigned short kdev\_t;
#define MAJOR(dev)	((unsigned int) ((dev) >> MINORBITS))
#define MINOR(dev)	((unsigned int) ((dev)\& MINORMASK))
#define NODEV		0
#define MKDEV(ma,mi)	(((ma) << MINORBITS) | (mi))

Podstawowym katalogiem dla plików urządzeń jest katalog /dev (ang. devices). Żeby się przekonać, że są to pliki specjalne, można wykonać polecenie: ls - l.

Tablica: Oto fragment wyniku tego polecenia (informacje pochodzą z: i-węzłów)
brw-rw---- 1 rl181272 floppy 2 0 mar 24 2001 fd0
brw-rw---- 1 root disk 3 0 mar 24 2001 hda
crw-rw-rw- 1 root tty 3 0 mar 24 2001 ttyp0
crw------- 1 root root 10 7 mar 24 2001 amigamouse1


b, c oznaczają blokowe i znakowe urządzenia
2 ,3, 10 to numery główne
0, 7 to numery podrzędne

Lista przydzielonych numerów urzadzeń (głównego i podrzędnego), typy, oraz nazwy urządzeń można znaleźć w Documentation/devices.txt. Główne numery urządzeń można znaleźć też w include/linux/major.h.

Tablica: Przykładowe pliki urządzeń na podstawie pliku Documentation/dexices.txt:
Nazwa Typ major minor Opis
/dev/fd0 block 2 0 Dyskietka
/dev/hda block 3 0 Pierwszy dysk IDE
/dev/hdb block 3 64 Drugi dysk IDE
/dev/ttyp0 char 3 0 Terminal
/dev/console char 5 1 Konsola
/dev/null char 1 3 Czarna dziura

Patrząc na tabelę można zauważyć, że ten sam numer główny może być używany do identyfikacji zarówno urządzenia znakowego jak i blokowego.

Zazwyczaj pliki urządzenia są związane z pewnym urządzeniem sprzętowym. Niekiedy jednak plik specjalny może reprezentować fizyczne urządzenie logiczne. Na przykład /dev/null jest plikiem urządzenia odpowiadającym ,,czarnej dziurze''. Wszystkie zapisane do niego dane są niszczone, a plik zawsze wydaje się pusty.

Dla jądra nazwa pliku nie ma znaczenia. Jeżeli utworzymy plik urządzenia o nazwie /tmp/disk typu blokowego o głównym numerze 3 i podrzędnym 0, to będzie on równoważny urządzeniu /dev/hda (patrz tablica 1.1).


next up previous contents
Next: Tworzenie i usuwanie urządzeń Up: Podstawowe pojęcia Previous: Podstawowe pojęcia   Spis rzeczy
2001-12-19