Jaki jest prosty sposób ponownej kompilacji jądra?

41

Jestem zainteresowany skompilowaniem nowego jądra pod Ubuntu 12.04 x86 64 bit.

Znalazłem tę stronę wiki, która jest w zasadzie lustrem dla tego bloga i jest wiele kroków ( git itp.), Które wydają mi się bezużyteczne.

We wcześniejszych wersjach / dystrybucjach tworzyłem .configplik i modyfikowałem go, Makefilejeśli to konieczne, a następnie po prostu uruchamiałem makei gotowe.

Czy istnieje prosty sposób na zrobienie tego w Ubuntu?

użytkownik827992
źródło
1
Warto sprawdzić: wiki.ubuntu.com/Kernel/BuildYourOwnKernel
Colin Ian King

Odpowiedzi:

39

1. Użyj, apt-get sourceaby pobrać wersję jądra Ubuntu

apt-get source linux-image-$(uname -r)

daje folder, który zawiera na przykład:

linux-3.2.0 linux_3.2.0-26.41.dsc
 linux_3.2.0-26.41.diff.gz   linux_3.2.0.orig.tar.gz

Pogrubiony plik różnic zawiera wszystkie dostosowania Ubuntu / Debian.

2. Aby zbudować własne jądro .config, użyj „staromodnej” make-kpkgmetody Debian

Oto alternatywny, staromodny sposób opisany na wiki:

sudo apt-get install kernel-package

Jeśli kompilujesz jądro po raz pierwszy:

sudo apt-get build-dep linux-image-$(uname -r)

Następnie przejdź cddo katalogu źródłowego (tutaj linux-3.2.0) i albo uruchom, make oldconfigaby utworzyć .configplik z konfiguracją działającego jądra, lub skopiuj trzecią część .configdo tego katalogu.

W zależności od tego, czy chcesz konfigurację tekstową czy graficzną, zainstaluj:

(Tekst)

sudo apt-get install libncurses5 libncurses5-dev

(Graficzny)

sudo apt-get install qt3-dev-tools libqt3-mt-dev

A następnie uruchom:

(Tekst)

make menuconfig

(Graficzny)

make xconfig

Po zakończeniu uruchom po prostu:

fakeroot make-kpkg -j N --initrd --append-to-version=my-very-own-kernel kernel-image kernel-headers

gdzie Njest liczba zadań do uruchomienia równoległego (zwykle liczba posiadanych procesorów) i my-very-own-kerneljest to ciąg niestandardowy identyfikujący tę kompilację.

Po zakończeniu obraz jądra i pliki nagłówkowe będą gotowe jako debs w katalogu nadrzędnym; możesz je zainstalować przy pomocy sudo dpkg -i, który zajmie się także dodawaniem wpisów GRUB itp.

ish
źródło
dlaczego nic wam nie mówią o tej różnicy, dla mnie różnica jest tylko różnicą, może zawierać wszystko.
user827992
Nie wiem, musiałbyś ich zapytać (google dla Canonical Kernel Team). Właśnie powiedziałem ci, jak to zbudować;)
ish
1
ok, ostatnie pytanie, jak zastosować ten skompresowany plik różnicowy? : DI muszę wejść do linux-3.2.0katalogu i uruchomić patch -p1 <../patch.diff?
user827992
1
Nie ma potrzeby stosowania różnic; apt-get source ...już to dla ciebie zrobiłem!
ish
2
-1 Nazywasz to „staromodnym”, nazywam to przestarzałym. fakeroot debian/rules editconfigs, fakeroot debian/rules clean, fakeroot debian/rules binaryJest prawidłowy, bezproblemowy sposób.
Aleksandr Dubinsky
19

Oto kroki. Procedura ta jest oparta na nixCraft „s Jak: kompilacji Linux Kernel 2.6 --but znacznie zmodernizowany.

Pobierz i rozpakuj kod źródłowy jądra, które chcesz zbudować.

Można uzyskać upstream kod źródłowy jądra na kernel.org . Zostanie tutaj użyta wersja 3.16.1 (najnowsze stabilne jądro w tym piśmie). Może być konieczne zmodyfikowanie tych poleceń, jeśli używasz innej wersji.

Kod źródłowy jądra jest obecnie dostępny w. smoła . Archiwa xz , więc kliknij link „tar.xz” według dowolnej wersji:

zrzut ekranu z kernel.org, pokazujący archiwa jądra dostępne do pobrania

Po cdwejściu do katalogu, w którym pobrałeś archiwum, możesz je rozpakować za pomocą tar:

tar xf linux-3.16.1.tar.xz

Zainstaluj niezbędne narzędzia do budowania i wykonaj konfigurację jądra.

Aby uzyskać zestaw narzędzi Ubuntu ( gcc, makeitd.), Zainstaluj niezbędny do kompilacjiZainstaluj niezbędny do kompilacji metapakiet:

sudo apt-get update
sudo apt-get install build-essential

Dwa względnie przyjazne dla użytkownika sposoby konfiguracji tego, co wchodzi do jądra, są dostarczane przez makecele xconfigi menuconfig.

xconfiguruchamia narzędzie do konfiguracji graficznej, podczas gdy menuconfigjest oparte na tekście (tzn. jego interfejs pojawia się w pełni w twoim terminalu). Każde wymaga dodatkowego oprogramowania, które nie jest dostarczane przez build-essentialZainstaluj niezbędny do kompilacji .

Aby skonfigurować graficznie , zainstaluj libqt4-devZainstaluj libqt4-dev i pkg-configZainstaluj pkg-config i uruchommake xconfig:

sudo apt-get install libqt4-dev pkg-config
make xconfig

Aby skonfigurować w terminalu , zainstalujlibncurses5-dev(dzięki Hannu za te informacje) i uruchommake menuconfig:

sudo apt-get install libncurses5-dev
make menuconfig

Zbuduj skonfigurowane jądro.

Najpierw uruchom to, aby skompilować jądro i utworzyć vmlinuz:

make

vmlinuzto „jądro”. W szczególności jest to obraz jądra, który zostanie zdekompresowany i załadowany do pamięci przez GRUB lub inny używany program ładujący .

Następnie zbuduj moduły jądra do załadowania :

make modules

Zainstaluj nowo zbudowane jądro.

Zakładając, że te makekomendy zostały wykonane pomyślnie, czas zainstalować nowe jądro. Najpierw zainstaluj moduły:

sudo make modules_install

Następnie zainstaluj samo jądro :

sudo make install

To wstawia vmlinuz-3.16.1(kopię vmlinuz), config-3.16.1(plik tekstowy przechowujący parametry konfiguracyjne jądra) i System.map-3.16.1( tablica wyszukiwania symboli jądra ) /boot. Aby uzyskać więcej informacji, zobacz ten post comp.os.linux.misc autorstwa Hadrona i man installkernel.

Ostateczna konfiguracja, aby jądro można było uruchomić i uruchomić system:

Ta sekcja jest częściowo oparta na informacjach w Kernel / Compile .

Z jądrem, gdzie jest teraz, potrzebuje:

Wygeneruj initramfs za pomocąmkinitramfs:

cd /boot
sudo mkinitramfs -ko initrd.img-3.16.1 3.16.1

Podczas aktualizacji konfiguracji modułu ładującego GRUB2 - który jest domyślny w Ubuntu od 9.10 - powinien automatycznie wykryć nowe jądro i dodać opcję uruchamiania z niego.

sudo update-grub

Wypróbuj swoje jądro.

Teraz możesz zrestartować komputer, aby przetestować swoje nowe jądro. Może być konieczne przytrzymanie Shiftlub naciśnięcie przycisku Escpodczas uruchamiania, aby wyświetlić menu rozruchu GRUB, w którym można wybrać różne zainstalowane jądra.

Aby ustawić jądro (lub inne) jako domyślne, zobacz Jak zmienić kolejność uruchamiania GRUB?

Nowicjusz
źródło
Krok 3 make menuconfigwymagaapt get install libncurses5-dev
Hannu
@Hannu dziękuję, zupełnie zapomniałem o tym wspomnieć. 64-bitowi użytkownicy systemu mogą wymagać „ia32-libs” również do obsługi programów 32-bitowych.
Nowicjusz
Lepiej byłoby znaleźć pakiet niezależny od wersji ... Nie jestem jednak pewien, czy istnieje.
Hannu,
@EliahKagan Dziękujemy. Czy teraz jest OK, czy powinienem go całkowicie usunąć? Nie mam z tym problemu.
Nowicjusz
1
-1 To nie tworzy jądra Ubuntu . Nie produkuje nawet plików .deb. To jest przepis na problemy.
Aleksandr Dubinsky
3

Szybkie instrukcje budowania jądra Ubuntu (w przeciwieństwie do wanilii) można znaleźć tutaj: https://wiki.ubuntu.com/Kernel/BuildYourOwnKernel .

Nie skopiuję całej wiki, ale wymienię minimalne kroki, aby skompilować wersję jądra Ubuntu, którą właśnie zainstalowałeś. (Aby uzyskać najnowszą wersję, należy sklonować repozytorium git jądra nadchodzącej wersji Ubuntu.) Testowane na Ubuntu 16.04.

# Get source code
apt-get source linux-image-$(uname -r)

# Install dependencies
sudo apt-get build-dep linux-image-$(uname -r)

# Compile
cd linux-4.4.0
fakeroot debian/rules clean
fakeroot debian/rules binary

# Install (obviously the versions will be different)
cd ..
sudo dpkg -i linux-image-4.4.0-38-generic_4.4.0-38.57_amd64.deb linux-headers-4.4.0-38_4.4.0-38.57_all.deb linux-headers-4.4.0-38-generic_4.4.0-38.57_amd64.deb
Aleksandr Dubinsky
źródło