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:
  1. Sterownik obsługiwał nie jeden, ale cztery niezależne bufory pierścieniowe, rozróżniane za pomocą numeru podrzędnego urządzenia.
  2. 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).
  3. Inna komenda ioctl powinna pozwalać na odczyt długości bufora.
  4. Sterownik mógł zostać skompilowany jako moduł jądra.

4. Zmodyfikuj kod sterownika ring stworzony w punkcie 3, tak aby:
  1. Nowa komenda ioctl pozwalałaby na sprawdzenie, czy znak x jest w buforze.
  2. 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