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 Partition vendor 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. Weitere Informationen zu Pixel 5 und älteren Kernel-Manifest-Zweigen finden Sie im Abschnitt Legacy-Pixel-Kernel.

Von GKI unterstützte Pixel-Kernel-Branches
Gerät Binärpfad im AOSP-Baum Repository-Zweige GKI-Kernel
Google Pixel 9 Pro Fold (comet) device/google/comet-kernel android-gs-comet-6.1-android14-qpr3-d1 android14-6.1
Pixel 9 (Tokay)
Pixel 9 Pro (Kaiman)
Pixel 9 Pro XL (Komodo)
device/google/caimito-kernel android-gs-caimito-6.1-android14-qpr3-d1 android14-6.1
Google Pixel 8a (Akita) device/google/akita-kernel android-gs-akita-5.15-android14-qpr3 android14-5.15
Pixel 8 (Shiba)
Pixel 8 Pro (Husky)
Gerät/google/shusky-kernel android-gs-shusky-5.15-android14-qpr3 android14–5.15
Pixel Fold (felix) device/google/felix-kernel android-gs-felix-5.10-android14-qpr3 android13–5.10
Google Pixel Tablet (tangorpro) device/google/tangorpro-kernel android-gs-tangorpro-5.10-android14-qpr3 android13–5.10
Google Pixel 7a (Lynx) device/google/lynx-kernel android-gs-lynx-5.10-android14-qpr3 android13–5.10
Pixel 7 (Panther)
Pixel 7 Pro (Gepard)
device/google/pantah-kernel android-gs-pantah-5.10-android14-qpr3 android13–5.10
Pixel 6a (bluejay) device/google/bluejay-kernel android-gs-bluejay-5.10-android14-qpr3 android13–5.10
Pixel 6 (Oriole)
Pixel 6 Pro (Rabe)
device/google/raviole-kernel android-gs-raviole-5.10-android14-qpr3 android13–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 Anbieter-UAPI-Unterschieden zwischen den HALs der Android-Plattform und den Pixel-Kernel-Treibern sind in der Tabelle die unterstützten Build-Kombinationen aufgeführt.

Unterstützte Kombinationen aus Android-Plattform und -Kernel auf Pixel 6/6 Pro
Pixel-Kernel-Manifest-Zweig GKI-Zweig Android-Plattform-Build aosp-main-Support?
gs-android-gs-raviole-mainline android-mainline (v6.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
    • Flash für 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 Flash Station

Kernel herunterladen und kompilieren

Kernel-Repository synchronisieren

Führen Sie die folgenden Befehle aus, um den Kernel-Quellcode herunterzuladen. Weitere Informationen finden Sie in der Tabelle Unterstützte Android-Plattform- und Kernel-Kombinationen für Pixel 6/6 Pro für 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 das Gerät geflasht wird. Dafür gibt es mehrere Möglichkeiten.

Option 1: Extrahieren Sie das Ramdisk-Image des Anbieters 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 Pixel 6 Pro AP1A.240505.004 als Beispiel verwendet. Ersetzen Sie den Namen der ZIP-Datei durch den Dateinamen des Factory-Images, das Sie heruntergeladen haben.
      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
    Pixel 6 (Oriole)
    Pixel 6 Pro (Rabe)
    vorkonfigurierte/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
    
Option 2: vendor_ramdisk aus einem lokal erstellten Android-Plattform-Repository kopieren
Gerät DEVICE_RAMDISK_PATH
Pixel 6 (Oriole)
Pixel 6 Pro (Rabe)
vorkonfigurierte/boot-artifacts/ramdisks/vendor_ramdisk-oriole.img
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

Kompilieren Sie den Kernel (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ühren Sie für Pixel 6 und 6 Pro mit android14 und höher den Build-Befehl von Kleaf aus:

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

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

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

Führen Sie für alle anderen Pixel-Kernel das Skript build_DEVICE.sh unter KERNEL_REPO_ROOT aus. 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 vorgefertigten GKI-Kernel, um den Build-Prozess zu beschleunigen. Wenn Sie den Kernkernel ä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 blinken

Hinweis: Wenn Sie die Überprüfung nicht deaktiviert haben, müssen Sie dies tun, bevor Sie den benutzerdefinierten Kernel flashen. Dazu verwenden Sie den folgenden 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 deine persönlichen Daten gelöscht. Sichern Sie unbedingt 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 auf Ihrem Gerät aufgeführt ist. Bei dynamischen Partitionen müssen Sie vor dem Flashen im fastbootd-Modus neu 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
Version 5.10 out/mixed/dist
Version 5.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 zum Herstellen einer 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.

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-Zweig
Google Pixel 5a (Barbet)
Google Pixel 4a (5G) (Bramble)
Google Pixel 5 (Redfin)
Gerät/google/redbull-kernel android-msm-redbull-4.19-android14-qpr3
Google Pixel 4a (Sunfish) Gerät/google/sunfish-kernel android-msm-sunfish-4.14-android13-qpr3
Pixel 4 (Flame)
Pixel 4 XL (Koralle)
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
Google Pixel 3 (blaue Linie)
Google Pixel 3 XL (Kreuzschraffur)
device/google/crosshatch-kernel android-msm-crosshatch-4.9-android12
Pixel 2 (Wandauge)
Pixel 2 XL (Taimen)
Gerät/google/wahoo-kernel android-msm-wahoo-4.4-android10-qpr3
Pixel (Sailfish)
Pixel XL (Marlin)
Gerät/google/marlin-kernel android-msm-marlin-3.18-pie-qpr2