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 MAJOR i MINOR 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.
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.
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).