Pixel-Kernel erstellen

In dieser Anleitung wird Schritt für Schritt erklärt, wie Sie einen benutzerdefinierten Pixel-Kernel für die Entwicklung herunterladen, kompilieren und flashen. Dank GKI ist es jetzt möglich, den Kernel unabhängig vom Android-Plattform-Build zu aktualisieren. Diese Schritte gelten nur für Pixel 6 und neuere Modelle. Das liegt daran, dass Pixel 5 und ältere Geräte eine Aktualisierung der Kernelmodule in der Partition vendor erfordern, die vom Build der Android-Plattform für diese Geräte abhängt. Die Tabelle der von GKI unterstützten Pixel-Kernel-Zweige enthält den Manifestzweig 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-Zweige
Gerät Binärpfad im AOSP-Baum Repository-Zweige GKI-Kernel
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
Google Pixel Fold (Felix) Gerät/google/felix-kernel android-gs-felix-5.10-android14-qpr3 android13–5.10
Google Pixel Tablet (tangorpro) Gerät/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)
Gerät/google/raviole-kernel android-gs-raviole-5.10-android14-qpr3 android13–5.10

Zusätzlich zu den werkseitig unterstützten Kerneln werden die Pixel 6- und 6 Pro-Geräte nur für GKI-Entwicklungszwecke in den Common Kernel-Zweigen von Android unterstützt, die in der Tabelle Unterstützte Pixel 6/6 Pro Android-Plattform und Kernel-Kombinationen enthalten 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 (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

Im folgenden Flussdiagramm wird die Aktualisierung des Kernels auf Pixel 6 und höher beschrieben:

**Abbildung 1.** Flussdiagramm für Kernel-Aktualisierung

Gerät über flash.android.com flashen

  1. Rufen Sie flash.android.com auf.
  2. Wählen Sie den Android-Build anhand der unterstützten Android-Plattform- und Kernel-Kombinationen aus.
  3. Wählen Sie die folgenden Optionen aus:
    • Gerätedaten löschen
    • Flash für alle Partitionen erzwingen
    • Bestätigung deaktivieren
  4. Klicken Sie auf die Schaltfläche Install build (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 dem Gerät geflasht ist. 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 Factory Image für Ihr Gerät unter https://developers.google.com/android/images herunter.

  2. Extrahieren Sie 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 das vendor_boot.img, um die Anbieter-Ramdisk abzurufen.

      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 (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 Skript 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.

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 aus, das sich unter KERNEL_REPO_ROOT befindet. Wenn Sie beispielsweise den Kernel für Pixel 6 im Zweig android-gs-raviole-5.10-android14 erstellen möchten, führen Sie folgenden Befehl aus:

build_slider.sh

Standardmäßig verwenden die build_DEVICE.sh-Skripts den vordefinierten 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-Build-System und zum Anpassen des Builds finden Sie unter Kleaf – Building Android Kernels with Base.

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 folgenden Befehl:
fastboot oem disable-verification
WARNUNG: Wenn Sie einen benutzerdefinierten Kernel auf einen Plattform-Build flashen, müssen Sie möglicherweise die Daten auf Ihrem Gerät löschen, falls mit dem neuen Kernel ein SPL-Downgrade (Security Patch Level) verknüpft 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
Pixel 6 (oriol)
Pixel 6 Pro (Rabe)
Pixel 6a (Bluejay)
boot
dtbo
vendor_boot
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 (Gepard)
boot
dtbo
vendor_kernel_boot
vendor_dlkm(dynamische Partition)
system_dlkm (dynamische Partition)

Hier sind die blinkenden Befehle für Pixel 6 unter 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 unter DIST_DIR.

Kernel-Branch DIST_DIR
Version 5.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 zum Herstellen einer Verbindung vom Host aus:
screen -fn /dev/ttyUSB* 3000000

Factory Images wiederherstellen

Mit flash.android.com können Sie Ihr Gerät auf die werkseitigen Images zurücksetzen.

Alte Pixel-Kernel

Die Legacy-Pixel-Kernel-Branche enthält die Kernel-Repository-Zweige für Pixel 5 und ältere Geräte. Dies sind nicht von GKI unterstützte Geräte.

Legacy-Pixel-Kernel-Zweige
Gerät Binärpfad im AOSP-Baum Repository-Zweige
Pixel 5a (Barbet)
Pixel 4a (5G) (Bramble)
Pixel 5 (redfin)
Gerät/google/redbull-kernel android-msm-redbull-4.19-android14-qpr3
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
Pixel 3 (blueline)
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