Pixel-Kernel erstellen

Dieser Leitfaden enthält 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 Google Pixel 6 und höher. Das liegt daran, dass auf Google Pixel 5 und älteren Geräten die Kernelmodule in der vendor-Partition aktualisiert werden müssen. Das hängt vom Android-Plattform-Build für diese Geräte ab. Die Tabelle Von GKI unterstützte Pixel-Kernelzweige enthält den Manifest-Zweig des Kernel-Repositorys für jedes von GKI unterstützte Pixel-Gerät. Informationen zu den Kernel-Manifest-Branches für Pixel 5 und ältere Modelle finden Sie im Abschnitt Alte Pixel-Kernel.

Von GKI unterstützte Pixel-Kernel-Branches
Gerät Binärpfad im AOSP-Baum Repository-Zweig GKI-Kernel
Google Pixel 9 Pro Fold (Comet) device/google/comet-kernels/6.1 android-gs-comet-6.1-android15-qpr1 android15-6.1
Google Pixel 9 (Tokay)
Google Pixel 9 Pro (Caiman)
Google Pixel 9 Pro XL (Komodo)
device/google/caimito-kernels/6.1 android-gs-caimito-6.1-android15-qpr1 android15-6.1
Google Pixel 8a (Akita) device/google/akita-kernels/5.15 android-gs-akita-5.15-android15-qpr1 android15-5.15
Google Pixel 8 (Shiba)
Google Pixel 8 Pro (Husky)
device/google/shusky-kernels/5.15 android-gs-shusky-5.15-android15-qpr1 android15-5.15
Pixel Fold (felix) device/google/felix-kernels/5.10 android-gs-felix-5.10-android15-qpr1 android15-5.10
Pixel Tablet (tangorpro) device/google/tangorpro-kernels/5.10 android-gs-tangorpro-5.10-android15-qpr1 android15-5.10
Google Pixel 7a (Lynx) device/google/lynx-kernels/5.10 android-gs-lynx-5.10-android15-qpr1 android15-5.10
Google Pixel 7 (Panther)
Google Pixel 7 Pro (Cheetah)
device/google/pantah-kernels/5.10 android-gs-pantah-5.10-android15-qpr1 android15-5.10
Google Pixel 6a (Bluejay) device/google/bluejay-kernels/5.10 android-gs-bluejay-5.10-android15-qpr1 android15-5.10
Google Pixel 6 (Oriole)
Google Pixel 6 Pro (Raven)
device/google/raviole-kernels/5.10 android-gs-raviole-5.10-android15-qpr1 android15-5.10

Zusätzlich zu den von der Fertigung unterstützten Kerneln werden Google Pixel 6 und Google Pixel 6 Pro für die GKI-Entwicklung nur auf den Android Common-Kernel-Ästen unterstützt, die in der Tabelle Unterstützte Android-Plattform- und Kernelkombinationen für Google Pixel 6/6 Pro aufgeführt sind. Aufgrund von UAPI-Unterschieden zwischen den HALs der Android-Plattform und den Pixel-Kerneltreibern enthält die Tabelle die unterstützten Build-Kombinationen.

Unterstützte Android-Plattform- und Kernelkombinationen für Google Pixel 6/6 Pro
Pixel Kernel Manifest Branch GKI-Zweig Android-Plattform-Build aosp-main-Support?
gs-android-gs-raviole-mainline android-mainline (Version 6.8) AP1A.240505.004 (11583682) Ja
android14-gs-pixel-6.1 android14-6.1 AP1A.240505.004 (11583682) Ja
gs-android13-gs-raviole-5.15 android13-5.15 TQ1A.230205.002 (9471150) Nein

Pixel-Gerät vorbereiten

Das folgende Flussdiagramm beschreibt den Ablauf zum Aktualisieren des Kernels auf Google Pixel 6 und höher:

**Abbildung 1.** Ablaufdiagramm 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 von Android-Plattform und Kernel aus.
  3. Wählen Sie die folgenden Optionen aus:
    • Gerätedaten löschen
    • Alle Partitionen erzwingen
    • Überprüfung deaktivieren
  4. Drücken Sie 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. Weitere Informationen zu Pixel KERNEL_MANIFEST_BRANCH finden Sie in der Tabelle Unterstützte Android-Plattform- und Kernelkombinationen für Google Pixel 6/6 Pro.

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 das Gerät geflasht wird. Es gibt mehrere Möglichkeiten.

Option 1: Extrahieren Sie das RAM-Disk-Image des Anbieters aus dem Pixel-Werksimage.
  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 Pixel 6 Pro AP1A.240505.004 als Beispiel verwendet. Ersetzen Sie den Namen der ZIP-Datei durch den Dateinamen des heruntergeladenen Original-Images.
      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 die vendor_boot.img, um das RAM-Disk des Anbieters zu erhalten.

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

    Gerät DEVICE_RAMDISK_PATH
    Google Pixel 6 (Oriole)
    Google Pixel 6 Pro (Raven)
    prebuilts/boot-artifacts/ramdisks/vendor_ramdisk-oriole.img
    Google 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
    
Option 2: vendor_ramdisk aus einem lokal erstellten Android-Plattform-Repository kopieren
Gerät DEVICE_RAMDISK_PATH
Google Pixel 6 (Oriole)
Google Pixel 6 Pro (Raven)
prebuilts/boot-artifacts/ramdisks/vendor_ramdisk-oriole.img
Google Pixel 6a (Bluejay) private/devices/google/bluejay/vendor_ramdisk-bluejay.img
cp ANDROID_ROOT/out/target/product/DEVICE/vendor_ramdisk-debug.img \
   KERNEL_REPO_ROOT/DEVICE_RAMDISK_PATH/vendor_ramdisk-DEVICE.img

Kernel kompilieren (Kleaf)

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

Für Google Pixel 6 und Google Pixel 6 Pro mit Kerneln ab android14 führen Sie den Kleaf-Buildbefehl aus:

tools/bazel run --config=fast --config=stamp //private/google-modules/soc/gs:slider_dist

Führen Sie für Google Pixel 6 und Google Pixel 6 Pro mit android13-5.15-Kerneln den Kleaf-Buildbefehl aus:

tools/bazel run --lto=thin //gs/google-modules/soc-modules:slider_dist

Für alle anderen Pixel-Kernel führen Sie das build_DEVICE.sh-Script aus, das Sie unter KERNEL_REPO_ROOT finden. In den meisten Fällen muss DEVICE der Codename sein, der mit dem Codenamen in der Spalte Binary path in AOSP tree (Binärpfad im AOSP-Baum) der Tabelle GKI-unterstützte Pixel-Kernelzweige übereinstimmt. Das kann der Codename eines Geräts sein, z. B. „akita“ (Google Pixel 8a), oder der Codename einer Gruppe ähnlicher Geräte, die denselben Kernel verwenden, z. B. „caimito“, was für Google Pixel 9 (tokay), Google Pixel 9 Pro (caiman) und Google Pixel 9 Pro XL (komodo) steht. Verwenden Sie für android14 und ältere Versionen build_slider.sh für Google Pixel 6 und Google Pixel 6 Pro und build_cloudripper.sh für Google Pixel 7 und Google Pixel 7 Pro.

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

build_slider.sh

Standardmäßig verwenden die build_DEVICE.sh-Scripts den vorkompilierten GKI-Kernel, um den Build-Prozess zu beschleunigen. Wenn Sie den Kern-Kernel ändern möchten, legen Sie die Umgebungsvariable BUILD_AOSP_KERNEL=1 fest, um den Kernel stattdessen aus den lokalen Quellen zu erstellen.

Weitere Informationen zum Kernel-Buildsystem 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. Dazu verwenden Sie diesen Befehl:
fastboot oem disable-verification
WARNUNG:Wenn Sie einen benutzerdefinierten Kernel auf einen Plattform-Build flashen, müssen Sie Ihr Gerät möglicherweise löschen, wenn mit dem neuen Kernel ein Downgrade der Sicherheitspatch-Ebene (Security Patch Level, SPL) verbunden ist. Dabei werden alle Ihre personenbezogenen Daten gelöscht. Sichern Sie Ihre Daten vor dem Löschen.
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 neu im fastbootd-Modus starten.

Gerät Kernelpartitionen
Google Pixel 6 (Oriole)
Google Pixel 6 Pro (Raven)
Google Pixel 6a (Bluejay)
boot
dtbo
vendor_boot
vendor_dlkm (dynamische Partition)
Google Pixel 8 (shiba)
Google Pixel 8 Pro (husky)
Google Pixel Fold (felix)
Google Pixel Tablet (tangorpro)
Google Pixel 7a (lynx)
Google Pixel 7 (panther)
Google Pixel 7 Pro (cheetah)
boot
dtbo
vendor_kernel_boot
vendor_dlkm (dynamic partition)
system_dlkm (dynamic partition)

Hier sind die Befehle zum Flashen von Pixel 6 mit android-mainline:

fastboot flash boot        out/slider/dist/boot.img
fastboot flash dtbo        out/slider/dist/dtbo.img
fastboot flash vendor_boot out/slider/dist/vendor_boot.img
fastboot reboot fastboot
fastboot flash vendor_dlkm out/slider/dist/vendor_dlkm.img

Die Kernel-Images finden Sie im DIST_DIR.

Kernel-Branch DIST_DIR
v5.10 out/mixed/dist
Version 5.15 und höher out/DEVICE/dist
Hinweis:Wenn Sie einen seriellen Dongle haben und serielle Protokolle aktivieren möchten, verwenden Sie den 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 Werksbilder

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

Alte Pixel-Kernel

In der Tabelle Alte Kernel-Branches für Google Pixel finden Sie die Kernel-Repository-Branches für Google Pixel 5 und ältere Geräte. Diese Geräte werden nicht von GKI unterstützt.

Alte Pixel-Kernelzweige
Gerät Binärpfad im AOSP-Baum Repository-Branches
Google Pixel 5a (Barbet)
Google Pixel 4a (5G) (Bramble)
Google Pixel 5 (Redfin)
device/google/redbull-kernel android-msm-redbull-4.19-android14-qpr3
Google Pixel 4a (Sunfish) device/google/sunfish-kernel android-msm-sunfish-4.14-android13-qpr3
Google Pixel 4 (Feuerrot)
Google Pixel 4 XL (Koralle)
device/google/coral-kernel android-msm-coral-4.14-android13
Google Pixel 3a (Sargo)
Google Pixel 3a XL (Bonito)
device/google/bonito-kernel android-msm-bonito-4.9-android12L
Google Pixel 3 (blaue Linie)
Google Pixel 3 XL (Kreuzschraffur)
device/google/crosshatch-kernel android-msm-crosshatch-4.9-android12
Google Pixel 2 (Walleye)
Google Pixel 2 XL (Taimen)
device/google/wahoo-kernel android-msm-wahoo-4.4-android10-qpr3
Google Pixel (Sailfish)
Google Pixel XL (Marlin)
device/google/marlin-kernel android-msm-marlin-3.18-pie-qpr2