Czym jest jądro systemu? Jądro systemu operacyjnego Linux stanowi jego podstaw ę. Znajduj ą si ę tam główne sterowniki i programy odpowiadające za działanie systemu. Każdy system komputerowy posiada zbiór programów, który nazywany jest systemem operacyjnym. Najważniejszym z tych programów jest jądro (kernel). Jądro jest ładowane do pamięci RAM w czasie uruchamiania systemu, zawiera ono wiele niezbędnych dla systemu procedur. Kształt i możliwości komputera opieraj ą si ę na jego jądrze. Często słowa "system operacyjny" używa si ę w odniesieniu do jądra systemu. Jądro współdziała ze sprzętem poprzez programy niskiego poziomu. Dostarcza te ż środowisko dla aplikacji działających w systemie. Kiedy program chce wykorzysta ć zasoby sprzętowe, musi wystosowa ć odpowiednie zapytanie. Jądro rozważa to zapytanie i wybiera czy, jak i kiedy użyczyć programowi potrzebnych mu zasobów. Jądro w systemach typu Unix odgrywa rol ę pośrednika między programami, a sprzętem. Najpierw zajmuje si ę przydziałem pamięci dla wszystkich uruchomionych programów (procesów), i dba o to, aby wszystkie one dostały równ ą ilo ść czasu procesora. Rodzaje wersji jądra Istniej ą dwa rodzaje dostępnych wersji jądra - stabilna (stable) i rozwojowa (development). Stabilna przeznaczone jest dla ludzi ceniących sobie niezawodno ść i stabilno ść systemu jak również jego bezproblemow ą obsług ę. Natomiast wersje rozwojowe (developerskie) przeznaczone s ą dla ludzi zajmujących si ę rozwojem jądra, zawieraj ą one często wiele nowych sterowników dla najnowszych urządze ń i wiele funkcji eksperymentalnych, które mog ą znikn ąć w następnym jądrze. Jądra te mog ą także by ć niestabilne i powodowa ć liczne problemy. Pierwsza liczba oznaczenia jądra przedstawia numer wersji, następna czy jądro jest stabilne (liczba parzysta) czy rozwojowe (liczba nieparzysta), ostatnia liczba określa natomiast numer wydania. Czyli jądro 2.6.13 którego kompilacja si ę zajmiemy to jądro stabilne. Poniżej podaj ę kilka danych dotyczących jadra w wersji 2.6.x: Maksymalna liczba obsługiwanych procesorów: 255. Maksymalny rozmiar RAM-u: 64 GB. Maksymalny rozmiar systemu plików: 16 TB. Obsługiwane systemy plików (odczyt i zapis): Ext2, Ext3, ReiserFS, Reiser4, JFS, HPFS, FFS, HFS, HFS+, MS DOS, FAT, VFAT, ISO9660, NTFS, XFS. Sieciowe systemy plików: NFSv4, SMB, NCP, Intermezzo, Coda, AFS, CIFS. Liczba możliwych urządze ń: 4095. Co to s ą moduły? Moduł y - S ą to części jądra, które nie s ą zawarte bezpośrednio w nim. Kompiluje si ę je osobno i można je umieści ć a następnie usun ąć z uruchomionego jądra prawie zawsze. Wiele popularnych sterowników urządze ń to ładowalne moduły. S ą to sterowniki różnych urządze ń, które nie s ą wkompilowane bezpośrednio w jądro. Jednak gdy zajdzie potrzeba użycia takiego sterownika zostaje on wtedy załadowany dynamicznie
przez specjalny program ładujący bez przerywania pracy naszego systemu. Wszystkie moduły dostępne w naszym systemie znajduj ą si ę w katalogu /lib/modules/numer_wersji_naszego_ją dra. Korzy ść z użycia modułów jest taka, że przez ich zastosowanie otrzymujemy mniejsze i szybsze jądro, dzięki czemu nie trwonimy bez potrzeby zasobów naszego komputera, w razie gdy potrzebujemy raz na jaki ś czas skorzysta ć z sterownika a mamy go jako modu ł, możemy załadować go na czas pracy, a gdy ju ż nie będzie nam potrzebny spokojnie możemy skasowa ć go z pamięci. Jednak nie wszystkie sterowniki możemy uży ć jako moduły, Linux potrzebuje cz ęść z nich jeszcze zanim zostan ą one załadowane przez system, tak jest np. z obsług ą dysku twardego czy systemu plików, aby system móg ł si ę poprawnie uruchomi ć i obsłuży ć posiadany przez nas sprzęt. Zarządzanie modułami Modułami możemy zarządza ć za pomoc ą polece ń: insmod [nazwa moduł u] - instaluje modu ł w pracującym jądrze. modprobe [nazwa moduł u] - ładuje podany modu ł, szukają c go w katalogu /lib/modules/ numer_wersji_naszego_ją dra, oraz wszystkie inne moduły, od których jest zależny. rmmod [nazwa moduł u] - usuwa załadowany modu ł z działającego jądra systemu. lsmod - wyświetla informacj ę o wszystkich załadowanych modułach. Poznanie własnego sprzętu Przede wszystkim musimy pozna ć nasz własny komputer. Jest to nam niezbędne do utworzenie jądra pod nasz sprzęt. Do sprawdzania podłączonego sprzętu pod Linuxem służy komenda lspci. [root@pc-92-170 gr00by]# lspci 00:00.0 Host bridge: nvidia Corporation nforce2 AGP (different version?) (rev a2) 00:00.1 RAM memory: nvidia Corporation nforce2 Memory Controller 1 (rev a2) 00:00.2 RAM memory: nvidia Corporation nforce2 Memory Controller 4 (rev a2) 00:00.3 RAM memory: nvidia Corporation nforce2 Memory Controller 3 (rev a2) 00:00.4 RAM memory: nvidia Corporation nforce2 Memory Controller 2 (rev a2) 00:00.5 RAM memory: nvidia Corporation nforce2 Memory Controller 5 (rev a2) 00:01.0 ISA bridge: nvidia Corporation nforce2 ISA Bridge (rev a4) 00:01.1 SMBus: nvidia Corporation nforce2 SMBus (MCP) (rev a2) 00:02.0 USB Controller: nvidia Corporation nforce2 USB Controller (rev a4) 00:02.1 USB Controller: nvidia Corporation nforce2 USB Controller (rev a4) 00:02.2 USB Controller: nvidia Corporation nforce2 USB Controller (rev a4) 00:04.0 Ethernet controller: nvidia Corporation nforce2 Ethernet Controller (rev a1) 00:06.0 Multimedia audio controller: nvidia Corporation nforce2 AC97 Audio Controler (MCP) (rev a1) 00:08.0 PCI bridge: nvidia Corporation nforce2 External PCI Bridge (rev a3) 00:09.0 IDE interface: nvidia Corporation nforce2 IDE (rev a2) 00:1e.0 PCI bridge: nvidia Corporation nforce2 AGP (rev a2) 01:08.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL-8139/8139C/8139C+ (rev 10) 02:00.0 VGA compatible controller: nvidia Corporation NV20 [GeForce3 Ti 200] (rev a3) Komenda ta nie pokazuje ilości pamięci i typu procesora. Dane te jednak podawane s ą przez BIOS płyty głównej w czasie uruchamiania komputera.
Aby sprawdzi ć, jaki system plików obecnie używamy i musimy go wkompilowa ć wyda ć możemy komend ę mount. [root@pc-92-170 gr00by]# mount /dev/hda6 on / type ext3 (rw) /dev/proc on /proc type proc (rw) /dev/sys on /sys type sysfs (rw) /dev/devpts on /dev/pts type devpts (rw,gid=5,mode=620) /dev/shm on /dev/shm type tmpfs (rw) none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw) sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw) automount(pid2228) on /misc type autofs (rw,fd=4,pgrp=2228,minproto=2,maxproto=4) automount(pid2265) on /net type autofs (rw,fd=4,pgrp=2265,minproto=2,maxproto=4) Wszystkie te informacje będ ą nam potrzebne podczas konfiguracji jądra przed kompilacj ą. Pobieranie źróde ł jądra Aby przystąpi ć do kompilacji jądra musimy najpierw pobra ć źródła jądra znale źć je możemy na stronie www.kernel.org. Dekompresja źróde ł jądra Pobrane źródła jądra rozpakowujemy komend ą: [root@pc-92-170 jadro]# tar -xvjf linux-2.6.13.4.tar.bz2 i przenosimy do katalogu /usr/src/ komend ą: [root@pc-92-170 jadro]# mv linux-2.6.13.4 /usr/src/ Opcja -x i -f polecenia tar dekompresuje archiwum, -v wyświetla informacje o rozpakowywanych plikach a -j dekompresuje archiwum w formacie bzip2. Konfiguracja jądra Gdy ju ż wykonaliśmy wszystkie wcześniejsze czynności przy chodzi czas na najdłuższą cz ęść, czyli na konfiguracje jądra. Większo ść problemów z źle działającym lub nieuruchamiającym si ę jądrem wynikaj ą z nieodpowiedniej konfiguracji. Powinniśmy zaznacza ć tylko opcj ę nam niezbędne zwiększy to szybko ść działania jądra i zmniejszy jego rozmiar, a także czas kompilacji. Narzędzia konfiguracyjne jądra Przechodzimy do katalogu /usr/src/linux-2.6.13.4/ i tam uruchamiamy: [root@pc-92-170 linux-2.6.13.4]# make xconfig W trybie graficznym uruchomi si ę nam konfigurator jądra Opcje konfiguratora zaznaczy ć możemy jako: Zaznaczenie - oznacza wkompilowanie opcji na stałe. Odznaczenie - Oznacza nie wkompilowywanie opcji. Czarna kropka - Oznacza wkompilowanie opcji jako modu ł.
Po skonfigurowaniu zapisujemy zmiany i przechodzimy do kompilacji: Kompilacja jądra Poniżej wypisane s ą komendy, które możemy wydawa ć w konsoli dla kompilacji jądra. Polecenia wydajemy wpisując w konsoli make i jedno z poleceń poniżej. Sam proces kompilacji i instalacji sprowadza si ę do wpisania komend: make all make module_install make install. clean - usuwa większo ść wygenerowanych plików pozostawiając plik konfiguracyjny. mrproper - usuwa wszystkie wygenerowane pliki razem z pikiem konfiguracyjnym. oldconfig - konfiguracja jądra w trybie tekstowym odpowiadając na pytania. menuconfig - konfiguracja jądra w trybie tekstowym. xconfig - konfiguracja jądra w trybie graficznym za pomoc ą edytora napisanego QT. gconfig - konfiguracja jądra w trybie graficznym za pomoc ą edytora napisanego w GTK. defconfig - konfiguruje jądro z domyślnymi ustawieniami. allmodconfig - konfiguruje jądro wybierając moduły gdzie tylko to możliwe. allyesconfig - konfiguruje jądro z wkompilowanymi wszystkimi pakietami. allnoconfig - konfiguruje jak najmniejsze jądro. all - Robi na raz wszystkie polecenia z * na początku z listy poniżej. * vmlinux - Buduje jądro. * modules - Buduje wszystkie moduły. * bzimage - Tworzy skompresowane jądro. modules_install - Instaluje wszystkie moduły. install - Przenosi pliki jądra na odpowiednie miejsce i tworzy wpisy w bootloaderze. dir/ - Buduje wszystkie pliki w podanym katalogu. dir/file.[ois] - Buduje tylko podany obiekt. rpm - Buduje jądro jako RPM. tags/tags - Generuje tagi dla edytorów. cscope - Generuje tylko list ę cscope. rpm-pkg - Buduje jądro jako RPM. binrpm-pkg - Buduje jądro jako RPM zawierający skompilowane jądro i moduły. deb-pkg - Buduje jądro jako paczk ę dla Debiana. bzdisk - Tworzy bootowaln ą dyskietk ę w /dev/fd0. fdimage - Tworzy bootowaln ą dyskietk ę. [12] Opis kompilacji jądra Do kompilacji jądra przystępujemy komend ą make all. W tym czasie kompilowane s ą pliki, które zaznaczyliśmy z konfiguracji jądra. Proces ten możemy przerwa ć przyciskami CTRL + C, kiedy ponownie wydamy komend ę kompilacji make all, proces kompilacji zostanie dokończony. Po zakończeniu, jeśli nie wystąpi ą jakie ś błędy i zamierzamy używa ć modułów wydajemy komend ę make modules_install. Na sam koniec możemy wyda ć komend ę make install, która przeniesie nam wszystkie pliki nowo utworzonego jądra i dokona odpowiednich wpisów w bootloaderze.
Opis instalacji jądra Po kompilacji, jeśli nie wydamy komendy make install musimy: a) ręcznie przenie ść pliki jądra: z katalogu gdzie znajduj ą si ę nasze źródła jądra przenosimy plik System.map do katalogu /boot. [root@localhost linux-2.6.13.4]# cp System.map /boot/system.map-2.6.13.4 Nastę pie tworzymy skrót do nowego pliku. W konsoli w katalogu /boot wydajemy komend ę: [root@localhost boot]# ln -s System.map-2.6.13.4 System.map należy wcześniej usun ąć stary skrót, jeśli taki istnieje. Nastę pnie z katalogu /usr/src/linux-2.6.13.4/arch/i386/boot/ przenosimy plik bzimage i zmieniamy jego nazw ę na vmlinuz-2.6.13.4: [root@localhost boot]# cp bzimage /boot/vmlinuz-2.6.13.4 wracamy do głownego katalogu /boot [root@localhost boot]# cd /boot tworzymy skrót [root@localhost boot]# ln -s vmlinuz-2.6.13.4 vmlinuz. Konfiguracja menadżera uruchamiania (bootloadera) Po kompilacji, jeśli nie wydamy komendy make install musimy ręcznie ustali ć konfiguracje bootloadera, aby uruchomi ł nam nowe jądro. W każdym razie warto sprawdzi ć te konfiguracje przed ponownym uruchomieniem systemu. Szczególnie uwag ę zwraca ć należy czy podane jest odpowiednie jądro i ścieżka root= Konfiguracja GRUBa Aby zmieni ć opcje menadżera uruchamiania GRUB, musimy zajrze ć do jego pliku konfiguracyjnego. Opcje pliku konfiguracyjnego przedstawiaj ą si ę następująco, wszelkie zmiany dokonujemy w pliku /boot/grub/grub.conf: title - wpisujemy tutaj dowoln ą nazw ę (np. FEDORA 2.6.13.4). kernel - tutaj wpisujemy ścieżk ę do katalogu z jądrem i nazw ę jądra (np. //boot/vmlinuz-2.6.13.4 ro root=label=/ rhgb quiet). initrd - nie jest to konieczne (chyba, że ustawiliśmy obsług ę naszego głównego systemu plików jako modu ł), ale jeśli chcemy wykorzysta ć initrd to tutaj także podajemy ścieżk ę i nazw ę. (np. / boot/initrd-2.6.13.4.img ). Przykładowy wpis dla jądra 2.6.13.4 wpis będzie wygląda ł następująco: title Fedora Core 4 (2.6.13.4) root (hd0,5) kernel /boot/vmlinuz-2.6.13.4 ro root=label=/ rhgb quiet initrd /boot/initrd-2.6.13.4.img title Fedora Core 4 (2.6.11-1.1369_FC4) root (hd0,5) kernel /boot/vmlinuz-2.6.11-1.1369_fc4 ro root=label=/ rhgb quiet initrd /boot/initrd-2.6.11-1.1369_fc4.img Teraz należy zrestartowa ć system i uruchomi ć go z nowym jądrem, jeśli wszystko pójdzie dobrze to
system powinien uruchomi ć si ę ju ż na nowym jądrze. RYS1 Okno xconfig