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

Podobne dokumenty