So erstellen Sie einen Android-Kernel unter Windows 10

Appual's bietet einige großartige Anleitungen zur Android-Entwicklung, wie zum Beispiel das Erstellen eines benutzerdefinierten ROM aus einem Android Open Source-Projekt. Diese Anleitungen richten sich jedoch in der Regel an eine reine Linux-Build-Umgebung.

In diesem Handbuch zeigen wir Ihnen, wie Sie einen Android-Kernel unter Windows 10 erstellen. Ja, wir werden weiterhin eine Linux-Build-Umgebung verwenden, aber es wird ein Linux-Subsystem unter Windows 10 sein. Wenn Sie also Windows 10 sind Benutzer, die an der Entwicklung für Android interessiert sind, befolgen unseren Leitfaden sorgfältig.

In diesem Handbuch erfahren Sie speziell, wie Sie einen Kernel für ARM- und MediaTek-Geräte erstellen, Funktionen hinzufügen und einen grundlegenden Überblick über die Verwendung von Git erhalten.

Bedarf

  • Windows 10 x64 (mit dem Update von Fall Creator)

Einrichten der Linux-Umgebung

  1. Gehen Sie unter Windows 10 zu Einstellungen> Update und Sicherheit> Für Entwickler> Entwicklermodus aktivieren.
  2. Gehen Sie nun zu Systemsteuerung> Programme> Windows-Funktionen ein- oder ausschalten> Windows-Subsystem für Linux aktivieren.
  3. Starten Sie Ihren PC neu.
  4. Starten Sie das Linux-Subsystem und lassen Sie es den Download-Vorgang durchlaufen. Setze ein Passwort und verliere es nicht.
  5. Gehen Sie jetzt zum Windows App Store und laden Sie Ubuntu herunter.
  6. Starten Sie Ubuntu auf dem Windows 10-Desktop und Sie werden aufgefordert, einen Benutzernamen und ein Kennwort einzugeben.
  7. Starten Sie in Ubuntu das native Terminal und geben Sie den folgenden Befehl ein: apt-get update
  8. Dadurch werden alle Repos für Apps und Abhängigkeiten aktualisiert.
  9. Als Nächstes im Terminaltyp: sudo apt-get install -y Kernelpaket libncurses5-dev bzip2
  10. Um zu überprüfen, ob alle Abhängigkeiten korrekt installiert wurden, geben Sie 'gcc' in das Terminal ein (keine Anführungszeichen).
  11. Wenn "gcc" bereits installiert ist, sollte "gcc: fatal error: no input file" angezeigt werden
  12. Jetzt können Sie im Terminal 'make' eingeben. Wenn "make" bereits installiert ist, sollte "make: *** kein Ziel angegeben und kein Makefile gefunden werden. halt."
  13. Als Nächstes geben Sie 'git' ein. Wenn "git" bereits installiert ist, sollten Sie eine Reihe grundlegender git-Befehle sehen.
  14. Jetzt brauchen wir einige Toolchains (es gibt verschiedene Typen, darunter GCC, Linaro und einige benutzerdefinierte). Für einige Geräte sind möglicherweise andere Toolchains erforderlich. Beispielsweise werden nicht alle Gerätekerne mit GCC gestartet oder kompiliert.

Für ARM-Geräte

Wir werden dafür GCC 4.7 verwenden.

  1. Öffnen Sie das Linux-Terminal und geben Sie Folgendes ein: mkdir kernel
  2. Geben Sie nun Folgendes ein: cd kernel
  3. (Es muss nicht unbedingt ein 'Kernel' sein, dies ist der Einfachheit halber so, wie Sie möchten.)
  4. Geben Sie nun Folgendes ein: git clone //android.googlesource.com/platform/prebuilts/gcc/linux-x86/arm/arm-eabi-4.7

Für ARM 64-Geräte

Sie benötigen einen 64-Bit-Kernel-Compiler für ARM 64-Geräte, z. B. aarch64.

Abrufen der Quelldateien für Ihr Gerät

Dies ist ein schwieriger Teil, da Sie ein GitHub-Repo suchen müssen, das Ihre Kernelquelle hostet. Sie müssen natürlich danach suchen, wahrscheinlich ist es in XDA-Foren zu finden.

Hier ist ein Beispiel für eine Kernelquelle Git.

Oben links sollte "Branch: Completed by xxxx" angezeigt werden.

Es gibt verschiedene Versionen eines Kernels / Projekts, die normalerweise durch "Testing", "Beta", "Final Release" usw. getrennt sind.

Die Kernel-Ordner lauten normalerweise wie folgt:

  • / arch / arm / configs : Enthält verschiedene Konfigurationsdateien für das Gerät, z. B. Governors usw.
  • / output / arch / arm / boot / : Hier wird das Bild gespeichert.
  • build.sh : Ein Skript, das den Erstellungsprozess vereinfacht.
  • /arm-cortex-linux-gnueabi-linaro_5.2-2015.11-2 : Dies ist normalerweise eine Toolchain, die in der Kernel-Quelle abgelegt ist und das Auffinden erleichtert.

Sie müssen Ihre Kernelquelle herunterladen.

Öffnen Sie das Linux-Terminal und vergewissern Sie sich, dass Sie sich in dem Kernel-Ordner befinden, den Sie zuvor erstellt haben (CD-Kernel).

Dann tippe das Terminal ein: "git clone" URL des Github-Kernels "-b" Name des Zweigs "

Zum Beispiel: "git clone //github.com/atxoxx/android_ke…amsung_msm8974 -b xenomTW"

Aufbau des Kernels

Um dies zu vereinfachen, können Sie im Datei-Explorer zum gewünschten Speicherort navigieren. Es sollte / home / user ID / kernel sein (oder was auch immer Sie den Kernelordner genannt haben).

Darin sollten sich zwei Ordner für die Toolchain und die Kernelquelle befinden. Gehen Sie in den Kernel-Quellordner.

Für ARM-Geräte

Geben Sie in einem Terminal die folgenden Befehle ein:

 #! / bin / bash export ARCH = Arm Export CROSS_COMPILE = mkdir Ausgabe make -C $ (pwd) O = Ausgabe "Name der Defconfig und Variante falls erforderlich" make -j4 -C $ (pwd) O = Ausgabe 

Hier finden Sie eine Übersicht über die Funktionen dieser Befehle, um dies in Zukunft zu vereinfachen.

  • #! / bin / bash: Weist das Skript an, im Shell-Befehl ausgeführt zu werden
  • export ARCH = arm: Definiert den Typ der Kernel-Architektur (zum Beispiel arm64 usw.)
  • export CROSS_COMPILE = : Suchen Sie, wo sich die Toolchain befindet. Es muss mit dem genauen Pfad übereinstimmen, und der Bindestrich am Ende ist wirklich obligatorisch.
  • mkdir output: Erstellt ein Verzeichnis zum Speichern des kompilierten Zimage
  • make -C $ (pwd) O = Ausgabe : Definiert defconfig als Leitfaden für die Kernel-Kompilierung.
  • make -j4 -C $ (pwd) O = Ausgabe : Wenn der Erstellungsprozess beginnt, gibt -j # an, wie schnell versucht werden soll, zu kompilieren. Normalerweise legen Sie diese Nummer entsprechend Ihrer CPU fest. Das Setzen von -j32 auf einer Budget-CPU würde wahrscheinlich massive Instabilität verursachen.
  • cp output / arch / arm / boot / Bild $ (pwd) / arch / arm / boot / zImage : Dies dient zum Verschieben von Bildern auf einen zweiten Pfad.

Ein anderes Beispiel:

 #! / bin / bash export ARCH = arm export CROSS_COMPILE = $ (pwd) /arm-cortex-linux-gnueabi-linaro_5.2-2015.11-2/bin/arm-cortex-linux-gnueabi- mkdir output make -C $ (pwd) O = Ausgabe msm8974_sec_defconfig VARIANT_DEFCONFIG = msm8974_sec_ks01_skt_defconfig SELINUX_DEFCONFIG = Selinux_defconfig make -j4 -C $ (pwd) O = Ausgabe cp output / arch / arm / boot / Image $ (pwd 

Für ARM 64-Geräte

 #! / bin / bash export ARCH = arm64 export CROSS_COMPILE = "Pfad zu Ihrer Toolchain" (muss mit "nameofarch-something-" enden) mkdir output make -C $ (pwd) O = output "name of defconfig und ggf. Variante "make -j4 -C $ (pwd) O = output 

Für Mediatek (MTK) Geräte

 #! / bin / bash export CROSS_COMPILE = "Pfad zu Ihrer Toolchain" (muss mit "nameofarch-something-" enden) export ARCH = arm ARCH_MTK_PLATFORM = make "name of defconfig und ggf. variant" make -j4 

Wenn Sie die für Ihre Kernel-Architektur erforderlichen Schritte ausgeführt haben, können Sie das folgende Terminal eingeben: sudo bash build.sh

Anschließend geben Sie Ihr Benutzerpasswort ein und der Kompilierungsprozess beginnt.

Es kann eine Weile dauern, ist aber in der Regel nicht sehr lang. Das Kompilieren eines Kernels entspricht nicht dem Kompilieren eines gesamten Android-ROMs. Dies ist wirklich CPU-abhängig. Beispielsweise sollte ein AMD Phenom X4 3.4GHz mit 8 GB RAM etwa 10 Minuten dauern, um von Anfang bis Ende zu kompilieren.

Wenn es fertig ist, sollte es Sie mit einer Meldung wie "zimage ist bereit" benachrichtigen.

ARM- und ARM64-Geräte

Gehen Sie zu "/ Output / arch / arm / boot /", um Ihr Bild zu finden.

Mediatek Geräte

Gehen Sie zu "/ arch / arm / boot /", um Ihr Bild zu finden.

Nicht alle Kernel-Builds führen zu einer Zimage-Datei. Sie kann manchmal auch in anderen Image-Formaten erstellt werden.

Wichtig: Wenn Sie erneut kompilieren möchten, wird empfohlen, die Befehle make clean und mrproper einzugeben, bevor Sie den Kompilierungsprozess erneut starten.

Den Kernel booten lassen

Sie haben zwei Möglichkeiten zur Auswahl.

Sie können entweder die anykernel-Methode verwenden (wie von XDA-Benutzer @ osm0sis in diesem XDA-Thread definiert). Sie sollten das gesamte Tutorial lesen, aber eine Zusammenfassung der Schritte lautet wie folgt:

  1. Platzieren Sie zImage im Stammverzeichnis (dtb und / oder dtbo sollten hier auch für Geräte verwendet werden, für die benutzerdefinierte Geräte erforderlich sind. Jedes Gerät greift auf das Original zurück, wenn es nicht enthalten ist.)
  2. Legen Sie alle erforderlichen Ramdisk-Dateien in / ramdisk und modules in / modules ab (mit dem vollständigen Pfad wie / modules / system / lib / modules).
  3. Platzieren Sie alle erforderlichen Patch-Dateien (im Allgemeinen Teildateien, die zu Befehlen gehören) in / patch
  4. Ändern Sie die Datei anykernel.sh, um den Namen Ihres Kernels, den Speicherort der Bootpartition und die Berechtigungen für die enthaltenen Ramdisk-Dateien hinzuzufügen, und verwenden Sie die Methoden für erforderliche Ramdisk-Änderungen (optional können Sie auch Banner- und / oder Versionsdateien im Stammverzeichnis ablegen, damit diese während des Flash-Vorgangs angezeigt werden).
  5. `zip -r9 UPDATE-AnyKernel2.zip * -x .git README.md * placeholder`

Die andere verfügbare Methode ist das Entpacken der Datei boot.img aus demselben ROM (wie CM, TouchWiz, EMUI usw.) und derselben Android-Version. Du würdest dann das Zimage tauschen. Auch dies ist ein wirklich komplizierter Prozess und Sie sollten das genaue Tutorial lesen, aber eine Zusammenfassung der Schritte ist:

  1. Entpacken.
  2. Verwenden Sie entweder die Befehlszeile „Unpackimg“ oder ziehen Sie das Bild einfach per Drag & Drop. Dadurch wird das Image aufgeteilt und die Ramdisk in ein Unterverzeichnis entpackt.
  3. Ändern Sie die Ramdisk, wie Sie möchten.
  4. Das Batch-Skript zum erneuten Packen erfordert keine Eingabe und kombiniert einfach das zuvor aufgeteilte zImage mit der neu gepackten modifizierten Ramdisk unter Verwendung aller Original-Image-Informationen (die ebenfalls aufgeteilt und gespeichert wurden).
  5. Das Bereinigungs-Batch-Skript setzt den Ordner in den Ausgangszustand zurück und entfernt die Verzeichnisse split_img + ramdisk sowie alle neuen gepackten Ramdisk- oder Image-Dateien.

Bevor Sie Ihren Kernel flashen, sollten Sie eine Sicherungskopie der Datei boot.img erstellen und anschließend Ihren Kernel flashen, um zu prüfen, ob Ihr Android-System booten kann.

Hinzufügen von Funktionen zu Ihrem Kernel

Das Hinzufügen von Features zu Ihrem Kernel ist eine großartige Möglichkeit, ihn aufzupeppen. Es gibt eine Menge Dinge, die Sie optimieren können, wie z. B. CPU-Regler, E / A-Scheduler, Übertakten der GPU, Audioverbesserungen usw.

Ein Beispiel für das Hinzufügen eines Governors finden Sie hier (dieser Governor trägt den Codenamen Intellimm).

In den ersten beiden Textfeldern sehen wir, dass in "arch / arm / configs /" "msm8974_sec_defconfig" und "cm_msm8974_sec_defconfig" geändert wurden.

Zwischen den Zeilen 140 und 141 dieser Datei wurde folgender Text eingefügt: “CONFIG_CPU_FREQ_GOV_INTELLIMM = y”

(Diese Zeile dient zum Aktivieren von Intellimm, wenn Sie Ihren Kernel kompilieren.)

Dieselbe Technik gilt für die anderen Textfelder (was hinzugefügt und gelöscht wurde und wo es sich befindet)

Abhängig von den hinzugefügten Funktionen können mehr oder weniger Dateien geändert, hinzugefügt oder gelöscht werden.

Zusammenfassend lässt Sie ein Commit alle vorgenommenen Änderungen und alles andere anzeigen!

Allgemeine Tipps und Tricks

So ändern Sie den Namen und die Version des Kernels:

Die einfache Methode:

Bearbeiten Sie diese Zeile in Ihrer defconfig-Datei:

 "CONFIG_LOCALVERSION =" - "nach - in Ihrer defconfig 

Beispiel: CONFIG_LOCALVERSION = ”- XenomTW-3.2.6 ″

Die fortgeschrittenen Methoden:

Navigiere zum Makefile im Root-Ordner deiner Kernel-Quelle.

Fügen Sie diese Zeilen hinzu:

 CONFIG_LOCALVERSION = "Name Ihres Kernels" LOCALVERSION = "Version Ihres Kernels" 

Ändern Sie NICHT die Zeilen Version, PatchLevel, Sublevel oder Extraversion.

Alternative Methode:

Gehen Sie zu scripts / mkcompile_h und fügen Sie diese Zeilen hinzu:

 LINUX_COMPILE_BY = "Name Ihrer Wahl" LINUX_COMPILE_HOST = "Name Ihrer Wahl" 

PATH-Probleme lösen:

Wenn Sie auf den Fehler "Ist Ihr Pfad korrekt?" Stoßen, versuchen Sie dies im Linux-Terminal:

 "export PATH =" pathtotoolchainlocation "/ bin: $ PATH" 

Zugriff auf Ihre Ubuntu-Ordner unter Windows 10

Dein Pfad zu Ubuntu sollte normalerweise sein:

C: \ Users ”NAME” \ AppData \ Local \ Packages \ CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc \ LocalState \ rootfs \ home

Sie sollten Dateien jedoch nicht direkt unter Windows bearbeiten, da dies in der Regel die Berechtigungen aufhebt. In diesem Fall müssen Sie die Berechtigungen über das Linux-Terminal zurücksetzen.

Interessante Artikel