Do tematu: Podsystem wejścia-wyjścia
Zadanie 11
Opis: Celem zadania jest stworzenie nowego, prostego urządzenia,
które służyłoby do śledzenia zawartości struktur danych w jądrze. Dostęp
do tego urządzenia byłby taki sam jak do innych urządzeń, tzn. poprzez
plik specjalny (np. /dev/mydev). Napisać driver prostego urządzenia znakowego,
na którym można byłoby wykonywać następujące operacje: (file_operations)
- open - otwieranie urządzenia
- release - zamykanie urządzenia
- read - ma przekazywać użytkownikowi dane dotyczące tablic rozdzielczych
: chrdevs, blkdevs (fs/devices.c) takie jak ( np. w zależności od ustawionych
flag ):
- nazwy i numery główne zarejestrowanych urządzeń znakowych lub blokowych
(których - rozstrzyga np. flaga), na przykład każde wywołanie funkcji read
będzie zapisywało do bufora użytkownika jeden numer i jedną nazwę.
- informować, czy konkretna operacja jest dostępna na urządzeniu (jaka
ma to być operacja, można okreslić np. za pomoca flagi)
Funkcja kończy się błędem, jeśli jako bufor podamy NULL, lub podamy
większą liczbę bajtów do wczytania, niż rozmiar bufora.
- write - operacja możliwa, ale nie mająca większego sensu
- lseek - może coś robić np. ustawiać bieżący indeks w tablicy chrdev
lub blkdev na podaną wartość
- ioctl - ustawianie parametrów urządzenia - flag
- ew. inne funkcje
- Urządzenie powinno być inicjowane i rejestrowane w trakcie startu systemu.
- Operacje na urządzeniu nie są blokujące.
- Do wpisywania znaków do bufora należy użyć funkcji put_user(), która
wpisuje dane do przestrzeni adresowej użytkownika.
- Należy w istniejących plikach źródłowych zdefiniować potrzebne struktury
danych oraz funkcje, stałe itp. (Nie trzeba dodawać własnych plików).
- Skompilować jądro. Należy także utworzyć plik specjalny dla napisanego
urządzenia.
- Mile widziane programy testowe używające tego urządzenia.
Autorka: Anna Petryk