So erstellen Sie einen benutzerdefinierten Android-Kernel

Wenn Sie sich jemals gefragt haben, wie Sie einen Android-Kernel erstellen können, ist dieses Handbuch genau das Richtige für Sie. Das Erstellen eines eigenen Kernels kann eine lohnende Erfahrung sein, da Sie dadurch mehr Kontrolle über Ihr Android-Gerät haben, von der CPU, dem RAM, der GPU bis hin zum Akku.

Dies ist ein sehr praktischer Prozess, der viele Kompilierungs- und Konsolenbefehle umfasst. Wenn Sie jedoch mit Linux vertraut sind (oder die Anweisungen gut befolgen können), sollte dies kein Problem sein.

Bitte beachten Sie, dass dieses Handbuch für Geräte gilt, die nicht von Mediatek stammen. Appual’s hat hier einen Kernel-Kompilierungsleitfaden speziell für Mediatek-basierte Android-Geräte: So erstellen Sie den Mediatek-Android-Kernel aus dem Quellcode

Weitere interessante Artikel von Appual sind:

Wenn Sie einen benutzerdefinierten Kernel erstellen, müssen Sie den Kernel nur mit den unten angegebenen Befehlen von Git klonen. Wenn Sie jedoch einen Standardkernel kompilieren, müssen Sie wissen, wo Sie den ursprünglichen Kernel aus dem Quellcode beziehen können (aus allen möglichen Gründen).

Ursprüngliche Kernelquellen für verschiedene Marken:

Verwenden Sie zum Herunterladen des Kernels entweder einen Git-Klon oder laden Sie die Tarball-Datei herunter und extrahieren Sie sie.

Hier ist der Befehl git:

git clone -b

-ODER-

tar -xvf

Als Beispiel wäre dies der Befehl, um den neuesten Nexus 6P Nougat 3.10-Kernel von Google zu holen:
Git-Klon -b android-msm-angler-3.10-nougat-mr2 https://android.googlesource.com/kernel/msm/ angler

Dies sollte das Kernel / msm-Repo in einen Angler-Ordner klonen und das android-msm-angler-3.10-nougat-mr2 automatisch auschecken.

Da die meisten Android-Geräte ARM-basiert sind, müssen wir einen Compiler verwenden, der auf ARM-Geräte abzielt. Dies bedeutet, dass ein Host / nativer Compiler nur funktioniert, wenn Sie auf einem anderen ARM-Gerät kompilieren. Sie haben hier einige Möglichkeiten. Sie können entweder selbst eine kompilieren, wenn Sie wissen, wie man Crosstool-NG verwendet. Alternativ können Sie einen vorgefertigten Compiler herunterladen, wie er von Google bereitgestellt wird Arm 32-Bit und Arm64.

Bevor Sie einen vorgefertigten Compiler herunterladen können, müssen Sie die genaue Architektur Ihres Geräts kennen. Verwenden Sie daher eine App wie CPU-Z, um diese zu ermitteln.

Eine andere beliebte Toolchain wäre UberTC – Für Kernel mit mehr als 4,9 müssen Sie sie jedoch patchen. Das Kompilieren mit der Toolchain von Google ist zunächst eine bewährte Methode.

Sobald Sie sich für die Toolchain entschieden haben, müssen Sie sie auf jeden Fall klonen.
Git-Klon

Zeigen Sie nun mit dem Makefile auf Ihren Compiler und führen Sie es im Toolchain-Ordner aus.

  • export CROSS_COMPILE = $ (pwd) / bin /

Beispiel:

  • export CROSS_COMPILE = $ (pwd) / bin / aarch64-linux-android-

Teilen Sie dem Makefile nun Ihre Gerätearchitektur mit.

  • export ARCH = && export SUBARCH =

Beispiel:

  • export ARCH = arm64 && export SUBARCH = arm64

Suchen Sie Ihre richtige defconfig, indem Sie zum Ordner arch / / configs in der Kernelquelle navigieren (z. B. arch / arm64 / configs).

Suchen Sie als Nächstes die richtige Konfigurationsdatei des Entwicklers für den Kernel, den Sie erstellen. Es sollte normalerweise in Form von _defconfig oder _defconfig vorliegen. Die defconfig weist den Compiler an, welche Optionen in den Kernel aufgenommen werden sollen.

Es können auch generische Qualcomm-Konfigurationen gefunden werden, die normalerweise so etwas wie (msm-perf_defconfig, msmcortex-perf_defconfig) sind.

Kernel erstellen

Code:

sauber machen
machen mrproper
make
make -j $ (nproc –all)

Wenn diese Befehle erfolgreich sind, sollten Sie am Ende eine Image-, Image-dtb-, Image.gz- oder Image.gz-dtb-Datei haben.

Wenn diese Befehle fehlgeschlagen sind, müssen Sie möglicherweise das Ausgabeverzeichnis angeben, wenn Sie einen neuen CAF-basierten Kernel erstellen, wie folgt:

mkdir -p raus
mach O = sauber
mache O = out mrproper
mache O = out
mache O = out -j $ (nproc –all)

Wenn es immer noch nicht funktionieren soll, ist etwas kaputt – überprüfen Sie Ihre Header oder sprechen Sie mit den Kernel-Entwicklern.

Wenn der Kernel erfolgreich kompiliert wurde, müssen Sie ihn jetzt flashen. Es gibt zwei verschiedene Möglichkeiten, dies zu tun: Sie können das Bootimage entweder mit Android Image Kitchen oder AnyKernel2 entpacken und neu verpacken.

Es kann auch einige Nuancen geben, die auf bestimmten Geräten basieren. In diesem Fall müssen Sie Ihre Geräteentwickler um Unterstützung bitten.

Flashen des Kernels in Android Image Kitchen

Herunterladen Android Image Küche

Extrahieren Sie das Boot-Image Ihres Android-Geräts aus dem neuesten verfügbaren Image (egal ob Standard- oder benutzerdefiniertes ROM).

Entpacken Sie nun das Bild mit folgendem Code:
unpackimg.sh .img

Suchen Sie als Nächstes die zImage-Datei und ersetzen Sie sie durch Ihr kompiliertes Kernel-Image. Benennen Sie sie in das im Boot-Image enthaltene um.

Führen Sie nun diesen Code aus, um das Bild neu zu verpacken:
repackimg.sh

Jetzt können Sie das neue Boot-Image mit Fastboot, TWRP usw. flashen.

Flashen des Kernels in AnyKernel2

Laden Sie die neueste Version herunter AnyKernel2

Anwenden dieser Patch um alle Demo-Dateien auszuspülen.
wget https://github.com/nathanchance/AnyKernel2/commit/addb6ea860aab14f0ef684f6956d17418f95f29a.diff
Patch -p1 rm addb6ea860aab14f0ef684f6956d17418f95f29a.diff

Platzieren Sie nun Ihr Kernel-Image im Stammverzeichnis der Datei und öffnen Sie die Datei anykernel.sh, um diese Werte zu ändern:

  • Zeichenfolge: Ihr Kernelname
  • name #: Listet alle Codenamen Ihres Geräts auf (aus /system/build.prop: ro.product.device, ro.build.product)
  • block: Der Pfad Ihres Boot-Images in Ihrer fstab. Die fstab kann vom Stammverzeichnis Ihres Geräts aus geöffnet werden und sieht ungefähr so ​​aus: https://android.googlesource.com/dev…r/fstab.angler

Die erste Spalte ist der Wert, auf den Sie den Block setzen möchten.

Zippen Sie nun den Kernel erneut und flashen Sie ihn in AnyKernel2:
zip -r9 kernel.zip * -x README.md kernel.zip

Seien Sie gewarnt, dass viele Kernel von CAF ein Python-Skript enthalten, das “Fehler” auslöst, was im Grunde dazu führt, dass Ihr Build bei kleinsten Dingen Fehler auslöst. Für höhere GCC-Versionen (die mehr Warnungen enthalten) müssen Sie normalerweise Änderungen im Makefile vornehmen:

diff –git a / Makefile b / Makefile
Index 1aaa760f255f..bfccd5594630 100644
— a / Makefile
+++ b / Makefile
@@ -326,7 +326,7 @@ include $ (srctree) /scripts/Kbuild.include
AS = $ (CROSS_COMPILE) as
LD = $ (CROSS_COMPILE) ld
-REAL_CC = $ (CROSS_COMPILE) gcc
+ CC = $ (CROSS_COMPILE) gcc
CPP = $ (CC) -E
AR = $ (CROSS_COMPILE) ar
NM = $ (CROSS_COMPILE) nm
@@ -340,10 +340,6 @@ DEPMOD = / sbin / depmod
PERL = Perl
CHECK = spärlich
– # Verwenden Sie den Wrapper für den Compiler. Dieser Wrapper sucht nach neuen
– # Warnungen und bewirkt, dass der Build beendet wird, wenn sie auftreten.
-CC = $ (srctree) /scripts/gcc-wrapper.py $ (REAL_CC)
– –
CHECKFLAGS: = -D__linux__ -Dlinux -D__STDC__ -Dunix -D__unix__
-Wbitweise -Wno-return-void $ (CF)
CFLAGS_MODULE =

Wenn Sie eine höhere GCC-Toolchain (5.x, 6.x, 7.x oder sogar 8.x) verwenden, müssen Sie das GCC-Wrapper-Skript wie oben beschrieben nuklearisieren und eine einheitliche GCC-Header-Datei verwenden (wählen Sie Folgendes aus, wenn Sie ein Include haben /linux/compiler-gcc#.h Datei):

3.4 / 3.10: https://git.kernel.org/pub/scm/linux…9bb8868d562a8a
3.18: https://git.kernel.org/pub/scm/linux…9f67d656b1ec2f

Selbst wenn Sie viele Warnungen erhalten, müssen diese (normalerweise) nicht behoben werden.

Ihr Kernel ist erstellt und bereit zu gehen!

Similar Posts

Leave a Reply

Your email address will not be published. Required fields are marked *