Pixel-Kernel erstellen

In diesem Leitfaden finden Sie eine detaillierte Anleitung zum Herunterladen, Kompilieren und Flashen eines benutzerdefinierten Pixel-Kernels für die Entwicklung. Dank GKI ist es jetzt möglich, den Kernel unabhängig vom Android-Plattform-Build zu aktualisieren. Diese Schritte gelten nur für das Pixel 6 und neuere Geräte. Das liegt daran, dass auf dem Pixel 5 und älteren Geräten die Kernelmodule auf der vendor-Partition aktualisiert werden müssen, die vom Android-Plattform-Build für diese Geräte abhängig ist. Die Tabelle Von GKI unterstützte Pixel-Kernel-Branches enthält den Kernel-Repository-Manifest-Branch für jedes von GKI unterstützte Pixel-Gerät. Informationen zu Pixel 5 und früheren Kernel-Manifest-Branches finden Sie unter Legacy-Pixel-Kernels.

Das Pixel 6 und das Pixel 6 Pro werden auch im Upstream-Linux-Kernel unterstützt und können mit Upstream-Treibern bis zum Geräte-Shell-Prompt gebootet werden. Weitere Informationen finden Sie unter Upstream-Pixel-Kernel erstellen und flashen.

GKI-Pixel-Kernels erstellen und flashen

In diesem Abschnitt finden Sie die Schritte zum Synchronisieren, Erstellen und Flashen der GKI-kompatiblen Kernel-Branches. In der folgenden Tabelle finden Sie eine Übersicht der unterstützten Pixel-Geräte und der entsprechenden Produktions-Kernel-Repository-Branches.

Von GKI unterstützte Pixel-Kernel-Branches

Gerät Repository-Branches GKI-Kernel
Pixel 9a (tegu) android-gs-tegu-6.1-android16 android14-6.1
Pixel 9 Pro Fold (comet) android-gs-comet-6.1-android16 android14-6.1
Pixel 9 (tokay)
Pixel 9 Pro (caiman)
Pixel 9 Pro XL (komodo)
android-gs-caimito-6.1-android16 android14-6.1
Pixel 8a (akita) android-gs-akita-6.1-android16 android14-6.1
Pixel 8 (shiba)
Pixel 8 Pro (husky)
android-gs-shusky-6.1-android16 android14-6.1
Pixel Fold (felix) android-gs-felix-6.1-android16 android14-6.1
Pixel Tablet (tangorpro) android-gs-tangorpro-6.1-android16 android14-6.1
Pixel 7a (lynx) android-gs-lynx-6.1-android16 android14-6.1
Pixel 7 (panther)
Pixel 7 Pro (cheetah)
android-gs-pantah-6.1-android16 android14-6.1
Pixel 6a (bluejay) android-gs-bluejay-6.1-android16 android14-6.1
Pixel 6 (oriole)
Pixel 6 Pro (raven)
android-gs-raviole-6.1-android16 android14-6.1

Zusätzlich zu den werkseitig unterstützten Kernels werden die Pixel 6- und Pixel 6 Pro-Geräte für GKI-Entwicklungszwecke nur in den Android Common-Kernel-Branches unterstützt, die in der Tabelle Unterstützte Kombinationen aus Android-Plattform und Kernel für Pixel 6 und Pixel 6 Pro aufgeführt sind. Zwischen den Android-Plattform-HALs und den Pixel-Kernel-Treibern der einzelnen Anbieter bestehen UAPI-Unterschiede und die Tabelle enthält die unterstützten Build-Kombinationen.

Unterstützte Kombinationen aus Android-Plattform und Kernel für das Pixel 6 und das Pixel 6 Pro
Pixel-Kernel-Manifest-Branch GKI-Branch Android-Plattform-Build
gs-android-gs-raviole-mainline android-mainline android-latest-release
gs-android16-6.12-gs101 android16-6.12 android-latest-release
gs-android13-gs-raviole-5.15 android13-5.15 TQ1A.230205.002 (9471150)

Pixel-Gerät vorbereiten

Das folgende Flussdiagramm beschreibt den Prozess zum Aktualisieren des Kernels auf dem Pixel 6 und neueren Geräten:

**Abbildung 1:** Flussdiagramm für Kernel-Updates

Gerät über flash.android.com flashen

  1. Rufen Sie flash.android.com auf.
  2. Wählen Sie den Android-Build entsprechend den unterstützten Kombinationen aus Android-Plattform und Kernels aus.
    • Wählen Sie für android-latest-release entweder „Back to Public“ (Zurück zu „Öffentlich“), „Canary“ oder „Beta“ aus.
  3. Wählen Sie die folgenden Optionen aus:
    • „Wipe Device“ (Gerätedaten löschen)
    • „Force Flash all Partitions“ (Flashen aller Partitionen erzwingen)
    • „Disable Verification“ (Verifizierung deaktivieren)
  4. Klicken Sie auf die Schaltfläche Install build (Build installieren), um das Gerät zu flashen.

**Abbildung 2:** Beispiel für eine Flash Station

Kernel-Repository synchronisieren

Führen Sie die folgenden Befehle aus, um den Kernel-Quellcode herunterzuladen. Informationen zum KERNEL_MANIFEST_BRANCH für das Pixel findest du in der Tabelle Unterstützte Kombinationen aus Android-Plattform und Kernel für Pixel 6 und Pixel 6 Pro.

repo init -u https://android.googlesource.com/kernel/manifest -b KERNEL_MANIFEST_BRANCH
repo sync -c --no-tags

Vendor-Ramdisk aktualisieren

Aktualisieren Sie die Datei vendor_ramdisk-DEVICE.img im Kernel-Repository, damit sie mit dem Android-Plattform-Build übereinstimmt, der auf dem Gerät geflasht ist. Es gibt mehrere Möglichkeiten, die Datei vendor_ramdisk-DEVICE.img zu aktualisieren. Verwenden Sie Option 1, wenn Sie Android 15 QPR2 (BP11.241025.006) oder höher verwenden. Verwenden Sie andernfalls Option 2.

  • Option 1: Nur die DTB- und DLKM-Ramdisk-Bits der Partition „vendor_boot“ aktualisieren

    Ab der Fastboot-Version 35.0.2-12583183 können Sie die DTB- und DLKM-Ramdisk direkt auf der Partition vendor_boot flashen. Führen Sie ein Upgrade Ihrer Android-Plattformtools auf Version 36.0.0 oder höher durch, um diese Option nutzen zu können. Führen Sie dazu den folgenden Befehl aus:

    $ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager "platform-tools"
    

    Folgen Sie der Anleitung unter Kernel-Images flashen, um DTB und vendor_boot:dlkm zu flashen.

  • Option 2: Extrahieren Sie das Vendor-Ramdisk-Image aus dem Pixel-Factory-Image.

    1. Laden Sie das unterstützte Factory Image für Ihr Gerät von https://developers.google.com/android/images herunter.

    2. Extrahieren Sie vendor_boot.img:

      In den folgenden Befehlen wird das Pixel 6 Pro mit der Build-Nummer AP1A.240505.004 als Beispiel verwendet. Ersetzen Sie den Namen der ZIP-Datei durch den Namen des heruntergeladenen Factory Image.

        unzip raven-ap1a.240505.004-factory-9d783215.zip
      
        cd raven-ap1a.240505.004
      
        unzip image-raven-ap1a.240505.004.zip vendor_boot.img
      
    3. Entpacken Sie vendor_boot.img, um die Vendor-Ramdisk zu erhalten.

        KERNEL_REPO_ROOT/tools/mkbootimg/unpack_bootimg.py --boot_img vendor_boot.img \
            --out vendor_boot_out
      
    4. Kopieren Sie die extrahierte Datei vendor-ramdisk-by-name/ramdisk_ in das Pixel-Kernel-Repository.

      Gerät DEVICE_RAMDISK_PATH
      Pixel 6 (oriole)
      Pixel 6 Pro (raven)
      prebuilts/boot-artifacts/ramdisks/vendor_ramdisk-oriole.img
      Pixel 6a (bluejay) private/devices/google/bluejay/vendor_ramdisk-bluejay.img
        cp vendor_boot_out/vendor-ramdisk-by-name/ramdisk_ \
            KERNEL_REPO_ROOT/DEVICE_RAMDISK_PATH
      

Kernel kompilieren

In Android 13 wurde das Script build.sh durch ein neues Kernel-Build-System namens Kleaf ersetzt. Bei Geräten mit android13-5.15 und höher sollte der Kernel mit Kleaf erstellt werden.

Zur Vereinfachung können Sie das Script build_DEVICE.sh unter KERNEL_REPO_ROOT ausführen. In den meisten Fällen muss DEVICE der Codename sein. Das kann der Codename eines Geräts sein, z. B. „akita“ (Pixel 8a), oder ein Codename, der eine Gruppe ähnlicher Geräte mit demselben Kernel repräsentiert, z. B. „caimito“ für das Pixel 9 (tokay), das Pixel 9 Pro (caiman) und das Pixel 9 Pro XL (komodo). Für android14 und frühere Versionen verwenden Sie build_slider.sh für das Pixel 6 und das Pixel 6 Pro sowie build_cloudripper.sh für das Pixel 7 und das Pixel 7 Pro.

Wenn Sie beispielsweise den Kernel für das Pixel 6 im Branch android-gs-raviole-5.10-android14 erstellen möchten, führen Sie den folgenden Befehl aus:

build_slider.sh

Standardmäßig verwenden die build_DEVICE.sh-Scripts in den Produktionskernel-Branches den vorgefertigten GKI-Kernel, um den Build-Prozess zu beschleunigen. Wenn Sie den Hauptkernel ändern möchten, legen Sie die Umgebungsvariable BUILD_AOSP_KERNEL=1 fest, um den Kernel stattdessen aus den lokalen Quellen zu erstellen. Bei den Entwickler-Kernel-Branches wird standardmäßig direkt aus dem Kernel-Quellcode kompiliert.

Weitere Informationen zum Kernel-Build-System und zum Anpassen des Builds finden Sie unter Kleaf - Building Android Kernels with Bazel.

Kernel-Images flashen

Hinweis: Wenn Sie die Verifizierung nicht deaktiviert haben, müssen Sie sie durchführen, bevor Sie den benutzerdefinierten Kernel flashen. Hier ist der Befehl dafür:
fastboot oem disable-verification
WARNUNG: Wenn Sie einen benutzerdefinierten Kernel auf einem Plattform-Build flashen und mit dem neuen Kernel ein Downgrade des Sicherheitspatch-Levels (SPL) verbunden ist, müssen Sie die Daten auf Ihrem Gerät möglicherweise löschen. Bei diesem Vorgang werden alle Ihre persönlichen Daten gelöscht. Sichern Sie daher Ihre Daten unbedingt vorher.
fastboot -w

Führen Sie zum Flashen der Kernel-Images den Befehl fastboot flash für jede Kernelpartition aus, die für Ihr Gerät aufgeführt ist. Bei dynamischen Partitionen müssen Sie vor dem Flashen Ihr Gerät neu im fastbootd-Modus starten.

Gerät Kernelpartitionen
Pixel 6 (oriole)
Pixel 6 Pro (raven)
Pixel 6a (bluejay)
boot
dtbo
vendor_boot oder vendor_boot:dlkm
vendor_dlkm (dynamische Partition)
Pixel 9 (tegu)
Pixel 9 Pro Fold (comet)
Pixel 9 (tokay)
Pixel 9 Pro (caiman)
Pixel 9 Pro XL (komodo)
Pixel 8 (shiba)
Pixel 8 Pro (husky)
Pixel Fold (felix)
Pixel Tablet (tangorpro)
Pixel 7a (lynx)
Pixel 7 (panther)
Pixel 7 Pro (cheetah)
boot
dtbo
vendor_kernel_boot
vendor_dlkm (dynamische Partition)
system_dlkm (dynamische Partition)

Hier sind die Befehle zum Flashen des Pixel 6 auf android-mainline:

fastboot flash boot        out/slider/dist/boot.img
fastboot flash dtbo        out/slider/dist/dtbo.img
fastboot flash  --dtb out/slider/dist/dtb.img vendor_boot:dlkm out/slider/dist/initramfs.img
fastboot reboot fastboot
fastboot flash vendor_dlkm out/slider/dist/vendor_dlkm.img

Wenn Sie für das Pixel 6, Pixel 6 Pro oder Pixel 6a vendor_ramdisk aktualisiert haben (siehe Vendor-Ramdisk aktualisieren), verwenden Sie stattdessen den folgenden Befehl, um die Partition vendor_boot zu aktualisieren:

fastboot flash vendor_boot out/slider/dist/vendor_boot.img

Die Kernel-Images finden Sie unter DIST_DIR.

Kernel-Branch DIST_DIR
v5.10 out/mixed/dist
v5.15 und höher out/DEVICE/dist
Hinweis: Wenn Sie einen seriellen Dongle haben und serielle Logs aktivieren möchten, lautet der Befehl:
fastboot oem uart enable
fastboot oem uart config 3000000
Beispielbefehl für die Verbindung vom Host:
screen -fn /dev/ttyUSB* 3000000

Factory Images wiederherstellen

Wenn Sie Ihr Gerät auf die Factory Images zurücksetzen möchten, können Sie flash.android.com verwenden.

Upstream-Pixel-Kernel erstellen und flashen

Da das Pixel 6 und das Pixel 6 Pro im Upstream-Linux-Kernel unterstützt werden, können Sie android-mainline nur mit Upstream-Treibern verwenden, um für die Kernelentwicklung einen Geräte-Shell-Prompt zu starten. In diesem Abschnitt wird beschrieben, wie Sie einen Pixel 6- und Pixel 6 Pro-Kernel aus android-mainline synchronisieren, erstellen und flashen.

Führen Sie die nächsten Schritte aus, um loszulegen.

  1. Bereiten Sie Ihr Gerät vor, indem Sie der Anleitung unter Pixel-Gerät vorbereiten folgen.
  2. Synchronisieren Sie den Manifestzweig des common-android-mainline-Kernels, indem Sie der Anleitung unter Kernel-Repository synchronisieren folgen.
  3. Die Kleaf-Build-Zielkonfiguration ist unter dem Pfad KERNEL_REPO_ROOT/devices/google/raviole definiert. Führen Sie den Kleaf-Befehl aus, um das Build-Ziel raviole_upstream zu kompilieren:

    tools/bazel run //devices/google/raviole:raviole_upstream_dist
    
  4. Deaktivieren Sie wie bei den Produktions-Kernels die Überprüfung und löschen Sie Ihr Gerät, wenn Sie einen benutzerdefinierten Kernel auf die Android-Werksimages flashen. Weitere Informationen finden Sie in den Hinweisen unter Kernel-Images flashen.

  5. Führen Sie im Fastboot-Modus die folgenden Befehle aus, um die Kernel-Images zu flashen:

    fastboot flash boot        out/raviole_upstream/dist/boot.img
    fastboot flash dtbo        out/raviole_upstream/dist/dtbo.img
    fastboot flash  --dtb out/raviole_upstream/dist/dtb.img \
        vendor_boot:dlkm out/raviole_upstream/dist/initramfs.img
    
  6. Um auf eine Geräte-Shell zuzugreifen, können Sie mit dem folgenden Befehl in den Wiederherstellungsmodus wechseln:

    fastboot reboot recovery
    

    Öffnen Sie die Geräteshell mit dem Befehl adb shell. Der Root-Zugriff kann auch durch Ausführen des Befehls adb root verwendet werden.

Legacy-Pixel-Kernels

Die Tabelle Legacy-Pixel-Kernel-Branches enthält die Kernel-Repository-Branches für das Pixel 5 und ältere Geräte. Das sind Geräte, die nicht von GKI unterstützt werden.

Legacy-Pixel-Kernel-Branches
Gerät Binärpfad im AOSP-Baum Repository-Branches
Pixel 5a (barbet)
Pixel 4a (5G) (bramble)
Pixel 5 (redfin)
device/google/redbull-kernel android-msm-redbull-4.19-android14-qpr3
Pixel 4a (sunfish) device/google/sunfish-kernel android-msm-sunfish-4.14-android13-qpr3
Pixel 4 (flame)
Pixel 4 XL (coral)
device/google/coral-kernel android-msm-coral-4.14-android13
Pixel 3a (sargo)
Pixel 3a XL (bonito)
device/google/bonito-kernel android-msm-bonito-4.9-android12L
Pixel 3 (blueline)
Pixel 3 XL (crosshatch)
device/google/crosshatch-kernel android-msm-crosshatch-4.9-android12
Pixel 2 (walleye)
Pixel 2 XL (taimen)
device/google/wahoo-kernel android-msm-wahoo-4.4-android10-qpr3
Pixel (sailfish)
Pixel XL (marlin)
device/google/marlin-kernel android-msm-marlin-3.18-pie-qpr2