Kompilieren und Installieren eines benutzerdefinierten Mainline-Kernels

7

Ich verwende Ubuntu 15.10 auf einem neuen Laptop, aber um die volle Unterstützung für diese Hardware zu erhalten, benötige ich anscheinend den 4.4-Kernel + einen benutzerdefinierten Patch. Sehen Sie hier, wenn Sie an den Details interessiert sind.

Ich kenne die Hauptkern-PPAs, aber ich verstehe, dass sie nicht mit der Quelle geliefert werden. Wenn dies der Fall ist, scheint dies die Möglichkeit der Verwendung eines Mainline-Kernel-PPA auszuschließen, da ich es nicht patchen kann. Also habe ich versucht, die Git-Quelle zu überprüfen und zu erstellen, kann aber keine aktuellen, relevanten Anweisungen finden.

Kann jemand mit Anweisungen zum Erstellen eines 4.4-Kernels am 15.10 helfen?

Marplesoft
quelle

Antworten:

9

Holen Sie sich und kompilieren Sie den Mainline-Kernel, Git-Methode:

Siehe auch: https://wiki.ubuntu.com/KernelTeam/GitKernelBuild Ich mache die Dinge etwas anders (was gibt es sonst noch Neues?).

Voraussetzungen (Muss):

Schritt 1 ist zu apt-get updateund apt-get dist-upgrade(dh stellen Sie sicher, dass alles auf dem neuesten Stand ist)
Schritt 2

sudo apt-get install fakeroot build-essential crash kexec-tools makedumpfile kernel-wedge

Schritt 3

sudo apt-get build-dep linux

Schritt 4

sudo apt-get install git-core libncurses5 libncurses5-dev libelf-dev asciidoc binutils-dev

Voraussetzungen ab Kernel 4.3:

sudo apt-get install libssl-dev

Schritt 5 - basierend darauf, dass auf einer neuen 20.04 Server-Installation 2019.12.02 nicht kompiliert werden kann

sudo apt install flex bison

Voraussetzungen (optional):

sudo apt-get install git-email git-doc

Der Git-Teil:

mkdir temp-k-git
cd temp-k-git
git clone   git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
cd linux

Mach niemals Sachen in der Standard-Hauptniederlassung. Machen Sie immer einen Arbeitsbereich.

git checkout -b k44rc8_stock v4.4-rc8

Stehlen Sie die Ubuntu-Kernel-Konfigurationsdatei (bereits installiert):

ls -l /boot
cp /boot/config-4.4.0-040400rc8-generic .config

Die Ubuntu-Konfigurationsdatei verfügt über ein vollständiges Debugging. Macht einen riesigen Kernel und dauert doppelt so lange zum Kompilieren

scripts/config --disable DEBUG_INFO

Besonderer Hinweis ab Kernel 4.4 und beim Kompilieren mit Ubuntu 14.04 (ich kenne 15.10 nicht) mit einer älteren Version des c-Compilers: Es kann nicht mit CONFIG_CC_STACKPROTECTOR_STRONG kompiliert werden.

scripts/config --disable CC_STACKPROTECTOR_STRONG

Kompilieren Sie den Kernel:

time make -j9 bindeb-pkg       <<< Suggest use number of CPUs + 1. Use less for some responsiveness to be left for other uses
                               <<< I always time the kernel build.

oder

time make -j9 bindeb-pkg LOCALVERSION=-stock    <<< For a localized verion name append

oder

time make -j9 olddefconfig bindeb-pkg LOCALVERSION=-stock   <<< To automatically use defaults for any new config stuff (particuarly useful when bisecting the kernel).

Wenn der Build abgeschlossen ist, installieren Sie ihn:

sudo dpkg -i ../linux-headers-4.4.0-rc8-stock_4.4.0-rc8-stock-144_amd64.deb
sudo dpkg -i ../linux-image-4.4.0-rc8-stock_4.4.0-rc8-stock-144_amd64.deb

An diesem Punkt wissen wir also, dass der Hauptkernel OK kompiliert. Wechseln Sie also zum benutzerdefinierten Kernel. Erstellen Sie einen neuen Zweig, wenden Sie die Patches an und kompilieren Sie:

$ git checkout -b k44rc8_custom v4.4-rc8
Switched to a new branch 'k44rc8_custom'

$ git am plv6_1_3.patch
Applying: cpufreq: intel_pstate: configurable algorithm to get target pstate
$ git am plv6_2_3.patch
Applying: cpufreq: intel_pstate: account for non C0 time
$ git am plv6_3_3.patch
Applying: cpufreq: intel_pstate: Account for IO wait time

$ time make -j9 olddefconfig bindeb-pkg LOCALVERSION=-custom

Beachten Sie, dass ich absichtlich keine mache make clean, da es wünschenswert ist, durch einen inkrementellen Build viel Zeit zu sparen. Die erste Kompilierung dauerte 21 Minuten und 26 Sekunden, die nächste benutzerdefinierte Kompilierung jedoch nur 4 Minuten und 43 Sekunden.

Doug Smythies
quelle
Bei diesem Ansatz wende ich also nicht die Ubuntu-Kernel-Patches an, die das Debian-Verzeichnis erstellen, oder?
Marplesoft
Nein, es sollte genau so sein, wie ich es geschrieben habe. Codeweise sollte die Hauptzeile ppa mit dem Code kernel.org identisch sein. Ich selbst hatte noch nie viel Erfolg mit Debian-Regeln.
Doug Smythies
1

Wenn Sie auf die Seite http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.4-rc8-wily gehen, finden Sie eine README-Datei, die angibt, wie Sie die Quelldateien für 4.4rc8 erhalten

Anweisungen zum Erstellen sind etwas verwirrend. Ich habe verschiedene Rezepte zum Erstellen der Kernel gesehen, alle etwas anders. Es gibt mehrere Voraussetzungen: Möglicherweise sind einige andere für den 4.4-Kernel erforderlich

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

Dann sind die Befehle, die ich für einen erfolgreichen Build ausgegeben habe:

chmod a+x debian/scripts/*
chmod a+x debian/scripts/misc/*
nano debian.master/changelog
fakeroot debian/rules clean
fakeroot debian/rules editconfigs
fakeroot debian/rules binary-headers binary-generic skipabis=true

Ändern der Änderungsprotokolldatei, um anzuzeigen, dass ich meinen eigenen Kernel erstelle, indem am Ende der ersten angezeigten Versionsnummer etwas hinzugefügt wird.

Charles Green
quelle
Vielen Dank. Aber ich hatte zwei Probleme damit: 1) Debian / Rules hatten nicht das Execute-Flag, keine große Sache, sondern nur eine kleine Variation und 2) Der Build ist mit debian/rules.d/2-binary-arch.mk:50: recipe for target '/home/ryan/dev/mainline/debian/stamps/stamp-build-generic' failedirgendwelchen Ideen fehlerhaft ?
Marplesoft
@Marplesoft Meine Kasse hatte die richtigen Flags, aber meine fakeroot debian/rules cleanhat Fehler beim Ausführen debian.master/reconstructaufgrund des fehlenden ubuntu/Verzeichnisses. Ich konnte das umgehen, verstehe aber nicht warum. Siehe meine Frage unter askubuntu.com/questions/729469/… .
Lucas