Do tematu: Podsystem wejścia-wyjścia
Do tematu: Struktury danych
struct miscdevice
Jest to struktura zdefiniowana w pliku include/linux/miscdevice.h.
int | minor | numer drugorzędny urządzenia |
const char * | name | nazwa urządzenia |
struct file_operations | fops | operacje na urządzeniu |
struct miscdevice * | next, prev | wskaźnik do następnej i poprzedniej struktury na liście |
Jak wiadomo, urządzenia o tym samym numerze głównym mają wspólne operacje zdefiniowane w strukturze file_operations i dostęp do nich można uzyskać przez tablice rozdzielcze urządzeń. Jednak takie urządzenie jak mysz jest w systemie zazwyczaj jedno i różne myszy wymagają innego podprogramu obsługi urządzenia. Ponieważ nie bardzo był sens nadawania każdej myszy innego numeru głównego, zrobiono urządzenie o nazwie misc, na którym jest zdefiniowana tylko operacja open. Gdy otworzymy to urządzenie, to badamy, jaki jest numer drugorzędny urządzenia. Szukamy na liście misc_list (drivers/char/misc.c) odpowiadającej temu numerowi struktury miscdevice i bierzemy stamtąd operacje, jakie będzie można wykonywać na urządzeniu, odtąd te operacje są obowiązujace. Do listy misc_list można dodawać i usuwać nowe urządzenia za pomocą funkcji misc_register i misc_deregister. Lista misc_list jest więc jakby tablicą rozdzielczą dla urządzeń misc. Jest to przykład na to, że nie wszystkie urządzenia o tym samym numerze głównym obsługuje się tak samo. Wybrałam te strukturę do opisania, ponieważ rozwiązanie spodobało mi się.
Przykładowe stałe dla numerów drugorzędnych urządzeń: (miscdevice.h)
BUSMOUSE_MINOR, PSMOUSE_MINOR, MS_BUSMOUSE_MINOR, AMIGAMOUSE_MINOR, ATARIMOUSE_MINOR, ...