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:
Gerät über flash.android.com flashen
- Rufen Sie flash.android.com auf.
- Wählen Sie den Android-Build basierend auf den unterstützten Kombinationen von Android-Plattform und Kernel aus.
- Wählen Sie die folgenden Optionen aus:
- Gerätedaten löschen
- Flash für alle Partitionen erzwingen
- Überprüfung deaktivieren
- Drücken Sie die Schaltfläche Build installieren, um das Gerät zu flashen.
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.
Laden Sie das unterstützte Werksimage für Ihr Gerät unter https://developers.google.com/android/images herunter.
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
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
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:Beispielbefehl zum Herstellen einer Verbindung vom Host: fastboot oem uart enable
fastboot oem uart config 3000000
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 |