Jak skompilować swoje pierwsze jądro Linuksa (i 3 powody, dla których powinieneś)
Zdobycie tej odznaki honorowej wśród większości użytkowników Linuksa nie jest tak trudne, jak mogłoby się wydawać.
Pamiętam, kiedy po raz pierwszy skompilowałem jądro Linuksa. Byłem zdenerwowany. To było coś, czego nigdy wcześniej nie robiłem i wydawało mi się to niezwykle trudnym zadaniem. W końcu, czy jądro nie jest dziełem elitarnych programistów? Jeśli tak, to po co w ogóle miałbym się tym przejmować?
Bo mógłbym.
A ponieważ wszystkie fajne open-source, alternakids to robiły.
Jeśli chciałem się dopasować, musiałem sprawić, by (widzisz, co ja tam zrobiłem?) to się stało.
Pobrałem więc kod źródłowy jądra, wziąłem głęboki oddech i zanurzyłem się w grze.
To było około 2000 lub 2001 roku, a kiedy mi się to udało, jestem pewien, że wykonałem radosny taniec lub dwa.
Ale jak to zrobiłem?
Wierzcie lub nie, ale proces kompilacji jądra Linuksa nie jest tak trudny, jak mogłoby się wydawać. Jest to czasochłonne, ale jest to wyzwanie, któremu z pewnością możesz sprostać.
Dlaczego miałbyś chcieć skompilować jądro?
Istnieją trzy powody, dla których warto to zrobić:
- Chcesz użyć nowszego lub innego jądra niż zapewnia Twoja dystrybucja (takiego jak jądro działające w czasie rzeczywistym lub o małym opóźnieniu).
- Potrzebujesz jądra z bardzo specyficznymi konfiguracjami i tylko określonymi modułami.
- Chcesz pochwalić się znajomym, że skompilowałeś jądro Linuksa.
Pozwólcie, że pokażę wam, jak to się robi.
Jak skompilować jądro Linuksa ze źródeł
Czego będziesz potrzebować: Aby skompilować jądro, musisz pobrać źródło jądra, użytkownika z uprawnieniami sudo i dużo czasu. Zademonstruję to na przykładzie Ubuntu Desktop 24.04. Jeśli używasz dystrybucji, która nie jest oparta na Debianie lub Ubuntu, musisz upewnić się, że zainstalowałeś niezbędne zależności za pomocą menedżera pakietów swojej dystrybucji.
Zanim wyruszysz w tę podróż, znajdź maszynę zapasową lub wdróż maszynę wirtualną. Nie chcesz kompilować swojego pierwszego jądra Linuksa na maszynie produkcyjnej.
1. Pobierz źródło
Pierwszą rzeczą, którą zamierzasz zrobić, to pobrać źródło jądra, którego chcesz użyć. Sugerowałbym przejście bezpośrednio do archiwów jądra Linuksa i pobranie pliku tar żądanego jądra. Zamierzam pobrać kod źródłowy 6.13 w celach demonstracyjnych.
2. Zainstaluj niezbędne zależności
Otwórz okno terminala i wydaj następujące polecenie, aby zainstalować zależności:
sudo apt-get install build-essential libncurses-dev git bison flex libssl-dev -y 2. Rozpakuj zarchiwizowany plik
Otwórz okno terminala i przejdź do katalogu, w którym znajduje się pobrany plik i rozpakuj go za pomocą polecenia:
unxz --keep linux-XXX.tar.xz Gdzie XXX to numer wydania.
3. Rozpakuj plik
Możemy teraz rozpakować plik tar za pomocą polecenia:
tar -xf linux-XXX.tar Gdzie XXX to numer wydania.
4. Konfiguracja jądra
W tym momencie możesz albo użyć konfiguracji ogólnej, albo ręcznie edytować plik .conf w nowo utworzonym katalogu (który będzie nosił nazwę linux-XXX - gdzie XXX to numer wydania). Inną metodą, której możesz użyć (którą sugerowałbym dla pierwszej rundy), jest skopiowanie pliku konfiguracyjnego twojej dystrybucji.
Zanim to zrobisz, przejdź do nowo utworzonego folderu za pomocą polecenia:
cd linux-XXX Gdzie XXX to numer wydania.
Następnie skopiuj plik konfiguracyjny z poleceniem:
cp /boot/config-"$(uname -r)" .config Alternatywnie możesz ręcznie skonfigurować jądro za pomocą polecenia:
make menuconfig
Powyższe polecenie otwiera narzędzie menuconfig, w którym możesz przeglądać i włączać/wyłączać różne funkcje. W ten sposób zawsze kompilowałem jądra. Ta metoda zajmuje trochę czasu (ponieważ jest wiele modułów do przejścia). Jeśli pójdziesz tą drogą, pamiętaj, aby zapisać go w pliku zawierającym:
make savedconfig Powyższe polecenie utworzy nowy katalog zawierający plik .config.
5. Zaktualizuj konfigurację
Po skopiowaniu konfiguracji należy zaktualizować plik konfiguracyjny (ponieważ ten dostarczony z Twoją dystrybucją jest najprawdopodobniej nieaktualny). Aby to zrobić, wydaj polecenie:
make oldconfig Plik .config jest teraz aktualizowany dla pobranego źródła jądra.
6. Wyłącz moduł podpisywania
W przypadku użytkowników dystrybucji opartych na Debianie należy wyłączyć moduł używany do podpisywania modułów jądra, ponieważ certyfikat używany do tego celu nie jest dołączony. Aby to zrobić, wydaj polecenia:
scripts/config --disable SYSTEM_TRUSTED_KEYS
scripts/config --disable SYSTEM_REVOCATION_KEYS Jeśli tego nie zrobisz, kompilacja zakończy się niepowodzeniem w dalszej części procesu, co oznacza, że zmarnujesz dużo czasu (byłeś tam, zrobiłeś to... zbyt wiele razy).
7. Budowanie jądra
Nadszedł czas, aby zbudować jądro za pomocą polecenia:
make -j$(nproc) Zajmie to dość dużo czasu.
8. Zainstaluj moduły jądra
Nie chcesz, aby każdy moduł jądra Linuksa ładował się podczas uruchamiania. Zamiast tego budujemy ładowalne moduły. Ten proces nie tylko instaluje moduły jądra, ale także je podpisuje, co oznacza, że proces ten (po raz kolejny) zajmie trochę czasu. Polecenie do tego to:
sudo make modules_install -j$(nproc) 9. (Opcjonalnie) Zainstaluj pliki nagłówkowe jądra
Istnieją pewne przypadki, w których mogą być potrzebne pliki nagłówkowe jądra (na przykład, jeśli zamierzasz napisać własne moduły lub zainstalować określone oprogramowanie serwera). W tym celu wydaj polecenie:
sudo make headers_install
10. Zainstaluj jądro
Nadszedł czas na zainstalowanie jądra, co odbywa się za pomocą polecenia:
sudo make install 11. Generowanie początkowego ramdysku
Ramdisk (początkowy system plików RAM) jest wymagany do uruchomienia systemu i można go utworzyć za pomocą:
sudo dracut --force /boot/initrd.img-XXX-generic XXX-generic Gdzie XXX to numer wydania jądra, które instalujesz.
12. Zaktualizuj żarcie
Na koniec zaktualizuj bootloader gruba (aby był świadomy nowego jądra) za pomocą:
sudo update-grub2 Możesz teraz ponownie uruchomić komputer i wybrać nowo skompilowane jądro.
Pamiętaj, że zrób to na maszynie wirtualnej lub maszynie testowej, ponieważ nie chcesz bawić się swoim codziennym sterownikiem i skończyć z maszyną, która się nie uruchamia.
Otrzymuj codziennie najważniejsze poranne artykuły w swojej skrzynce odbiorczej dzięki naszemubiuletynowi Tech Today.
