Pixel-Kernel erstellen

In diesem Leitfaden finden Sie eine Schritt-für-Schritt-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. Das ist vom Android-Plattform-Build für diese Geräte abhängig. Die Tabelle Von GKI unterstützte Pixel-Kernel-Branches enthält den Manifest-Branch des Kernel-Repositorys für jedes von GKI unterstützte Pixel-Gerät. Informationen zu den Kernel-Manifest-Branches für das Pixel 5 und frühere Modelle finden Sie im Abschnitt Legacy Pixel Kernels.

Von GKI unterstützte Pixel-Kernel-Branches
Gerät Repository-Zweige GKI-Kernel
Google Pixel 9a (tegu) android-gs-tegu-6.1-android16 android14-6.1
Pixel 9 Pro Fold (Komet) 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
Google Pixel Fold (felix) android-gs-felix-6.1-android16 android14-6.1
Pixel Tablet (tangorpro) android-gs-tangorpro-6.1-android16 android14-6.1
Google Pixel 7a (lynx) android-gs-lynx-6.1-android16 android14-6.1
Google Pixel 7 (panther)
Google 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 auf den Android Common-Kernel-Branches unterstützt, die in der Tabelle Unterstützte Android-Plattform- und Kernel-Kombinationen für Pixel 6/6 Pro enthalten sind. Aufgrund von UAPI-Unterschieden zwischen den Android-Plattform-HALs und den Pixel-Kernel-Treibern enthält die Tabelle die unterstützten Build-Kombinationen.

Unterstützte Android-Plattform- und Kernel-Kombinationen für das Google Pixel 6/6 Pro
Pixel Kernel Manifest Branch GKI-Zweig Android-Plattform-Build
gs-android-gs-raviole-mainline android-mainline android-latest-release
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 basierend auf den unterstützten Kombinationen aus Android-Plattform und ‑Kernel aus.
  3. Wählen Sie die folgenden Optionen aus:
    • Gerätedaten löschen
    • Flash aller Partitionen erzwingen
    • Bestätigung deaktivieren
  4. Klicken Sie auf die Schaltfläche Build installieren, um das Gerät zu flashen.

**Abbildung 2.** Beispiel für eine Flash-Station

Kernel herunterladen und kompilieren

Kernel-Repository synchronisieren

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

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

Anbieter-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 installiert 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. Andernfalls verwenden Sie Option 2.

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

    Ab der Fastboot-Version 35.0.2-12583183 können Sie die DTB- und DLKM-Ramdisk direkt auf die Partition vendor_boot flashen. Laden Sie sdk-repo-HOST_OS-platform-tools-12583183.zip aus den v35.0.2-12583183-Artefakten herunter und entpacken Sie sie in der Umgebung Ihres Hostcomputers.

    Folgen Sie der Anleitung zum Flashen von DTB und vendor_boot:dlkm unter Kernel-Images flashen.

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

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

    2. Extrahieren Sie die 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 Dateinamen 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 (Kleaf)

In Android 13 wurde das build.sh-Skript 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 Skript build_DEVICE.sh ausführen, das sich unter KERNEL_REPO_ROOT befindet. 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 verwandter Geräte mit einem gemeinsamen 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 Produktions-Kernel-Branches den vorgefertigten GKI-Kernel, um den Build-Prozess zu beschleunigen. Wenn Sie den Core-Kernel ändern möchten, legen Sie die Umgebungsvariable BUILD_AOSP_KERNEL=1 fest, um den Kernel stattdessen aus den lokalen Quellen zu erstellen. Bei den Entwicklungs-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 – Android-Kernel mit Bazel erstellen.

Kernel-Images flashen

Hinweis:Wenn Sie die Überprüfung nicht deaktiviert haben, müssen Sie dies tun, bevor Sie den benutzerdefinierten Kernel flashen. Hier ist der Befehl dafür:
fastboot oem disable-verification
ACHTUNG:Wenn Sie einen benutzerdefinierten Kernel auf einem Plattform-Build flashen, müssen Sie Ihr Gerät möglicherweise löschen, wenn mit dem neuen Kernel ein Downgrade des Sicherheits-Patch-Levels (SPL) verbunden ist. Bei diesem Vorgang werden alle Ihre persönlichen Daten gelöscht. Sichern Sie Ihre Daten, bevor Sie sie löschen.
fastboot -w

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

Gerät Kernel-Partitionen
Pixel 6 (oriole)
Pixel 6 Pro (raven)
Pixel 6a (bluejay)
boot
dtbo
vendor_boot oder vendor_boot:dlkm
vendor_dlkm (dynamische Partition)
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 (dynamic partition)
system_dlkm (dynamic partition)

Hier sind die Flash-Befehle für das 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 die vendor_ramdisk im Abschnitt Vendor-Ramdisk aktualisieren aktualisiert haben, 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 aus:
screen -fn /dev/ttyUSB* 3000000

Wiederherstellen der Werksimages

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

Alte Pixel-Kernel

Die Tabelle Legacy Pixel kernel branches (Legacy-Kernel-Branches für Pixel) enthält die Kernel-Repository-Branches für das Pixel 5 und ältere Geräte. Das sind Geräte, die nicht GKI-kompatibel sind.

Alte Pixel-Kernel-Branches
Gerät Binärpfad im AOSP-Baum Repository-Zweige
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