Systemy operacyjne 2 – pracownia specjalistyczna
Plan zajęć
1. Wprowadzenie do narzędzi programisty (głównie make i gcc) oraz narzędzi diff i patch. Zapoznanie się z emulatorem Microsoft Virtual PC 2004.
2. Konfiguracja i kompilacja jądra systemu, wprowadzanie prostych modyfikacji do jądra.
Jądro konfigurujemy poleceniem:
make menuconfig
Kompilacja jądra przy pomocy poleceń:
make depend
make bzImage
make modules
make modules_install
Instalacja jądra: z katalogu ./arch/i386/boot przegrać do katalogu plik bzImage. Uruchomić:
lilo
Przy starcie systemu z menu menadżera ładowania lilo należy wybrać opcję New.
Usunięcie plików tymczasowych, w celu wygenerownia patch’a
make distclean
Zadanie dla studentów.
Zmodyfikuj jądro tak aby przy starcie wypisywało komunikat to jest moje jądro. Odpowiednie wywołanie funkcji printk możesz umieścić np. w pliku ./drivers/block/ide.c (sterownik kontrolera dysku typu IDE) w funkcji ide_init. Skompiluj i uruchom zmodyfikowane jądro oraz wygeneruj (a następnie zaaplikuj) patch.
Praca domowa.
Umieść kod komunikatu w odzielnej funkcji, np void komunikat(void) znajdującej się w odrębnym pliku, np. komunikat.c. Funkcję tą należy wywołać z ide_init. Wskazówka: musisz zmodyfikować plik Makefile w katalogu ./drivers/block/
3. Zmodyfikuj kod sterownika ring (patch do jądra znajduje się tutaj) przedstawiony na wykładzie, tak aby:
Sterownik obsługiwał nie jeden, ale cztery niezależne bufory pierścieniowe, rozróżniane za pomocą numeru podrzędnego urządzenia.
Sterownik obsługiwał polecenie ioctl, pozwalające zmienić dynamicznie długość bufora. Długość bufora może być dowolną liczbą z przedziału [256B-16KB]. Podanie innej długości jest błędem. Zmiana długości bufora powinna być poprawnie wykonana, nawet gdy znajdują się w nim jakieś znaki (uwaga na synchronizację: kmalloc może spowodować uśpienie procesu i przełączenie kontekstu).
Inna komenda ioctl powinna pozwalać na odczyt długości bufora.
Sterownik mógł zostać skompilowany jako moduł jądra.
4. Zmodyfikuj kod sterownika ring stworzony w punkcie 3, tak aby:
Nowa komenda ioctl pozwalałaby na sprawdzenie, czy znak x jest w buforze.
Nowa komenda ioctl pozwalałoby na uporządkowanie bufora. Uporządkowanie powinno polegać na przeniesieniu wszystkich znaków na początek bufora
Opracował: Wojciech Kwedlo