Najnowsze jądro Linuksa. Budowanie jądra w Ubuntu. Instrukcja krok po kroku. Skąd pobrać jądro Linux

Od dawna chciałem napisać artykuł o tym, jak zbudować jądro Linuksa. A teraz nadszedł ten moment.

Właściwie, po co budować jądro, jeśli dystrybucja zapewnia doskonale użyteczne jądro?

Na przykład w celu wykorzystania najnowszych sterowników i rozwiązań dostarczonych w nowym jądrze, gdy tylko stara gałąź jest dostępna w dystrybucji. Na przykład, aby dostosować go do swojego sprzętu i trochę przyspieszyć pracę. 3.11 zrobiłem dla siebie, ponieważ zawiera zestaw łatek usprawniających pracę z kartami graficznymi ATI, a jestem posiadaczem jednej z nich.

Napisano wiele artykułów o asemblerze jądra, więc nie będę wdawał się w szczegóły, a jedynie napiszę, jak sam składam jądro.

Przede wszystkim musisz pobrać archiwum z kodami źródłowymi żądanej wersji jądra Linux.

Na stronie https://www.kernel.org/ możesz pobrać żądaną wersję. Opiszę proces budowania i instalacji na przykładzie wersji 3.11.0.

Wskazane jest zbudowanie jądra w katalogu specjalnie stworzonym do tego celu pod nieuprzywilejowanym użytkownikiem. Kompiluję w folderze ~src/linux/wersja-linux

Przed kompilacją upewnij się, że wszystkie zależności niezbędne do kompilacji są zainstalowane i że w katalogu kompilacji jest około 3 GB wolnego miejsca.

Oto lista pakietów do pomyślnej kompilacji (dla Debiana/Ubuntu):

gcc, robić- Niezbędne narzędzia do montażu i łączenia. Najlepiej jedna z najnowszych dostępnych wersji gcc.

libncurses5-dev- potrzebne do działania menuconfig

cache- pozwala przyspieszyć ponowny montaż

Jeśli chcesz użyć graficznego konfiguratora jądra, powinieneś również zainstalować pakiety do rozwoju QT, na przykład libqt4-dev, g++, konfiguracja-pkg.

Lzop, lz4c- jeśli interesują Cię alternatywne mechanizmy kompresji jądra i initramfs.

Zakłada się, że bieżący katalog jest katalogiem rozpakowanego jądra.

Po przygotowaniu środowiska kompilacji należy wygenerować konfigurację jądra. Aktualną konfigurację można obejrzeć w następujący sposób:

Cat /boot/config-`uname -r`

Zcat /proc/config.gz

W zasadzie możesz użyć aktualnej konfiguracji, edytując ją w jednym z programów konfiguracyjnych. Skopiuj go do katalogu, w którym rozpakowano archiwum z jądrem i zmień jego nazwę na .config

cp /boot/config-`uname -r` .config

Lubię xconfig, uważam go za najwygodniejszy.

Utwórz xconfig

Poprzednio skopiowane jest ładowane automatycznie .config, który służy jako nasza baza do konfiguracji. Jest wiele wskazówek dotyczących konfiguracji jądra, polecam tylko wybór wersji procesora, wyłączenie sterowników sprzętowych, których tam nie ma, można również wybrać dodatkowe moduły, takie jak zram i algorytm kompresji, ja wybrałem lz4 jako najszybszy.

Po zapisaniu konfiguracji możesz rozpocząć kompilację.

Jeśli jesteś zbyt leniwy, aby ręcznie skonfigurować jądro, możesz dokonać automatycznej konfiguracji za pomocą informacji o załadowanych modułach: make localmodconfig

Teraz drugim głównym krokiem jest kompilacja jądra i modułów. Wykonywane w jednym poleceniu:

Make -j4 CC="ccache gcc" bzImage moduły

Gdzie -j4 odpowiada liczbie rdzeni procesora w Twojej konfiguracji.

Kompilacja nie potrwa długo, jeśli sprzęt jest wystarczająco wydajny, a konfiguracja jądra dystrybucji nie jest używana. Na moim laptopie z procesorem AMD Phenom P820 i sześcioma gigabajtami pamięci RAM kompilacja trwa około pół godziny.

Ostatnim krokiem jest zainstalowanie jądra i modułów.

Sudo sed -i.bak "s/MODULES=most/MODULES=dep/" /etc/initramfs-tools/initramfs.conf

Jest to konieczne w celu zmniejszenia rozmiaru pliku initrd poprzez uwzględnienie tylko modułów niezbędnych do załadowania.

Instalację można również wykonać jednym poleceniem:

sudo sprawiają, że moduły_instalacji są instalowane

Lub zainstaluj wszystko ręcznie. Najpierw moduły

sudo make modules_install

Następnie rdzeń

Wersja=`awk "NR<=3 {printf "%s.",$NF}" < Makefile | sed "s/\.$//"`

w ten sposób otrzymujemy wersję jądra z Makefile

sudo cp arch/`uname -m`/boot/bzImage /boot/vmlinuz-$version sudo cp .config /boot/config-$version sudo cp System.map /boot/System.map-$version sudo update-initramfs - c -k $wersja sudo update-grub

Na koniec dołączam skrypt automatyzujący proces.

Podczas konfiguracji konfiguracji może zadać kilka pytań, aby domyślnie odpowiedzieć, wystarczy nacisnąć Enter.

Szczęśliwa kompilacja.

Dlaczego ktoś miałby chcieć skompilować nowe jądro? Często nie jest to konieczne, ponieważ domyślne jądro dostarczane z Debianem obsługuje większość konfiguracji. Ponadto Debian często oferuje kilka alternatywnych jąder. Więc możesz chcieć najpierw sprawdzić, czy istnieje alternatywny pakiet obrazu jądra, który lepiej odpowiada twojemu sprzętowi. Jednak może być przydatne skompilowanie nowego jądra w celu:

Nie bój się kompilować jądra. To zabawne i opłacalne.

Aby skompilować jądro w sposób Debiana, potrzebujesz kilku pakietów: i kilku innych, które prawdopodobnie są już zainstalowane (zobacz pełną listę).

Ta metoda utworzy plik .deb źródła jądra, a jeśli masz niestandardowe moduły, utworzy również zsynchronizowany zależny plik .deb. Jest to lepszy sposób zarządzania obrazami jądra; będzie przechowywać jądro, System.map i dziennik aktywnego pliku konfiguracyjnego dla kompilacji.

Pamiętaj, że nie mieć skompilować jądro w „sposób Debiana”; ale okazuje się, że używanie systemu pakietów do zarządzania jądrem jest w rzeczywistości bezpieczniejsze i łatwiejsze. W rzeczywistości możesz pobrać źródła jądra bezpośrednio z Linusa zamiast z , ale nadal używać metody kompilacji.

Pamiętaj, że pełną dokumentację dotyczącą używania znajdziesz pod adresem . Ta sekcja zawiera tylko krótki samouczek.

W dalszej części założymy, że masz wolną rękę nad swoją maszyną i wypakujesz źródła jądra gdzieś w twoim katalogu domowym. Zakładamy również, że wersja twojego jądra to 3.16. Upewnij się, że jesteś w katalogu, w którym chcesz rozpakować źródła jądra, rozpakuj je za pomocą i przejdź do katalogu, który zostanie utworzony.

Teraz możesz skonfigurować swoje jądro. Uruchom, jeśli X11 jest zainstalowane, skonfigurowane i uruchomione; uruchom inaczej (musisz zainstalować). Poświęć trochę czasu na przeczytanie pomocy online i dokonaj starannego wyboru. W razie wątpliwości zazwyczaj lepiej jest dołączyć sterownik urządzenia (oprogramowanie, które zarządza sprzętowymi urządzeniami peryferyjnymi, takimi jak karty Ethernet, kontrolery SCSI itd.), którego nie jesteś pewien. Bądź ostrożny: inne opcje, niezwiązane z konkretnym sprzętem, należy pozostawić z wartością domyślną, jeśli ich nie rozumiesz. Nie zapomnij wybrać "Ładowarki modułów jądra" w "Obsługa modułów ładowalnych" (domyślnie nie jest zaznaczone). Jeśli nie zostanie uwzględniony, instalacja Debiana będzie miała problemy.

Wyczyść drzewo źródłowe i zresetuj parametry. Aby to zrobić, zrób.

Teraz skompiluj jądro: . Numer wersji „1.0” można dowolnie zmieniać; jest to tylko numer wersji, którego będziesz używać do śledzenia kompilacji jądra. Podobnie możesz umieścić dowolne słowo w miejscu „niestandardowe” (np. nazwę hosta). Kompilacja jądra może zająć trochę czasu, w zależności od mocy twojego komputera.

Po zakończeniu kompilacji możesz zainstalować własne jądro jak każdy pakiet. Jako root wykonaj . Część jest opcjonalną pod-architekturą, w zależności od ustawionych opcji jądra. zainstaluje jądro wraz z kilkoma innymi ładnymi plikami pomocniczymi. Na przykład, zostanie poprawnie zainstalowany (pomocny przy debugowaniu problemów z jądrem) i zostanie zainstalowany, zawierający aktualny zestaw konfiguracyjny. Twój nowy pakiet jądra jest również wystarczająco sprytny, aby automatycznie aktualizować program ładujący, aby używał nowego jądra. Jeśli utworzyłeś pakiet modułów, musisz również zainstalować ten pakiet.

Nadszedł czas na ponowne uruchomienie systemu: przeczytaj uważnie wszelkie ostrzeżenia, które mogły spowodować powyższy krok, a następnie .

Więcej informacji na temat jądra Debiana i kompilacji jądra można znaleźć w Podręczniku jądra Debiana Linux. Aby uzyskać więcej informacji na temat programu , przeczytaj szczegółową dokumentację w .

Jeśli pamiętasz, nie tak dawno nauczyliśmy się budować jądro FreeBSD ze źródeł. Pytanie brzmi, dlaczego nie nauczyć się robić tego samego z jądrem Linuksa? Powody budowania jądra Linuksa ze źródeł są generalnie takie same - uzyskanie najnowszej wersji jądra, pilne zastosowanie łatek bezpieczeństwa, optymalizacja pod kątem konkretnych zadań i konkretnego sprzętu, a także chęć wzięcia udziału w rozwoju jądra, nawet w roli QA.

Ważny! Postępowanie zgodnie z instrukcjami zawartymi w tym poście może spowodować utratę Twoich danych. Twórz kopie zapasowe i pamiętaj, że robisz wszystko na własne ryzyko i ryzyko. Wszystko opisane poniżej zostało przetestowane na Ubuntu 14.04 LTS. Ale w innych wersjach Ubuntu, a także w innych dystrybucjach Linuksa, różnice powinny być minimalne.

Konfigurowanie bootloadera

Edytuj /etc/default/grub w ten sposób:

GRUB_DEFAULT=0
#GRUB_HIDDEN_TIMEOUT=10
#GRUB_HIDDEN_TIMEOUT_QUIET=prawda
GRUB_TIMEOUT=10
GRUB_DISTRIBUTOR=`lsb_release -i-s2>/dev/null ||echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="cichy plusk"
GRUB_CMDLINE_LINUX=""

Po edycji mówimy:

sudo update-grub

W rezultacie przed uruchomieniem systemu zostaniesz poproszony przez 10 sekund o wybranie jądra, z którym chcesz uruchomić system. Bardzo przydatne, jeśli pomieszałeś się z konfiguracją jądra i chcesz uruchomić system z poprzednią wersją!

Zainstaluj zależności

Będziemy potrzebować co najmniej następujących pakietów:

sudoapt-get installgitgccmakebc fakeroot dpkg-dev\
libncurses5-dev libssl-dev

Jednak w wielu systemach wszystkie z nich będą już obecne.

Uzyskiwanie źródła

wget https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.6.4.tar.xz
tar-xz-xvf linux-4.6.4.tar.xz
cd linux-4.6.4

Lub, jeśli chcesz mieć najnowsze wersje, możesz pobrać źródło bezpośrednio z Git:

# Lustro: https://github.com/torvalds/linux
klon git'git://git.kernel.org/pub/scm/linux/kernel/git/'\
'torvalds/linux.git'
cd linux

Sądząc po tym, że nie mogłem znaleźć tagu v4.6.4 w Git, wydania jądra Linuksa są tworzone wyłącznie w postaci skompresowanych archiwów tar.

Jeśli zamiast jądra waniliowego chciałbyś zbudować jądro z łatami z Canonical:

klon git git://kernel.ubuntu.com/ubuntu/ubuntu-trusty.git
cd ubuntu-zaufany
tag git|mniej
git kasa Ubuntu-lts-4.4.0-31.50_14.04.1

Z własnego doświadczenia, jeśli używasz Ubuntu, możesz bezpiecznie korzystać z jądra waniliowego. Jest mało prawdopodobne, że będziesz miał z tym jakiekolwiek problemy.

Notatka: Co ciekawe, z istniejących, stosunkowo popularnych dystrybucji Linuksa, jedynie Gentoo, Slackware i Arch Linux wydają się używać jądra bez własnych poprawek.

W każdym razie, teraz masz kod źródłowy.

Kompilacja i instalacja jądra

Wybierz opcje, z którymi zostanie zbudowane jądro:

W razie potrzeby zmień ustawienia, kliknij Zapisz, a następnie Zakończ. W efekcie powstanie plik zawierający wybrane przez nas parametry.

Na aktualizacja kernel (czy już używasz jakiegoś jądra?) wygodnie jest wziąć konfigurację bieżącego jądra i ustawić nowe opcje na ich domyślne wartości:

zcat/proc/config.gz > ./.config
utwórz olddefconfig

Na koniec zbieramy:

make-j4 bindeb-pkg LOCALVERSION=-custom

Rdzeń montowany jest dość długo. Na moim laptopie montaż trwał 1 godzinę i 15 minut. Jednak od tego czasu o Resztę poświęca się na budowanie gigantycznego pakietu jądra z symbolami debugowania.

Ręczna budowa i konfiguracja jądra Linux

Składanie tego pakietu może zostać wyłączone przez zakomentowanie parametru CONFIG_DEBUG_INFO w konfiguracji. Pamiętaj tylko, że ten pakiet jest wymagany przez SystemTap i inne przydatne narzędzia.

Oprócz samego jądra możesz również zbierać dokumentację:

# jest też `make pdfdocs` i inne, zobacz `make help`
tworzyć htmldocs
Dokumentacja przeglądarki chromium/DocBook/index.html

Po zakończeniu montażu pomocniczy katalog widzimy coś takiego:

linux-firmware-image-4.4.13-custom_4.4.13-custom-1_amd64.deb
linux-headers-4.4.13-custom_4.4.13-custom-1_amd64.deb
linux-image-4.4.13-custom_4.4.13-custom-1_amd64.deb
linux-image-4.4.13-custom-dbg_4.4.13-custom-1_amd64.deb
linux-libc-dev_4.4.13-custom-1_amd64.deb

Umieszczamy wszystkie pakiety deb z wyjątkiem wersji dbg jądra ze zwykłymi i restartujemy. Po ponownym uruchomieniu patrzymy na dane wyjściowe polecenia. Upewniamy się, że naprawdę uruchomiliśmy nowe jądro. Jeśli coś jest nie tak z nowym jądrem, w bootloaderze po prostu wybieramy to, z którego system był wcześniej uruchamiany. Po uruchomieniu ze starym jądrem szybko usuwamy pakiety nowego jądra i voila - system wrócił do poprzedniego stanu.

Dodatkowo po załadowaniu nowego jądra możesz uruchomić na nim testy:

sudomake kselftest
sudomake kselftest-clean

Gratulacje, wiesz już, jak zbudować jądro Linuksa!

Wniosek

Materiały na temat wnętrza jądra Linux:

  • KernelNewbies.org, witryna dla początkujących w jądrze Linuksa z własną listą dyskusyjną, kanałem IRC, forum, wiki i nie tylko;
  • LKML.org, strona umożliwiająca wygodne czytanie listy dyskusyjnej programistów jądra Linuksa przez przeglądarkę. Uważaj, często psuje to formatowanie liter! W tym sensie archiwum list dyskusyjnych na marc.info jest znacznie lepsze;
  • Linux Cross Reference, witryna umożliwiająca wygodne odczytywanie kodu jądra systemu Linux przez przeglądarkę;
  • Książka Linux Kernel Development, 3rd Edition to najnowsza książka na temat jądra Linuksa w języku angielskim (2010, jądro 2.6.x), jest tłumaczona na język rosyjski;
  • Książka Linux-Treiber entwickeln, 4th Edition jest nowsza (2015, kernel 4.x), ale jest napisana w języku niemieckim i nie ma tłumaczenia;
  • Bezpłatna książka Linux Insides autorstwa Alexandra Kuleshov a.k.a @0xAX wygląda na najbardziej dostępną i aktualną, ale obecnie jest w trakcie pisania;
  • Czasami możesz znaleźć coś przydatnego w Linux Kernel HTML Documentation, oficjalnej dokumentacji ze źródeł jądra Linux;
  • Przykłady do książki Linux Device Drivers, 3rd Edition, która stara się być na bieżąco, plus źródła dla czwartej edycji, która jest w trakcie pisania;

Czy budujesz jądro ze źródeł, a jeśli tak, to dlaczego?

Dodatek: Możesz być także zainteresowany artykułem Skandaliczna prawda o debugowaniu kodu jądra w systemie Linux.

Tagi: Linux, Ring0.

Kompilacja jądra Linux


Wielu uważa, że ​​pokazywanie się jako mądry i zaawansowany „Linuxoid” to bezsensowna strata czasu. W rzeczywistości kompilacja jądra jest bardzo ważną rzeczą. Załóżmy, że kupiłeś nowy laptop bez działającej kamery internetowej. Twoje działania? Zaglądasz do wyszukiwarki i szukasz rozwiązania problemu w tej sprawie. Dość często może się okazać, że Twoja kamera internetowa działa na nowszej wersji jądra niż masz. Jeśli nie wiesz, jaką masz wersję, wpisz w terminalu uname -r, w rezultacie otrzymasz wersję jądra (na przykład linux-2.6.31-10). Ponadto kompilacja jądra jest szeroko stosowana w celu zwiększenia wydajności: faktem jest, że dystrybucje jądra są domyślnie kompilowane „dla wszystkich”, dlatego zawiera ogromną liczbę sterowników, których możesz nie potrzebować. Jeśli więc dobrze znasz swój sprzęt, możesz wyłączyć niepotrzebne sterowniki na etapie konfiguracji. Możliwe jest również włączenie obsługi ponad 4 gigabajtów pamięci RAM bez zmiany głębi bitowej systemu.

Jak zbudować jądro Linuksa? Budowanie jądra Linux

Tak więc, jeśli nadal potrzebujesz mieć własne jądro, zacznijmy kompilować!


Pierwszą rzeczą do zrobienia jest pobranie kodu źródłowego dla żądanej wersji jądra. Zwykle potrzebujesz najnowszej stabilnej wersji. Wszystkie oficjalne wersje jądra są dostępne na kernel.org.

Jeśli masz już zainstalowany serwer X (komputer domowy), możesz przejść do witryny w ulubionej przeglądarce i pobrać żądaną wersję w archiwum tar.gz (skompresowanym gzip). Jeśli pracujesz w konsoli (na przykład nie masz jeszcze zainstalowanego serwera X lub konfigurujesz serwer), możesz użyć przeglądarki tekstowej (na przykład elinki).

Możesz także użyć standardowego menedżera pobierania wget:


tar -zxvf ścieżka_do_archiwum

Konfiguracja jądra.

Kompilacja.
stwórz i stwórz instalację
Czekamy od 20 minut do kilku godzin (w zależności od mocy komputera). Jądro jest zainstalowane. Aby pojawił się na liście grub(2), wpisz (jako root)
aktualizacja-grub


Archiwum artykułów:
maj 2017
Marzec 2017
kwiecień 2016
Marzec 2016
Październik 2013
wrzesień 2013
Maj 2013
Marzec 2013
Listopad 2012
lipiec 2012
czerwiec 2012
kwiecień 2012
Marzec 2012
Luty 2012
kwiecień 2011
Marzec 2011
Luty 2011
styczeń 2011
grudzień 2010
Listopad 2010
Październik 2010
wrzesień 2010
Sierpień 2010
lipiec 2010
czerwiec 2010
maj 2010
kwiecień 2010
Marzec 2010

Losowy:

Wirtualne planetarium Stellarium: przegląd nowych funkcji

BOINC: obliczenia dla nauki

Gambas: Podstawowy rozwój na Linuksie

Schematy szeregowe SSH 2.0

Linuxnow.ru: Plany na przyszłość

Nagle kończy Ci się wolne miejsce na dysku? Być może problem tkwi w logach.

Koledzy: wszyscy
Linux dla każdego

Nasze banery:


Ustaw baner

Konfiguracja jądra Linux

Sprawdzanie pakietów źródłowych

Ponowna kompilacja jądra wymaga jego źródeł.

Blog o administracji systemem. Artykuły o Linux, Windows, pamięci NetApp i wirtualizacji.

Red Hat umieszcza źródła jądra w pojedynczym pakiecie rpm, ale nie jest instalowany domyślnie. Nazwa tego pakietu:

kernel-source-2.4.2-2.1386.rpm

Oprócz kodu źródłowego, aby ponownie skompilować jądro, potrzebujesz kompilatora, który składa się z dwóch komponentów:

uczynić użyteczność;

kompilatorem samego języka C jest gcc lub egcs.

Tworzenie kopii zapasowej aktualnego jądra odbywa się w trzech etapach:

1. Utworzenie kopii zapasowej źródeł jądra, która pozwala na jej przywrócenie w przypadku uszkodzenia konfiguracji.

2. Utworzenie kopii zapasowej samego jądra jako znanego sposobu działania uruchamiania systemu.

3. Utworzenie nowego wpisu dla programu ładującego systemu operacyjnego, za pomocą którego można uruchomić system z kopii zapasowej jądra.

Tworzenie kopii zapasowej źródła odbywa się poprzez skopiowanie katalogu źródeł jądra na dysk. Odzyskiwanie odbywa się poprzez kopiowanie w przeciwnym kierunku.

Kiedy jądro jest rekompilowane, stare jądro jest zapisywane do pliku z rozszerzeniem .old. Jednak ta kopia jądra nie może być jeszcze użyta do uruchomienia systemu. To wyjaśnia konieczność wykonania powyższych operacji.

Program ładujący system operacyjny typu LILO, powszechnie używany do uruchamiania Linuksa, jest konfigurowany przez dowiązanie do pliku jądra w głównym systemie plików.

Po utworzeniu kopii zapasowej jądra, musisz dodać kolejny wpis do pliku /etc/lilo.conf, aby umożliwić uruchomienie Linuksa ze starym jądrem:

otwórz plik /etc/lilo. conf w edytorze tekstu

utwórz kopię całej partycji;

zmień dwie pozycje w kopii:

zamień nazwę pliku jądra na nazwę jego kopii zapasowej (wraz z rozszerzeniem);

zamień etykietę partycji na coś takiego jak linux. oryginalny (oryginalny Linux) lub linux-poprzedni (stary Linux).

wiersze rozpoczynające się od initrd należy zastąpić odpowiednimi wartościami zastępczymi, takimi jak initrd-2 .4.2-2. oryg. obraz;

zapisz zmiany w /etc/lilo. por.

wpisz polecenie /sbin/lilo, aby wprowadzić nowy wpis w bootloaderze. Po uruchomieniu polecenia lilo na ekranie wyświetlane są etykiety obrazów wprowadzonych do programu ładującego systemu operacyjnego.

Następnym razem, gdy system zostanie ponownie uruchomiony, nowy identyfikator jądra zostanie wyświetlony w podpowiedzi programu ładującego LILO.

Konfiguracja nowego jądra

Konfiguracja decyduje, które funkcje należy uwzględnić w jądrze, a których nie, i tak dalej. Możesz wybrać pomiędzy konfiguracją starego jądra a instalacją/konfiguracją nowego. Na przykład, używając Red Hat Linux 7.1, możesz ponownie skonfigurować istniejące jądro 2.4.2 z nowymi opcjami. Możesz także pobrać i zainstalować nowe jądro 2.4.4. Chociaż szczegóły konfiguracji różnią się w obu przypadkach, użyte narzędzia i sama metodologia konfiguracji są takie same.

Linux ma trzy oddzielne narzędzia konfiguracyjne, z których każde ma swoją własną charakterystykę.

Narzędzie z interfejsem wiersza poleceń. Użytkownik konsekwentnie odpowiada na pytania dotyczące funkcji, które należy uwzględnić w jądrze. To narzędzie jest przydatne dla tych, którzy wiedzą, jak pracować z jądrem i dla tych, którzy mają skrypty konfiguracyjne dla tego narzędzia.

Narzędzie z menu trybu tekstowego. Wielopoziomowe menu tego narzędzia umożliwia ustawienie i ponowną instalację parametrów jądra w dowolnej kolejności.

Narzędzie GUI. Jest to najbardziej atrakcyjne narzędzie, ale działa tylko w graficznym systemie X Window.

Wymienione narzędzia tworzą ten sam plik konfiguracyjny, który jest używany przez narzędzie make podczas kompilowania pełnego lub częściowego jądra.

Opcje jądra

Przeglądając ustawienia w dowolnym programie konfiguracyjnym (wiersz poleceń, tekstowy lub GUI), musisz jasno określić wpływ tych ustawień na działanie jądra.

Identyfikacja parametrów w każdym programie jest inna, ale we wszystkich trzech prezentowany jest ten sam zestaw. Parametry podzielone są na dwie główne grupy:

modułowy;

niemodułowy.

Jeśli blok programu odpowiadający temu parametrowi nie jest załadowany jako moduł jądra, może to być jedna z dwóch rzeczy:

[*] integralna część jądra;

Integralna część jądra.

Znaki w nawiasach kwadratowych (wraz z nawiasami) odpowiadają etykietom opcji w menu programów konfiguracyjnych (z wyjątkiem narzędzia wiersza poleceń).

W przypadku parametrów modułowych istnieją trzy opcje ustawienia (zgodnie z ich reprezentacją w menu narzędzi konfiguracyjnych):

<>nie jest zawarty w jądrze i nie jest tworzony jako moduł, który można załadować później:

<*>jest zawarty w jądrze, więc nie ma potrzeby późniejszego ładowania go jako modułu:

<М>Dołączone jako moduł, ale nie jako część jądra. Blok można zainstalować lub usunąć z jądra w dowolnym momencie.

Czasami wartości parametru nie można zmienić, dopóki nie zostanie ustawiony inny parametr. Na przykład możesz zainstalować obsługę określonego urządzenia SCSI dopiero po włączeniu obsługi tych urządzeń w ogóle.

Kiedy niezbędne narzędzia (narzędzie make i kompilator gcc) oraz teksty źródłowe są zainstalowane w systemie, możesz uruchomić jedno z narzędzi konfiguracyjnych i rozpocząć konfigurację jądra.

Konfigurator GUI

Uruchamianie narzędzia konfiguracyjnego z interfejsem graficznym odbywa się w następującej kolejności.

Uruchom system X Windows (z dowolnym środowiskiem graficznym i pulpitem).

Otwórz okno emulatora terminala (okno wiersza poleceń).

Podobnie jak w przypadku uruchomienia poprzedniego narzędzia, na ekranie pojawi się kilka komunikatów o kompilacji narzędzia, a po kilku minutach otworzy się jego główne okno.

Ryż. 8. Narzędzie konfiguracyjne jądra z interfejsem graficznym: przyciski menu do ustawiania wartości parametrów

Narzędzie graficzne nie różni się zbytnio od narzędzia menuconf ig. Tutaj opcje są również podzielone na kategorie; kliknięcie określonej kategorii otwiera okno dialogowe z listą opcji, z których każda może być ustawiona na wartość określającą, czy odpowiednie narzędzie powinno być używane jako część jądra, jako ładowalny moduł, czy wcale.

Takie okno dialogowe pokazano na ryc.

Ryż. 9. Okna dialogowe, takie jak ten, ustawiają opcje konfiguracji jądra

Jądro 2.4.2 w systemie Red Hat Linux domyślnie obsługuje symetryczną architekturę wieloprocesorową. Musisz ustawić odpowiednią opcję na n, jeśli twój komputer ma tylko jeden procesor.

Po prawej stronie każdej opcji znajduje się przycisk Pomoc.

Dużą zaletą graficznego narzędzia konfiguracyjnego (szczególnie dla początkujących konfiguratorów jądra) jest to, że menu wyświetla zależności między różnymi opcjami. Na przykład w sekcji Blokuj urządzenia nie można zainstalować obsługi RAID wbudowanej w jądro, dopóki nie zostanie włączona opcja Obsługa wielu sterowników urządzeń.

Jeśli w narzędziu menuconfig zależność parametrów od siebie jest pokazana przez wcięcie nazw parametrów w menu, to w narzędziu graficznym ustawienie niedozwolonych kombinacji parametrów jest po prostu niemożliwe. Praca z narzędziem graficznym pomaga zrozumieć zależności między różnymi modułami.

Na końcu głównego menu narzędzia graficznego znajdują się polecenia podobne do odpowiednich poleceń narzędzia z menu trybu tekstowego.

Zapisz i wyjdź (wyjdź z zapisaniem). Utworzenie pliku konfiguracyjnego jądra i zamknięcie narzędzia.

Wyjdź bez zapisywania. Zamykanie narzędzia bez tworzenia pliku konfiguracyjnego jądra.

Bez utworzenia pliku konfiguracyjnego jądra przy użyciu jednego z wymienionych narzędzi, ponowna kompilacja jądra nie jest możliwa.

Załaduj konfigurację z pliku. Ładowanie utworzonego wcześniej pliku konfiguracyjnego.

Zapisz konfigurację do pliku. Zapisanie danych konfiguracyjnych do pliku o podanej nazwie (do dalszego wykorzystania lub przekazania koledze). Nie wpływa to na konieczność wykonania polecenia Save and Exit, które tworzy plik konfiguracyjny do rekompilacji jądra.

Kompilowanie i uruchamianie nowego jądra

Po zakończeniu konfiguracji należy sprawdzić, czy w katalogu /usr/src/linux-2 .4.2 znajduje się nowy plik konfiguracyjny (.config) (w zależności od numeru wersji). Jeśli plik konfiguracyjny .config jest na swoim miejscu, możesz użyć polecenia make, aby ponownie skompilować jądro.

Zazwyczaj ponowna kompilacja jądra trwa od 15 minut do kilku godzin. Zależy to od szybkości procesora, ilości pamięci RAM i wielu innych czynników, dlatego wygodnie jest połączyć wszystkie polecenia wprowadzone podczas kompilacji w jedno, oddzielone średnikiem, tak aby były wykonywane sekwencyjnie.

Rozpoczęcie procesu rekompilacji

Poniższe polecenia mają na celu utworzenie nowego jądra poprzez rekompilację wszystkich jego modułów i zapisanie ich w odpowiednich katalogach systemowych. (Tam będą dostępne dla poleceń jądra.)

Aby ponownie skompilować system, zostaną wprowadzone następujące polecenia.

# make dep; oczyścić; zrobić bzlmage; tworzyć moduły; make modules_install

Każdą komendę make można wprowadzić osobno, po zakończeniu poprzedniej.

Po wprowadzeniu tych poleceń na ekranie będą migać linie opisujące katalogi, do których uzyskuje dostęp program make, czyli uruchomienie kompilatora gcc. do kompilowania różnych plików źródłowych i łączenia różnych bloków. Wykonanie każdego z tych poleceń zajmie kilka minut.

Możesz teraz utworzyć dyskietkę startową dla nowego jądra za pomocą polecenia

Przed wykonaniem tego polecenia musisz włożyć sformatowaną dyskietkę do napędu. Gotowy dysk startowy musi zostać przetestowany. Uruchom ponownie komputer bez wyjmowania dyskietki z napędu.

Po wykonaniu poleceń kompilacji jądra i powrocie do wiersza poleceń, tworzone jest nowe jądro. Aby uruchomić system z nowym jądrem, należy go przenieść do standardowego katalogu, z którego będzie uruchamiany. Odbywa się to poprzez wpisanie polecenia

# cf /usr/src/linux-2.4.2/arch/i386/boot/bzlmage /boot/vmlinuz-2.4.2-2

Na koniec, aby zaktualizować mapę rozruchową, uruchom polecenie lilo:

Możesz podać numer wersji w nazwie obrazu jądra do skopiowania. Ważne jest, aby nazwa tego pliku była zgodna z nazwą określoną w pliku /etc/lilo.conf.

Testowanie nowego jądra

Po przeniesieniu nowego pliku jądra do katalogu domyślnego (określonego w pliku lilo.conf), system może zostać zrestartowany z tym jądrem.

Natychmiast po ponownym uruchomieniu sprawdź działanie nowych narzędzi, dla których rozpoczęto rekompilację. Możesz wykonać następujące czynności.

Porównanie objętości starych i nowych rdzeni. Należy sprawdzić ilość pamięci zajmowanej przez system operacyjny, wydając polecenie free.

Montowanie systemu plików lub próba uzyskania dostępu do urządzenia bez ładowania modułu jądra do jego obsługi (jeśli obsługa tego urządzenia jest wbudowana w jądro).

Korzystanie z zasobów sieciowych (takich jak aliasy IP), których nie było w starym jądrze.

Może być konieczne sprawdzenie znacznika czasu bieżącego pliku jądra. Aby to zrobić, wpisz polecenie uname. Pozwala to upewnić się, że system aktualnie działa ze zrekompilowanym jądrem. Znacznik czasu i data jądra muszą odpowiadać czasowi jego ponownej kompilacji.

Jeśli odpowiedź z polecenia uname wskazuje, że system nie został uruchomiony z nowym jądrem, zajrzyj do programu ładującego LILO. Sprawdź, czy nazwa jądra startowego jest poprawna w pliku /etc/lilo.conf.

ZOBACZ WIĘCEJ:

Kompilowanie i instalowanie jądra Linux ze źródeł w Debianie

Materiał z Bryansk Linux Users Group i www.rm.pp.ru

Każda dystrybucja ma swoją specyfikę budowy jądra, a ten artykuł skupia się dokładnie na tym, jak to zrobić w Debian Etch. Ujawnia również pytanie, jak zastosować tę lub inną łatkę do jądra, gdy jest to konieczne do obsługi określonej funkcjonalności lub nowego sprzętu w systemie. Artykuł przeznaczony jest przede wszystkim dla bardziej zaawansowanych użytkowników i nie ma gwarancji, że ta metoda będzie działać tak, jak powinna, a wszystkie opisane działania i odpowiedzialność spadają na Ciebie.

  1. Notatka
  2. Metoda pierwsza. Wbudowanie jądra w pakiety .deb
  3. Nakładanie łatek
  4. Konfiguracja jądra
  5. Kompilacja jądra
  6. Instalowanie nowego jądra
  7. Metoda druga. "tradycyjny sposób
  8. Problemy
  9. Spinki do mankietów

Notatka

Opisane zostaną dwie metody budowania jądra. Wariant kompilacji pakietów .deb, które mogą być zainstalowane w twoim lub innym systemie, zostanie opisany jako pierwszy.

Druga metoda to tak zwany „tradycyjny” sposób.

Metoda pierwsza. Wbudowanie jądra w pakiety .deb

Instalowanie niezbędnych pakietów do kompilacji jądra

Najpierw zaktualizujmy listy pakietów:

# apt-pobierz aktualizację

Zainstaluj potrzebne nam pakiety:

# apt-get install pakiet jądra libncurses5-dev fakeroot wget bzip2 build-essential

Pobieranie źródeł jądra

Przejdź do katalogu /usr/src, przejdź do www.kernel.org i wybierz żądaną wersję jądra. W takim przypadku rozpatrzona zostanie wersja linux-2.6.23.1.tar.bz2. Ściąganie:

# cd /usr/src # wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.23.1.tar.bz2

Rozpakuj źródła i utwórz dowiązanie symboliczne:

# tar xjf linux-2.6.23.1.tar.bz2 # rm linux (usuń poprzednie dowiązanie symboliczne) # ln -s linux-2.6.23.1 linux # cd /usr/src/linux

Nakładanie łatek

Opcjonalne i niepotrzebnie tego nie rób!

Czasami wymagane są sterowniki lub funkcje, które nie są obsługiwane w bieżącym jądrze, takie jak technologia wirtualizacji lub inne specyfikacje, których nie ma w bieżącej wersji. W każdym razie jest to korygowane przez nałożenie tak zwanych łatek (jeśli istnieją).

Załóżmy, że pobrałeś wymaganą łatkę (nazwijmy ją na przykład patch.bz2) do /usr/src. Zastosuj pobraną łatkę do naszych źródeł (nadal powinieneś znajdować się w katalogu /usr/src/linux):

# bzip2 -dc /usr/src/patch.bz2 | patch -p1 --dry-run # bzip2 -dc /usr/src/patch.bz2 | łatka-p1

Pierwsze polecenie to tylko test i żadne zmiany nie zostaną zastosowane do źródeł. Jeśli po pierwszym poleceniu nie zostaną zwrócone żadne błędy, możesz uruchomić drugie polecenie, aby zastosować poprawkę. W żadnym wypadku nie wykonuj drugiego polecenia, jeśli po pierwszym pojawiły się błędy!

W ten sposób możesz zastosować łaty do źródeł jądra. Na przykład niektóre funkcje są dostępne tylko w jądrze 2.6.23.8, a źródła nie zawierały niezbędnej funkcjonalności, ale została wydana łatka-2.6.23.8.bz2. Możesz zastosować tę poprawkę do źródeł jądra 2.6.23, ale nie 2.6.23.1, 2.6.23.3 itd. Więcej na ten temat można przeczytać na:

Prefiksy (prepatche) - odpowiedniki wydań alfa; poprawki muszą być zastosowane do źródeł pełnej poprzedniej wersji z wersją 3-cyfrową (na przykład łatę 2.6.12-rc4 można zastosować do źródeł w wersji 2.6.11, ale nie do wersji 2.6.11.10.)

Oznacza to, że jeśli chcemy zbudować jądro 2.6.23.8, musimy pobrać źródła dla wersji 2.6.23 (http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6. 23.tar.gz) zastosowany w drugi sposób "tradycyjny" sposób!

Zastosuj patch-2.6.23.8.bz2 do jądra 2.6.23:

# cd /usr/src # wget http://www.kernel.org/pub/linux/kernel/v2.6/patch-2.6.22.8.bz2 # cd /usr/src/linux # bzip2 -dc /usr/ src/patch-2.6.23.8.bz2 | patch -p1 --dry-run # bzip2 -dc /usr/src/patch-2.6.23.8.bz2 | łatka-p1

Konfiguracja jądra

Dobrym pomysłem jest użycie istniejącego pliku konfiguracyjnego działającego jądra również dla nowego. Dlatego kopiujemy istniejącą konfigurację do /usr/src/linux:

# make clean && make mrproper # cp /boot/config-`uname -r` ./.config

# make menuconfig

po czym zostanie załadowane graficzne menu konfiguracji jądra. Wybierz "Załaduj alternatywny plik konfiguracyjny" w menu konfiguratora i kliknij "OK". Następnie (jeśli to konieczne) wprowadź niezbędne zmiany w konfiguracji jądra, poruszając się po menu (szczegóły konfiguracji jądra można znaleźć na www.google.com). Kiedy skończysz i naciśniesz "Exit", pojawi się pytanie "Czy chcesz zapisać swoją nową konfigurację jądra?", a my odpowiemy twierdząco "Tak".

Budowanie jądra Linux

Kompilacja jądra

Budowanie jądra odbywa się za pomocą zaledwie dwóch poleceń:

# make-kpkg clean # fakeroot make-kpkg --initrd --append-to-version=-cybermind kernel_image kernel_headers

Po --append-to-version= możesz wpisać dowolną nazwę, ale musi zaczynać się znakiem minus (-) i nie może zawierać spacji.

Proces kompilowania i budowania pakietów .deb może zająć dość dużo czasu. Wszystko będzie zależeć od konfiguracji jądra i możliwości twojego procesora.

Rozwiązanie problemu z tworzeniem initrd.img

Ostatnio w Debianie pojawił się błąd polegający na tym, że po zainstalowaniu pakietów z jądrami zbudowanymi w opisany tutaj sposób nie jest tworzony odpowiadający im plik /boot/initrd.img. Aby naprawić już zainstalowane jądro, będziesz musiał ręcznie utworzyć initrd.img:

update-initramfs -c -k<полная-версия-ядра>

Aby rozwiązać problem "na przyszłość" - skomentuj, jak pokazano, drugi z zacytowanych poniżej wierszy w pliku /etc/kernel/postinst.d/initramfs-tools:

# kernel-package przekazuje dodatkowy argument; hack, aby nie uruchamiać się w pakiecie jądra #[ -z "$2" ] || wyjście 0

Instalowanie nowego jądra

Gdy kompilacja jądra zakończy się pomyślnie, w katalogu /usr/src zostaną utworzone dwa pakiety .deb:

# cd /usr/src # ls -l

linux-image-2.6.23.1-cybermind_2.6.23.1-cybermind-10.00.Custom_i386.deb - aktualne jądro i linux-headers-2.6.23.1-cybermind_2.6.23.1-cybermind-10.00.Custom_i386.deb - nagłówki jądra potrzebne do budowy innych modułów (na przykład podczas budowania modułów sterowników nVidia). Instalowanie ich:

# dpkg -i linux-image-2.6.23.1-cybermind_2.6.23.1-cybermind-10.00.Custom_i386.deb # dpkg -i linux-headers-2.6.23.1-cybermind_2.6.23.1-cybermind-10.00.Custom_i386.deb

(Te pakiety można teraz zainstalować w innym systemie bez konieczności ponownego ich budowania.)

Wszystko, instalacja zakończona, menu bootloadera, instalacja nowego RAM-dysku i jądra zrobią się automatycznie. Pozostaje tylko zrestartować:

Metoda druga. "tradycyjny sposób

Wszystkie punkty opisane powyżej wykonujemy PRZED punktem „Kompilacja jądra”.

# make all # make modules_install # make install

Jak zwykle kompilacja może zająć dużo czasu, w zależności od konfiguracji jądra i możliwości procesora.

Główną wadą tej metody jest to, że jeśli często aktualizujesz jądra, po pewnym czasie zgromadzi się ich duża liczba i będziesz chciał usunąć nieużywane. Aby to ułatwić, możesz zbudować jądro i inne pliki, które są instalowane w systemie, używając poleceń "make modules_install" i "make install" w pakiecie deb (lub raczej dwóch, począwszy od jądra 2.6.27), tak jak w pierwszym metody, ale użyjemy tutaj ze skryptami jądra:

# make all # make deb-pkg

W katalogu o jeden poziom powyżej katalogu źródłowego pojawią się dwa pliki .deb. Jądro skompilowałem w katalogu /usr/src/linux-2.6.27.10 i dostałem pliki w katalogu /usr/src/

# linux-2.6.27.10_2.6.27.10-1_amd64.deb # linux-firmware-image_2.6.27.10-1_all.deb

Jądro jest instalowane za pomocą polecenia

# dpkg -i linux-2.6.27.10_2.6.27.10-1_amd64.deb

Stare ziarna można usunąć np. z synaptic

Następne kroki

Jądro jest zbudowane i zainstalowane, ale nawet teraz musisz utworzyć dysk RAM (bez którego jądro po prostu się nie uruchomi) i musisz zaktualizować bootloader GRUB. Aby to zrobić, wykonaj następujące czynności:

# depmod 2.6.23.1 # apt-get install yaird

Zainstaluj dysk RAM:

# mkinitrd.yaird -o /boot/initrd.img-2.6.23.1 2.6.23.1

Zaktualizujmy bootloader łatwo i bezboleśnie:

Wszystko, bootloader i nowe jądro gotowe, pozostaje tylko zrestartować:

Problemy

Jeśli po ponownym uruchomieniu, wybrane nowe jądro nie uruchamia się, uruchom ponownie i wybierz poprzednie jądro, a następnie spróbuj ponownie przejść przez cały proces, aby zbudować działające jądro. W takim przypadku nie zapomnij usunąć wierszy niedziałającego jądra w /boot/grub/menu.lst.

Kompilacja jądra Linux

Po co w ogóle kompilować jądro?
Być może głównym pytaniem, jakie pojawia się przy kompilacji jądra, jest: „Dlaczego mam to robić?”.
Wielu uważa, że ​​pokazywanie się jako mądry i zaawansowany „Linuxoid” to bezsensowna strata czasu. W rzeczywistości kompilacja jądra jest bardzo ważną rzeczą. Załóżmy, że kupiłeś nowy laptop bez działającej kamery internetowej. Twoje działania? Zaglądasz do wyszukiwarki i szukasz rozwiązania problemu w tej sprawie. Dość często może się okazać, że Twoja kamera internetowa działa na nowszej wersji jądra niż masz. Jeśli nie wiesz, jaką masz wersję, wpisz w terminalu uname -r, w rezultacie otrzymasz wersję jądra (na przykład linux-2.6.31-10). Ponadto kompilacja jądra jest szeroko stosowana w celu zwiększenia wydajności: faktem jest, że dystrybucje jądra są domyślnie kompilowane „dla wszystkich”, dlatego zawiera ogromną liczbę sterowników, których możesz nie potrzebować. Jeśli więc dobrze znasz swój sprzęt, możesz wyłączyć niepotrzebne sterowniki na etapie konfiguracji.

Możliwe jest również włączenie obsługi ponad 4 gigabajtów pamięci RAM bez zmiany głębi bitowej systemu. Tak więc, jeśli nadal potrzebujesz mieć własne jądro, zacznijmy kompilować!

Pobieranie kodu źródłowego jądra.
Pierwszą rzeczą do zrobienia jest pobranie kodu źródłowego dla żądanej wersji jądra. Zwykle potrzebujesz najnowszej stabilnej wersji. Wszystkie oficjalne wersje jądra są dostępne na kernel.org. Jeśli masz już zainstalowany serwer X (komputer domowy), możesz przejść do witryny w ulubionej przeglądarce i pobrać żądaną wersję w archiwum tar.gz (skompresowanym gzip). Jeśli pracujesz w konsoli (na przykład nie masz jeszcze zainstalowanego serwera X lub konfigurujesz serwer), możesz użyć przeglądarki tekstowej (na przykład elinki). Możesz także użyć standardowego menedżera pobierania wget:
wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.33.1.tar.gz
Pamiętaj jednak, że musisz znać dokładny numer wersji, której potrzebujesz.

Rozpakowanie archiwum kodu źródłowego.
Po otrzymaniu archiwum z kodem źródłowym należy je rozpakować do folderu. Można to zrobić z graficznych menedżerów plików (dolphin, nautilus itp.) lub przez mc. Lub użyj tradycyjnego polecenia smoła:
tar -zxvf ścieżka_do_archiwum
Teraz masz folder źródłowy, przejdź do niego za pomocą cd katalog_źródła_źródła (aby wyświetlić katalogi w folderze, użyj polecenia ls).

Konfiguracja jądra.
Po przejściu do katalogu ze źródłami jądra, musisz przeprowadzić „20 minutową” konfigurację jądra. Jego celem jest pozostawienie tylko niezbędnych sterowników i funkcji. Wszystkie polecenia muszą być już wykonane w imieniu administratora.

make config - tryb konsoli konfiguratora.

make menuconfig - tryb konsoli jako lista.

make xconfig - tryb graficzny.

Po dokonaniu niezbędnych zmian zapisz ustawienia i wyjdź z konfiguratora.

Kompilacja.
Czas na ostatni etap montażu - kompilację. Odbywa się to za pomocą dwóch poleceń:
stwórz i stwórz instalację
Pierwsze polecenie skompiluje wszystkie pliki do kodu maszynowego, a drugie zainstaluje nowe jądro w twoim systemie.
Czekamy od 20 minut do kilku godzin (w zależności od mocy komputera).

Konfiguracja i kompilacja jądra Linux

Jądro jest zainstalowane. Aby pojawił się na liście grub(2), wpisz (jako root)
aktualizacja-grub
Teraz po restarcie naciśnij "Escape", a zobaczysz nowe jądro na liście. Jeśli jądro się nie włącza, po prostu uruchom stare jądro i skonfiguruj ostrożniej.

KernelCheck - kompilacja jądra bez wchodzenia do konsoli.
KernelCheck pozwala na zbudowanie jądra w pełni graficznym trybie dla Debiana i opartych na nim dystrybucji. Po uruchomieniu KernelCheck zaoferuje najnowsze wersje jądra i łatki, a po wyrażeniu zgody pobierze kod źródłowy i uruchomi konfigurator graficzny. Program wbuduje jądro w pakiety .deb i zainstaluje je. Będziesz musiał tylko zrestartować.

Archiwum artykułów:
maj 2017
Marzec 2017
kwiecień 2016
Marzec 2016
Październik 2013
wrzesień 2013
Maj 2013
Marzec 2013
Listopad 2012
lipiec 2012
czerwiec 2012
kwiecień 2012
Marzec 2012
Luty 2012
kwiecień 2011
Marzec 2011
Luty 2011
styczeń 2011
grudzień 2010
Listopad 2010
Październik 2010
wrzesień 2010
Sierpień 2010
lipiec 2010
czerwiec 2010
maj 2010
kwiecień 2010
Marzec 2010

Losowy:

Aurorae: silnik do dekoracji okien dla KDE

Sblog zostanie przepisany w .NET

Linuxnow.ru: Plany na przyszłość

Bolgenos. Odrzucenie Teleconu

GRUB 2 Szybkie odzyskiwanie

Free Software Foundation i copyleft.

Koledzy: wszyscy
Linux dla każdego

Nasze banery:


Ustaw baner

Pytanie brzmi, dlaczego nie nauczyć się robić tego samego z jądrem Linuksa? Powody budowania jądra Linuksa ze źródeł są generalnie takie same - uzyskanie najnowszej wersji jądra, pilne zastosowanie łatek bezpieczeństwa, optymalizacja pod kątem konkretnych zadań i konkretnego sprzętu, a także chęć wzięcia udziału w rozwoju jądra, nawet w roli QA.

Ważny! Postępowanie zgodnie z instrukcjami zawartymi w tym poście może spowodować utratę Twoich danych. Twórz kopie zapasowe i pamiętaj, że robisz wszystko na własne ryzyko i ryzyko. Wszystko opisane poniżej zostało przetestowane na Ubuntu 14.04 LTS. Ale w innych wersjach Ubuntu, a także w innych dystrybucjach Linuksa, różnice powinny być minimalne.

Konfigurowanie bootloadera

Edytuj /etc/default/grub w ten sposób:

GRUB_DEFAULT=0
#GRUB_HIDDEN_TIMEOUT=10
#GRUB_HIDDEN_TIMEOUT_QUIET=prawda
GRUB_TIMEOUT=10
GRUB_DISTRIBUTOR =` lsb_release -i -s 2 > /dev/null || echo Debiana
GRUB_CMDLINE_LINUX_DEFAULT="cichy plusk"
GRUB_CMDLINE_LINUX=""

Po edycji mówimy:

sudo update-grub

W rezultacie przed uruchomieniem systemu zostaniesz poproszony przez 10 sekund o wybranie jądra, z którym chcesz uruchomić system. Bardzo przydatne, jeśli pomieszałeś się z konfiguracją jądra i chcesz uruchomić system z poprzednią wersją!

Zainstaluj zależności

Będziemy potrzebować co najmniej następujących pakietów:

sudo apt-get install git gcc make bc fakeroot dpkg-dev \
libncurses5-dev libssl-dev

Jednak w wielu systemach wszystkie z nich będą już obecne.

Uzyskiwanie źródła

wget https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.6.4.tar.xz
tar --xz -xvf linux-4.6.4.tar.xz
cd linux-4.6.4

Lub, jeśli chcesz mieć najnowsze wersje, możesz pobrać źródło bezpośrednio z Git :

# Lustro: https://github.com/torvalds/linux
git klon „git://git.kernel.org/pub/scm/linux/kernel/git/”\
"torvalds/linux.git"
cd linux

Sądząc po tym, że nie mogłem znaleźć tagu v4.6.4 w Git, wydania jądra Linuksa są tworzone wyłącznie w postaci skompresowanych archiwów tar.

Jeśli zamiast jądra waniliowego chciałbyś zbudować jądro z łatami z Canonical:

klon git git://kernel.ubuntu.com/ubuntu/ubuntu-trusty.git
cd ubuntu-zaufany
tag git | mniej
git kasa Ubuntu-lts-4.4.0-31.50_14.04.1

Z własnego doświadczenia, jeśli używasz Ubuntu, możesz bezpiecznie korzystać z jądra waniliowego. Jest mało prawdopodobne, że będziesz miał z tym jakiekolwiek problemy.

Notatka: Co ciekawe, z istniejących, stosunkowo popularnych dystrybucji Linuksa, jedynie Gentoo, Slackware i Arch Linux wydają się używać jądra bez własnych poprawek.

W każdym razie, teraz masz kod źródłowy.

Kompilacja i instalacja jądra

Wybierz opcje, z którymi zostanie zbudowane jądro:

utwórz konfigurację menu

W razie potrzeby zmień ustawienia, kliknij Zapisz, a następnie Zakończ. Spowoduje to utworzenie pliku .config zawierającego wybrane przez nas opcje.

Na aktualizacja kernel (czy już używasz jakiegoś jądra?) wygodnie jest wziąć konfigurację bieżącego jądra i ustawić nowe opcje na ich domyślne wartości:

zcat /proc/config.gz > ./.config
utwórz olddefconfig

Na koniec zbieramy:

make -j4 bindeb-pkg LOCALVERSION=-custom

Rdzeń montowany jest dość długo. Na moim laptopie montaż trwał 1 godzinę i 15 minut. Jednak od tego czasu o Resztę poświęca się na budowanie gigantycznego pakietu jądra z symbolami debugowania. Składanie tego pakietu może zostać wyłączone przez zakomentowanie parametru CONFIG_DEBUG_INFO w konfiguracji. Pamiętaj tylko, że ten pakiet jest wymagany przez SystemTap i inne przydatne narzędzia.

Oprócz samego jądra możesz również zbierać dokumentację:

# jest też `make pdfdocs` i inne, zobacz `make help`
tworzyć htmldocs
Dokumentacja przeglądarki chromium/ DocBook/ index.html

Po zakończeniu montażu pomocniczy katalog widzimy coś takiego:

linux-firmware-image-4.4.13-custom_4.4.13-custom-1_amd64.deb
linux-headers-4.4.13-custom_4.4.13-custom-1_amd64.deb
linux-image-4.4.13-custom_4.4.13-custom-1_amd64.deb
linux-image-4.4.13-custom-dbg_4.4.13-custom-1_amd64.deb
linux-libc-dev_4.4.13-custom-1_amd64.deb

Umieszczamy wszystkie pakiety deb z wyjątkiem wersji dbg jądra ze zwykłym sudo dpkg -i i uruchom ponownie. Po ponownym uruchomieniu spójrz na dane wyjściowe polecenia uname-a. Upewniamy się, że naprawdę uruchomiliśmy nowe jądro. Jeśli coś jest nie tak z nowym jądrem, w bootloaderze po prostu wybieramy to, z którego system był wcześniej uruchamiany. Po uruchomieniu ze starym jądrem szybko usuwamy pakiety nowego jądra i voila - system wrócił do poprzedniego stanu.

W połowie marca, po prawie dwóch miesiącach rozwoju i siedmiu kandydatach do wydania, Linus Torvalds przedstawił nową wersję jądra 4.5. Oprócz poprawek w wydaniu jest naprawdę wiele nowych rzeczy. Zmiany objęły wszystkie podsystemy - dysk, pamięć, usługi systemowe i sieciowe, zabezpieczenia i oczywiście sterowniki dla nowych urządzeń. Spróbujmy zająć się niektórymi z najciekawszych.

O wydaniu

Wersja jądra 4.4 została wydana stosunkowo niedawno, na początku stycznia 2016 r., ale w tym krótkim czasie zgromadziła się duża liczba dodatków. I choć Linus nazwał nowe wydanie „normalnym”, widać, że w porównaniu do wersji 4.4, rozmiar łatki urósł prawie o jedną trzecią – 70 MB wobec 49 MB. W opracowaniu wzięło udział około 1528 osób, które dokonały ok. 13 tys. poprawek. W ponad 11 tys. plików dodano 1 146 727, usunięto 854 589 linii kodu. W 4,4 było odpowiednio 714 106 i 4710 010 linii. Prawie połowa (45%) wszystkich zmian dotyczy sterowników urządzeń, 17% dotyczy kodu architektur sprzętowych, 14% dotyczy stosu sieciowego, 4% - systemów plików, a 3% dotyczy wewnętrznych podsystemów jądra. Doug Ledford z Red Hat wniósł najwięcej wierszy, wykonując większość prac porządkowych (7,7%), Tomi Valkeinen z Texas Instruments, który pracował nad obsługą podarchitektury OMAP (5,3%), trzech programistów skupiło się na sterownikach graficznych AMD: Eric Huang - 3,3 %, Alex Deucher – 2,4%, a yanyang1 – 1,6%. Liderzy zestawu zmian - Linus Walleij z Linaro, który zaimplementował wiele niskopoziomowych zmian, w tym do obsługiwanego przez siebie GPIO (2,0%), Arnd Bergmann, który wykonał dużo pracy na rzecz wsparcia ARM (1,9%) oraz Leo Kim, który pracował na sterowniku wilc1000 (1,7%). Tak jak poprzednio, wiele korporacji jest zainteresowanych rozwojem rdzenia. Prace nad wersją 4.5 wspierało ponad 200 firm, m.in. Red Hat, Intel, AMD, Texas Instruments, Linaro, Linux Foundation, Samsung, IBM, Google. Większość z nich rozwija wsparcie dla swoich urządzeń oraz powiązanych podsystemów i narzędzi, ale na przykład Google tradycyjnie wprowadza wiele zmian w podsystemie sieciowym Linux.

Jądro i sterowniki

Przenoszenie złożonego i źle utrzymanego kodu napisanego w asemblerze (x86/asm) do C było kontynuowane w wersji 4.0. Jądro można teraz zbudować z opcją -fsanitize=undefined. Sam parametr pojawił się dwa lata temu w GCC 4.9+ i aktywuje tryb debugowania UBSan (Undefined Behavior Sanitizer), który wykrywa niezdefiniowane zachowanie właściwe dla języków C i C++: użycie niestatycznych zmiennych przed inicjalizacją, dzielenie przez zero, przepełnienie liczby całkowitej i tak dalej. Kompilator zazwyczaj zakłada, że ​​takie operacje nigdy nie wystąpią, a jeśli tak się stanie, wynik może być dowolny i zależy od samego kompilatora. Teraz kompilator wykrywa takie sytuacje, generuje „błąd wykonania:” (możesz wyłączyć -fno-sanitize-recover) i kontynuuje wykonywanie. Domyślnie w każdym asemblerze systemu operacyjnego wszystkie biblioteki są ładowane na określone adresy, co ułatwia przeprowadzenie ataku. W celu zwiększenia bezpieczeństwa stosuje się szereg technologii, jedną z nich jest losowe przesunięcie podczas wywoływania mmap(), zaimplementowane w postaci ASLR (Address Space Layout Randomization). Technologia ASLR po raz pierwszy pojawiła się w Linuksie w 2005 roku w jądrze 2.6 i dała 8-bitowe przesunięcie dla systemów 32-bitowych (czyli 256 opcji adresowych, choć w rzeczywistości mniej), a dla x64 - przesunięcie jest już 28-bitowe. W przypadku x64 jest wystarczająco dużo opcji, ale w przypadku systemów 32-bitowych, w tym Androida, dziś to zdecydowanie za mało. Istnieją już znane exploity, które mogą wychwycić adres. W wyniku poszukiwań rozwiązania problemu została napisana łatka pozwalająca ustawić większą losowość dla ASLR, poprzez /proc/sys/vm/mmap_rnd_bits i /proc/sys/vm/mmap_rnd_compat_bits (na systemach x64 dla procesów x86). Dla każdej architektury określone są wartości minimalne i maksymalne, biorąc pod uwagę dostępną przestrzeń adresową. Dla x86 wartość może wynosić od 8 do 16 bitów lub od 28 do 32 (dla wersji x64). Domyślne opcje można ustawić podczas budowania jądra.
Konfiguracja ASLR w nowym jądrze Rozszerzone możliwości sterownika DRM dla kart graficznych NVIDIA (Nouveau) i Intel (obsługa przyszłej generacji układów Kaby Lake), dodano obsługę nowych kart dźwiękowych, kontrolerów USB i akceleratorów kryptograficznych. Producenci kart graficznych Intel i NVIDIA już dawno zrezygnowali z używania UMS (Userspace Mode Setting) w swoich sterownikach open source na rzecz KMS (Kernel Mode Setting), teraz przyszła kolej na sterownik ATI Radeon, który usunął kod trybu UMS. Od wersji 3.9 można było ją włączyć za pomocą parametru DRM_RADEON_UMS lub ustawiając radeon.modeset=0 w GRUB-ie. Teraz pozostaje tylko KMS (ustawienie trybu jądra). Należy to wziąć pod uwagę, jeśli musisz korzystać ze starszych sterowników lub trybu UMS (UMS czasami wykazuje lepszą wydajność). Dodano eksperymentalne wsparcie dla technologii dynamicznego zarządzania energią PowerPlay do sterownika AMDGPU, aby poprawić wydajność GPU dla procesorów graficznych Tonga i Fiji oraz zintegrowanych Carrizo i Stoney. W trybie PowerPlay GPU uruchamia się w trybie niskiego zużycia energii, ale jeśli obciążenie podsystemu graficznego wzrasta, automatycznie zwiększa częstotliwość. Domyślnie PowerPlay jest wyłączony, aby go włączyć, należy przekazać parametr amdgpu.powerplay=1 do jądra. Nowa wersja Media controller API rozszerza wsparcie dla urządzeń Video4Linux i pozwala na wykorzystanie funkcjonalności kontrolera multimediów w innych podsystemach, takich jak DVB, ALSA i IIO. Wiele zrobiono w KVM (Kernel-Based Virtual Machine), aby wspierać architekturę s390 (teraz może używać do 248 vCPU), ARM/ARM64 i poprawić wydajność x86 w Hyper-V.

Instalowanie jądra 4.5 w Ubuntu

Najłatwiejszym sposobem na zapoznanie się z nowym jądrem jest skorzystanie z kompilacji zespołu jądra Ubuntu. Po obszernych testach nowe jądro trafia do ppa:canonical-kernel-team/ppa , ale zwykle zajmuje to trochę czasu. $ wget -c http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.5-wily/linux-headers-4.5.0-040500-generic_4.5.0-040500.201603140130_amd64.deb http://kernel .ubuntu.com/~kernel-ppa/mainline/v4.5-wily/linux-headers-4.5.0-040500_4.5.0-040500.201603140130_all.deb http://kernel.ubuntu.com/~kernel-ppa/mainline /v4.5-wily/linux-image-4.5.0-040500-generic_4.5.0-040500.201603140130_amd64.deb $ sudo dpkg -i linux*.deb Możemy pracować po restarcie.

Wsparcie ramienia

Komputery ARM są wykorzystywane jako miniserwery do określonych zadań lub jako sterowniki automatyki, co czyni je bardzo popularnymi i poszukiwanymi. Społeczność Linux ARM stała się jedną z najbardziej aktywnych w ciągu ostatnich pięciu lat, wykonując ogromną pracę, aby wspierać 32-bitowe platformy ARM, które zajmują znaczny udział w rynku, a prace te zostały ogólnie zakończone wraz z wydaniem 4.5. Oddział. Wcześniej dla każdego urządzenia ARM konieczne było zbudowanie własnego jądra, zapewniającego obsługę tylko niektórych urządzeń. Problem w tym, że urządzenia stały się bardziej złożone, pojawiła się możliwość zmiany konfiguracji, a sami użytkownicy na urządzeniach ARM chcieli korzystać ze zwykłych dystrybucji bez zbędnych gestów. Ale w końcu mieliśmy kilkaset opcji budowania jądra, co bardzo utrudnia korzystanie z Linuksa. W wyniku oczyszczenia i refaktoryzacji dużej ilości kodu stało się możliwe uwzględnienie w jądrze kodu wsparcia ARMv6 i ARMv7, czyli teraz możemy zbudować uniwersalne jądro, które może uruchamiać się na obu systemach. Tutaj chyba trzeba przypomnieć ostatnio promowaną specyfikację Device Tree, która powstała w ramach rozwoju Open Firmware. Drzewo urządzeń umożliwia konfigurowanie sprzętu podczas uruchamiania systemu za pomocą specjalnych plików dts przechowywanych w /boot/dtbs i zmianę ustawień bez przebudowy jądra. Korzystanie z drzewa urządzeń staje się obowiązkowe dla wszystkich nowych rozwiązań ARM, a nie tylko dla urządzeń. Wszystko to razem daje pewność, że w przyszłości dystrybucje Linuksa będą mogły być bezpiecznie uruchamiane na dowolnym urządzeniu ARM. Równolegle Greg Kroah-Hartman z Linux Foundation opublikował łatkę, która implementuje podobną funkcję we wczesnych wersjach jądra. W arch/arm64 znajdujemy kod, który zapewnia obsługę nowej 64-bitowej architektury ARM (ARMv8). Dodano nowe funkcje dla wszystkich popularnych architektur ARM - Allwinner, Amlogic, Samsung, Qualcomm oraz wsparcie dla nowych płyt ARM od różnych programistów.

Usługi systemowe

Aby uzyskać dostęp do danych oprogramowania układowego UEFI (Unified Extensible Firmware Interface) w systemie Linux, używany jest specjalny system pseudoplików efivars (konfigurowany przez EFIVAR_FS), który jest montowany w /sys/firmware/efi/efivars . W niektórych implementacjach podczas wykonywania polecenia rm -rf /* usuwano również zawartość tego katalogu, co prowadziło do zniszczenia oprogramowania układowego. Firmy - twórcy urządzeń nie uważają tego za poważną wadę, ponieważ sytuacja oczywiście nie jest najczęstsza i jest mało prawdopodobne, aby jakikolwiek użytkownik pomyślał, aby to sprawdzić. Niemniej jednak istnieje problem, a twórcy wirusów mogą naprawdę skorzystać z tej możliwości. Jądro 4.5 dodaje teraz specjalną ochronę do katalogu /sys/firmware/efi/efivars, aby zapobiec usuwaniu znajdujących się w nim plików.

Nadal dostępne tylko dla członków

Opcja 1. Dołącz do społeczności „strony”, aby przeczytać wszystkie materiały na stronie

Członkostwo w społeczności w wyznaczonym okresie zapewni ci dostęp do WSZYSTKICH materiałów hakerskich, zwiększy osobistą skumulowaną zniżkę i pozwoli na zgromadzenie profesjonalnej oceny Xakep Score!

Rdzeń(Język angielski) jądro) jest tym, wokół czego zbudowane jest wszystko inne. To właśnie nazywa się Linux. Teraz słowo Linux w życiu codziennym nazywa się zbudowanym na nim systemem operacyjnym, choć w dobrym sensie nazywa się to GNU/Linux (jądro Linuxa i oprogramowanie z projektu GNU, który jest rozwijany od wielu dziesięcioleci).

Ubuntu używa jądra z dużą liczbą poprawek, z których niektóre dodają niestabilne i eksperymentalne funkcje.

Każde wydanie Ubuntu ma swoją własną wersję jądra. Wersje LTS od 10.04 były w stanie zaktualizować jądro do wersji zawartych w nowszych wydaniach.

Wersja UbuntuWersja jądra
4.10 2.6.9
5.04 2.6.11
5.10 2.6.13
6.06LTS 2.6.15
6.10 2.6.18
7.04 2.6.19
7.10 2.6.20
8.04LTS 2.6.24
8.10 2.6.27
9.04 2.6.28
9.10 2.6.31
10.04LTS 2.6.32
10.10 2.6.35
11.04 2.6.38
11.10 3.0.4
12.04LTS 3.2
12.10 3.5
13.04 3.8
13.10 3.11
14.04LTS 3.13
14.10 3.16
15.04 3.19

widelce

Numeracja wersji jądra Ubuntu i na stronie kernel.org nie zgadzają się, ponieważ programiści z Canonical dodają wersję mikro, aby wskazać dodane poprawki. Na przykład wersja 3.2.0-23 oznaczałaby, że jądro oparte jest na gałęzi 3.2, która ma 23 łaty.

W repozytorium Ubuntu obsługiwane są następujące typy jąder:

Jądro generic-pae pozwala 32-bitowemu systemowi na użycie do 64 GB całkowitej pamięci RAM, przydzielając nie więcej niż 4 GB na potrzeby konkretnego procesu, podczas gdy proste jądro ogólne działa z nie więcej niż 4 GB pamięci RAM.

Jądro 64-bitowe umożliwia adresowanie do 1 TB pamięci zużywanej przez procesy.

Jeśli potrzebujesz zaktualizować jądro do nowszej wersji głównej (zwykle wynika to z faktu, że nowe wersje dodają obsługę nowego sprzętu, eliminują regresje), możesz skorzystać z oficjalnie wspieranego archiwum http://kernel.ubuntu.com/ ~jądro-ppa/główna linia/ .

Kompilacja jądra

Budowanie jądra ze źródeł wymaga pewnych umiejętności i wiedzy na temat działania systemu operacyjnego.

Zanim zaczniesz budować jądro, musisz zainstalować następujące pakiety:

Niezbędna kompilacja fakeroot ncurses-dev libssl-dev

Wszystkie dalsze czynności należy wykonać w imieniu superużytkownika:

sudo su

Pobieranie kodu źródłowego

Kod źródłowy jądra używanego przez Ubuntu można uzyskać, instalując pakiet linux-source:

apt-get zainstaluj źródło linux

Po instalacji w katalogu /usr/src powstanie archiwum o nazwie linux-source-verify_kernels.tar.bz2.

Możesz również pobrać archiwum z kodem źródłowym jądra ze strony kernel.org.

Podczas pobierania jądra ze strony kernel.org będziesz musiał zaaplikować do niego łatki

Konfiguracja

Rozpakuj powstałe archiwum i dla wygody utwórz dowiązanie symboliczne do wynikowego katalogu:

cd / usr/ src tar xjf ./ linux-source-3.2.0.tar.bz2 ln -s ./ linux-source-3.2.0 ./ linux cd ./ linux

Aby uprościć proces konfiguracji jądra, możesz skopiować ustawienia bieżącego.

Mieć pytania?

Zgłoś literówkę

Tekst do wysłania do naszych redaktorów: