Kernel Kompilacja jądra systemu
Co to jest jądro systemu operacyjnego Jądro systemu operacyjnego jest rozpowszechniane na licencji GNU General Public License (GPL) określonej przez konsorcjum Free Software Foundation (FSF) jako oprogramowanie w tw. wolnym obiegu (free software). Cechy: Zakaz prywatyzacji produktów powstałych z wykorzystaniem Linuksa lub pochodnych systemu (tzn. odmian zachowujących standardy Linuksa). Oprogramowanie nie może być redystrybuowane w formie czysto binarnej wraz z każdą dystrybucją binarną musi być udostępniony kod źródłowy.
Dystrybucje Linuksa: Standardowe, prekompilowane zbiory pakietów, zwane dystrybucjami, zawierają podstawowy system Linux, narzędzia do instalowania systemu i zarządzania nim oraz gotowe do instalowania pakiety typowych narzędzi systemu UNIX. Pierwsze dystrybucje zarządzały pakietami jedynie przez dostarczanie środków do rozpakowywania wszystkich plików w odpowiednie miejsca; współczesne dystrybucje zawierają zawansowane zarządzanie pakietami. Większość obecnych dystrybucji stosuje lub przynajmniej rozpoznaje pakiety plików RPM ułatwiające instalację, rozbudowę i usuwanie oprogramowania. Wczesne dystrybucje: SLS, Slackware. Popularne dystrybucje: RedHat->Fedora, Debian, SuSE, Mandrake ->Mandriva, itd.
Budowa jądra systemu Linux Programy zarządzania systemem Procesy użytkowe Pomocnicze programu użytkowe Kompilatory Wspólne biblioteki systemu Jądro systemu Linux Ładowalne moduły jądra
Programy zarządzania systemem Procesy użytkowe Pomocnicze programu użytkowe Kompilatory Wspólne biblioteki systemu Linux to Jądro systemu Linux Ładowalne moduły jądra Jądro: jest odpowiedzialne za realizację wszystkich istotnych abstrakcji systemu operacyjnego (pamięć wirtualna, procesy itd.). Kod jądra jest wykonywany w trybie jądra (kernel mode) z pełnym dostępem do wszystkich fizycznych zasobów komputera. Cały kod jądra ze wszystkimi strukturami danych przebywa w tej samej pojedynczej przestrzeni adresowej Biblioteki systemowe: Definiują standardowy zbiór funkcji, za pomocą których aplikacje mogą współpracować z jądrem i które realizują wiele właściwości systemu operacyjnego nie wymagających pełnych przywilejów kodu jądra. Pomoce systemowe: wykonują osobne, specjalizowane zadania administracyjne.
Moduły jądra Linuxa Moduły jądra są wspomagane przez trzy następujące składowe: Zarządzanie modułami (module management); Rejestracja modułów sterujących (driver registration); Mechanizm rozwiązywania konfliktów (conflict resolution).
Zarządzanie modułami Umożliwia wprowadzenie modułów do pamięci i ich kontakt z resztą jądra. Zadanie ładowania modułu jądra podzielone jest na dwie sekcje: Zarządzanie częściami kodu modułu w pamięci jądra; Manipulowanie symbolami, do których modułom wolno się odwoływać. Ładowanie modułu przebiega w dwu etapach: Ładowacz modułu (module loader) zgłasza zapotrzebowanie na ciągły obszar pamięci wirtualnej jądra potrzebny dla modułu, a jądro zwraca adres przydzielonej pamięci. Specjalne wywołanie systemowe przekazuje moduł do jądra wraz niezbędną tablicą symboli, które chce on eksportować (moduł jest słowo po słowie kopiowany do zarezerwowanego obszaru, a tablica symboli jądra jest aktualizowana za pomocą nowych symboli). Ostatnią składową zarządzania modułem jest procedura zamawiania modułu (module requestor). Zarządza ładowaniem zamawianych modułów, których aktualnie nie ma w pamięci. Regularnie odpytuje jądro, sprawdzając, czy dynamicznie załadowany moduł jest ciągle w użyciu, a gdy nie jest już potrzebny, usuwa go z pamięci.
Rejestrowanie modułu sterującego Umożliwia modułowi poinformowanie reszty jądra o udostępnieniu nowego modułu sterującego. Jądro utrzymuje dynamiczne tablice wszystkich znanych modułów sterujących programów obsługi urządzeń, ang. device drivers) i dostarcza zestawu procedur umożliwiających dodawanie do tych tablic lub usuwanie z nich modułów sterujących w dowolnej chwili. Tablice rejestracyjne zwierają następujące elementy: Moduły sterujące urządzeń: znakowych (terminale, myszki drukarki itp.), blokowych (programy obsługi dysków) oraz interfejsów sieciowych. Systemy plików: oprogramowanie realizujące procedury wywołań wirtualnego systemu plików Linuksa, zarówno lokalnego, jak i sieciowego. Protokoły sieciowe: cały protokół sieciowy, np. IPX, lub nowy zbiór reguł filtrowania pakietów przez zaporę ogniową. Format binarny: określa zasady rozpoznawania i ładowania pliku wykonywalnego nowego typu. Ponadto moduł może zarejestrować nowy zbiór wpisów w tablicach sysctl i /proc, aby umożliwić jego konfigurowanie dynamiczne.
Rozwiązywanie konfliktów System Linux pracuje na sprzęcie występującym w różnych i zmieniających się konfiguracjach, mogą się więc pojawiać problemy konfliktów między modułami sterującymi urządzeń przy dostępie do tych samych zasobów. Linux posiada centralny mechanizm rozwiązywania konfliktów, który pozwala rozstrzygać o dostępie do zasobów sprzętowych. Do głównych celów tego mechanizmu należą: Ochrona modułów przed kolizjami przy dostępie do zasobów sprzętowych; Zapobieganie zaburzaniu działania istniejących modułów sterujących przez autosondy (autoprobes), tj. testy inicjowane przez moduły sterujące w celu automatycznego wykrycia konfiguracji sprzętu; Rozwiązywanie konfliktów między wieloma modułami sterującymi usiłującymi skorzystać z tego samego sprzętu (np. portu).
Po co kompilacja jądra systemu? Wbrew pozorom to jedna z częściej wykonywanych czynności administracyjnych. Niektóre z powodów: nowsza wersja jądra = większe bezpieczeństwo (nowsza wersja zawiera poprawki i jest bardziej bezpieczna) nowsza wersja = większa stabilność systemu (bo ma poprawione i bardziej optymalne wersje sterowników urządzeń) bieżąca wersja jądra nie obsługuje jakiegoś potrzebnego mechanizmu a nowsza obsługuje (np. mechanizmy kolejkowania, obliczania udziałów w dysku itp.) bieżąca wersja nie jest przystosowana do zmian wprowadzonych do systemu (np. zmiana karty sieciowej) bieżąca wersja nie przewiduje obsługi jakiegoś urządzenia -> bo urządzenia nie było w momencie powstawania tej wersji jądra standardowa wersja jądra nie jest zoptymalizowana -> zbyt wiele sterowników do urządzeń (jeżeli któryś z punktów => zastanowić się nad rekompilacją jądra w wersji takiej samej lub nowszej)
KOMPILOWANIE JĄDRA ZAPISAĆ!!! ZAPAMIĘTAĆ!!! Albo umieć znaleźć jak to się robi #make help #make mrproper #make menuconfig lub #make #make modules #make modules_install #make install #make xconfig