T: Jądro, moduły ładowalne, obsługa urządzeń. Licencja GNU.

Praca komputera dzieli się na dwa tryby - tryb użytkownika (user mode) oraz tryb jądra (kernel mode).
W trybie kernela komputer przede wszystkim komunikuje się ze sprzętem i operuje pamięcią. Tryb użytkownika ma możliwość jedynie uruchamiania aplikacji.

Zadanie1:

Jądro systemu operacyjnego (ang. kernel) - to podstawowa część systemu operacyjnego, która jest odpowiedzialna za wszystkie jego zadania.

Jądro monolityczne - często stosowane w systemach typu Unix. Wszystkie zadania są wykonywane przez jądro, będące jednym, dużym programem działającym w trybie jądra. Przykładami takiego jądra mogą być: Linux, OpenBSD, FreeBSD, chociaż większość posiada umiejętność dołączania i odłączania modułów (najczęściej zawierających kod sterownika urządzenia lub obsługi potrzebnego w danej chwili systemu plików).

Z budowy jądra wynikają jego cechy, takie jak:

Linux jest kompilowany i łączony (linkowany) dynamicznie. W każdej chwili można załadować do niego jakiś fragment kodu, bądź go usunąć. Pozwala to na między innymi na zmniejszenie rozmiarów kernela, przyśpieszając tym samym jego pracę, a skracając czas ładowania. Śłużą do tego tak zwane moduły. Aby przekonać się, jakie moduły mamy obecnie do dyspozycji, wystarczy wydać polecenie lsmod.
Więcej na http://www.linux.pl/?id=article&kategoria=8&show=96#kernel.

Moduły nie są wbudowane w jądro systemu operacyjnego. Moduły pozwalają rozszerzać możliwości i zasób dostępnych funkcji komputera. Do zarządzania modułami w systemie Linux niezbędne jest oprogramowanie modutils-x.y.z.tar.gz - w wersji odpowiedniej dla posiadanego jądra systemu operacyjnego. Po instalacji (tar zxvf modutils…) dostępne będą programy: insmod, rmmod, ksyms, lsmod, genksyms, modprobe i depmod w katalogu /sbin.
Więcej na http://linux.msstudio.com.pl/Howto/kernel/Kernel-HOWTO.pl-9.html.

Zadanie2:

Budowa modułów w systemach Linux:

Przykładowy moduł systemu Linux:

Polecenie kompilujące moduł:

Załadowanie modułu:

Zadanie3:

Cechy oprogramowania publikowanego na licencji GNU GPL:

Przystępując do kompilacji jądra systemu w pierwszej kolejności należy sprawdzić, czy pakiety niezbędne do kompilacji jądra systemu zostały zainstalowane wraz z systemem. Są to następujące pliki: kernel-headers-xxx.i386.rpm oraz kernel-source-xxx.i386.rpm, gdzie xxx oznacza numer wersji kernela. Sprawdzimy to wydając polecenie: rpm -qa | grep kernel. Jeżeli zostaną wyświetlone powyższe nazwy to oznaczać to będzie, iż są one zainstalowane w systemie. Jeżeli nie zostaną odnalezione, to należy w katalogu na dysku cd-rom, w którym znajdują się powyższe pliki wydać polecenie instalujące je do systemu: rpm -i kernel-headers-xxx.i386 oraz rpm -i kernel-source-xxx.i386 (instalując można nie podawać pełnej nazwy pakietu końcówkę zastępując znakiem *). Zainstalowanie pakietów spowoduje utworzenie kartoteki: /usr/src/linux_wersja oraz /usr/src/linux (link). Przed kompilacją należy w razie potrzeby zainstalować również pakiety: make-3.77-6.i386.rpm, bin86-0.4-7.i386.rpm, egcs-1.1.2-12.i386.rpm oraz glibc-deval-2.1.1-6.i386.rpm. Następnie przechodzimy do katalogu: cd /usr/src/linux. W nim wydajemy polecenie: make config, make menuconfig lub make xconfig. Wybieramy odpowiednie oprogramowanie (sterowniki), które możemy wkompilować w jądro w postaci modułów (M), uruchamianych przez jądro ( [ ] ) oraz w pierwszej i drugiej formie (<*>). Po dokonaniu kompilacji wykonujemy kolejno polecenia: make dep, make clean i make zImage. Jeżeli kompilacja zakończy się niepowodzeniem (za duży rozmiar pliku jądra) wykonać należy polecenie: make bzImage. Nowe jądro zapisane zostanie w pliku /usr/src/linux/arch/i386/boot/zImage. Należy wykonać teraz polecenie kompilujące moduły: make modules i make modules_install. Następnie kopiujemy plik jądra poleceniem: cp /usr/src/linux/arch/i386/biit/zImage /boot/vmlinuz_nowe. Dodajemy wywołanie nowego jądra do pliku /etc/lilo.conf np.: