Was ist eine einfache Möglichkeit, den Kernel neu zu kompilieren?

41

Ich bin daran interessiert, einen neuen Kernel unter Ubuntu 12.04 x86 64 Bit zu kompilieren.

Ich habe diese Wiki-Seite gefunden, die im Grunde genommen ein Spiegel für diesen Blog ist, und es gibt viele Schritte ( git usw.), die mir nutzlos erscheinen.

In früheren Releases / Distributionen habe ich eine .configDatei erstellt und Makefilebei Bedarf eine Datei geändert. Dann einfach ausgeführt makeund fertig.

Gibt es eine einfache Möglichkeit, dies unter Ubuntu zu tun?

user827992
quelle
1
Sehenswert: wiki.ubuntu.com/Kernel/BuildYourOwnKernel
Colin Ian King

Antworten:

39

1. apt-get sourceLaden Sie mit die Ubuntu-Version des Kernels herunter

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

gibt einen Ordner an, der zum Beispiel enthält:

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

Das fette Diff enthält alle Ubuntu / Debian-Anpassungen.

2. Um einen eigenen Aktienkernel zu erstellen .config, verwenden Sie die "altmodische" Debian- make-kpkgMethode

Dies ist die alternative altmodische Methode, die im Wiki beschrieben wird:

sudo apt-get install kernel-package

Wenn Sie zum ersten Mal einen Kernel kompilieren:

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

Dann cdin das Quellverzeichnis (hier, linux-3.2.0) und entweder ausführen make oldconfig, um eine .configDatei mit der Konfiguration Ihres laufenden Kernels zu erstellen , oder einen dritten Teil .configin dieses Verzeichnis kopieren .

Abhängig davon, ob Sie eine Text- oder eine Grafikkonfiguration wünschen, installieren Sie:

(Text)

sudo apt-get install libncurses5 libncurses5-dev

(Grafisch)

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

Und dann renne:

(Text)

make menuconfig

(Grafisch)

make xconfig

Wenn Sie fertig sind, führen Sie einfach Folgendes aus:

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

Dabei Nhandelt es sich um die Anzahl der Jobs, die parallel ausgeführt werden sollen (normalerweise die Anzahl der CPUs, die Sie haben), und my-very-own-kernelum eine benutzerdefinierte Zeichenfolge zur Identifizierung dieses Builds.

Wenn Sie fertig sind, sind das Kernel-Image und die Header-Dateien als Debs im übergeordneten Verzeichnis verfügbar. Sie können sie mit installieren sudo dpkg -i, wodurch auch GRUB-Einträge usw. hinzugefügt werden.

ish
quelle
warum sie dir nichts über dieses diff erzählen, für mich ist ein diff nur ein diff, es kann alles enthalten.
User827992
Ich weiß nicht, Sie müssten sie fragen (google for Canonical Kernel Team). Ich habe dir gerade gesagt, wie man es baut;)
ish
1
ok, letzte frage, wie man dieses komprimierte diff anwendet : DI müssen in das linux-3.2.0Verzeichnis gehen und ausführen patch -p1 <../patch.diff?
User827992
1
Es ist nicht erforderlich , das Differential anzuwenden. apt-get source ...hab das schon für dich gemacht!
ish
2
-1 Du nennst es "altmodisch", ich nenne es veraltet. fakeroot debian/rules editconfigs, fakeroot debian/rules clean, fakeroot debian/rules binaryIst die korrekte, einwandfreie Art und Weise.
Aleksandr Dubinsky
19

Hier sind die Schritte. Dieses Verfahren basiert auf nixCraft ‚s Gewusst wie: Kompilieren Linux 2.6 Kernel --Aber erheblich modernisiert.

Laden Sie den Quellcode des zu erstellenden Kernels herunter und extrahieren Sie ihn.

Sie können erhalten Upstream bei Kernel - Quellcode kernel.org . Hier wird die Version 3.16.1 (der aktuellste stabile Kernel zum Zeitpunkt des Schreibens) verwendet. Daher müssen Sie diese Befehle möglicherweise ändern, wenn Sie eine andere Version verwenden.

Kernel-Quellcode wird derzeit in bereitgestellt. teer . xz- Archive, klicken Sie also auf den Link "tar.xz" mit der gewünschten Version:

Screenshot von kernel.org mit den zum Download verfügbaren Kernel-Quellarchiven

Nachdem cdSie das Archiv in das Verzeichnis heruntergeladen haben, können Sie es mit tarfolgendem Befehl extrahieren :

tar xf linux-3.16.1.tar.xz

Installieren Sie die erforderlichen Build-Tools und führen Sie die Kernelkonfiguration durch.

Um Ubuntus Toolchain ( gcc, makeusw.) zu erhalten, installieren Sie das Build-Essential-Installieren Sie build-essential Metapaket:

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

Die makeZiele xconfigund bieten zwei einigermaßen benutzerfreundliche Möglichkeiten zur Konfiguration des Kernel- Inhalts menuconfig.

xconfigführt ein grafisches Konfigurationsdienstprogramm aus, während menuconfiges textbasiert ist (dh die Benutzeroberfläche wird vollständig in Ihrem Terminal angezeigt). Jedes erfordert eine zusätzliche Software, die nicht von build-essentialInstallieren Sie build-essential bereitgestellt wird .

Um grafisch zu konfigurieren , installieren Sie libqt4-devInstallieren Sie libqt4-dev und pkg-configInstallieren Sie pkg-config und führen Sie Folgendes ausmake xconfig:

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

Um im Terminal zu konfigurieren , installierelibncurses5-dev(danke an Hannu für diese Info) und führe ausmake menuconfig:

sudo apt-get install libncurses5-dev
make menuconfig

Erstellen Sie den konfigurierten Kernel.

Führen Sie dies zuerst aus, um den Kernel zu kompilieren und Folgendes zu erstellen vmlinuz:

make

vmlinuzist "der Kernel". Insbesondere ist es das Kernel-Image, das von GRUB oder einem anderen von Ihnen verwendeten Bootloader dekomprimiert und in den Speicher geladen wird .

Erstellen Sie dann die ladbaren Kernelmodule :

make modules

Installieren Sie Ihren neu erstellten Kernel.

Vorausgesetzt, diese makeBefehle wurden erfolgreich ausgeführt, ist es Zeit, den neuen Kernel zu installieren. Zuerst installieren Sie die Module:

sudo make modules_install

Dann installiere den Kernel selbst:

sudo make install

Damit werden vmlinuz-3.16.1(eine Kopie von vmlinuz), config-3.16.1(eine Textdatei, in der die Kernel-Konfigurationsparameter gespeichert sind) und System.map-3.16.1(die Nachschlagetabelle für Kernelsymbole ) eingefügt/boot . Weitere Informationen finden Sie in diesem comp.os.linux.misc-Beitrag von Hadron und man installkernel.

Letzte Einrichtung, damit der Kernel gestartet und das System gebootet werden kann:

Dieser Abschnitt basiert teilweise auf Informationen in Kernel / Compile .

Da der Kernel jetzt dort ist, wo er sein muss, muss er:

Generieren Sie Ihre Initramfs mitmkinitramfs:

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

Wenn Sie die Konfiguration des GRUB2-Bootloaders aktualisieren, der seit 9.10 in Ubuntu Standard ist, sollte der neue Kernel automatisch erkannt und eine Option zum Booten hinzugefügt werden .

sudo update-grub

Probieren Sie Ihren Kernel aus.

Jetzt können Sie einen Neustart durchführen, um Ihren neuen Kernel zu testen. Möglicherweise müssen Sie während des Startvorgangs gedrückt halten Shiftoder drücken Esc, um das GRUB-Startmenü anzuzeigen, in dem Sie zwischen den verschiedenen installierten Kerneln auswählen können.

Informationen zum Festlegen Ihres Kernels (oder eines anderen Kernels) als Standard finden Sie unter Wie ändere ich die GRUB-Startreihenfolge ?.

Anfänger
quelle
Schritt 3 make menuconfigerfordertapt get install libncurses5-dev
Hannu
@Hannu danke, das habe ich nur ganz vergessen zu erwähnen. 64-Bit-Systembenutzer benötigen möglicherweise "ia32-libs", damit 32-Bit-Programme ausgeführt werden können.
Anfänger
Könnte auch besser sein, ein versionsunabhängiges Paket zu finden ... Ich bin mir jedoch nicht sicher, ob es eines gibt.
Hannu
@EliahKagan Danke. Ist es jetzt in Ordnung oder sollte ich es komplett löschen? Ich habe kein Problem damit.
Anfänger
1
-1 Dies erzeugt keinen Ubuntu- Kernel. Es werden nicht einmal .deb-Dateien erstellt. Dies ist ein Rezept für Probleme.
Aleksandr Dubinsky
3

Die Kurzanleitung zum Erstellen eines Ubuntu- Kernels (im Gegensatz zu Vanilla) finden Sie hier: https://wiki.ubuntu.com/Kernel/BuildYourOwnKernel .

Ich werde nicht das gesamte Wiki kopieren, aber ich werde die minimalen Schritte auflisten, um die Version des Ubuntu-Kernels zu kompilieren, die Sie derzeit installiert haben. (Um die neueste Version zu erhalten, klonen Sie das Kernel-Git-Repository der kommenden Ubuntu-Version.) Getestet auf 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
quelle