Czym jest j dro systemu? ą Rodzaje wersji j dra ą Co to s modu y ? ą ł
Transkrypt
Czym jest j dro systemu? ą Rodzaje wersji j dra ą Co to s modu y ? ą ł
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