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, ...


Autorka: Anna Petryk