next up previous contents
Next: Usuwanie z tablicy rozdzielczych Up: Obsługa tablic rozdzielczych Previous: Dwa rodzaje tablic rozdzielczych   Spis rzeczy

Inicjalizowanie tablic rozdzielczych

Poczatkowo obie tablice rozdzielcze są puste. Do rejestracji operacji na urządzeniu w odpowiedniej tablicy rozdzielczej, służą funkcje zadeklarowane w pliku include/linux/fs.h:
extern int register_chrdev (unsigned int major, const char *name, 
			struct file_operations *fops);

extern int register_blkdev (unsigned int major, const char *name, 
			struct block_device_operations *bdops);
oraz zaimplementowane odpowiednio w pliku fs/devices.cfs/block_dev.c. Odpowiednio podajemy: major, nazwę i wskaźnik do tablicy operacji. Na przykład dla drukarki równoległej będzie to wyglądało nastepująco:
register_chrdev(6, ,,lp'', &lp_flops)
Funkcje te powodują umieszczenie w odpowiedniej tablicy rozdzielczej pod indeksem major wykazu dozwolonych operacji. Jeżeli dla podanego numeru nadrzędnego zarejestrowane są operacje, a podane są różne od nich ope-racje to rejestracja się nie powiedzie (zwrócimy -EBUSY). Jeśli podany numer wynosi 0, to rejestrowane jest urządzenie na pierwszej wolnej pozycji, a numer ten jest zwracany. Dzięki temu możemy dodawać własne urządzenia, które oficjalnie nie mają przyznanego numeru. Jeśli nie ma wolnego miejsca to zwrócona zostanie wartość -EBUSY i rejestracja się nie powiedzie. Jeśli podany przez nas numer główny będzie przekraczał wartość MAX_CHRDEV lub MAX_BLKDEV, to zwrócona zostanie wartość -EINVAL.

Inicjalizacja tablic rozdzielczych odbywa się podczas ładowania systemu. Odpowiadają za to nastepujące funkcje:


next up previous contents
Next: Usuwanie z tablicy rozdzielczych Up: Obsługa tablic rozdzielczych Previous: Dwa rodzaje tablic rozdzielczych   Spis rzeczy
2001-12-19