In diesem Leitfaden finden Sie 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 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, die vom Android-Plattform-Build für diese Geräte abhängig ist. Die Tabelle Von GKI unterstützte Pixel-Kernel-Branches enthält den
Kernel-Repository-Manifest-Branch für jedes von GKI unterstützte Pixel-Gerät. Informationen zu Pixel 5 und früheren Kernel
manifest-Branches finden Sie im Abschnitt
Legacy-Pixel-Kernels.
Das Pixel 6 und das Pixel 6 Pro werden auch im Upstream-Linux-Kernel unterstützt und können nur mit Upstream-Treibern zum Shell-Prompt des Geräts gebootet werden. Weitere Informationen finden Sie unter Build und flashen Sie den Upstream-Pixel-Kernel.
GKI-Pixel-Kernel erstellen und flashen
In diesem Abschnitt wird beschrieben, wie Sie die von GKI unterstützten Kernel-Branches synchronisieren, erstellen und flashen. Die folgende Tabelle enthält eine Zuordnung der unterstützten Pixel-Geräte und ihrer jeweiligen Produktions-Kernel-Repository-Branches.
Von GKI unterstützte Pixel-Kernel-Branches
| Gerät | Repository-Branches | GKI-Kernel |
|---|---|---|
| Pixel 9a (tegu) | android-gs-tegu-6.1-android16 | android14-6.1 |
| Pixel 9 Pro Fold (comet) | 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 |
| Pixel Fold (felix) | android-gs-felix-6.1-android16 | android14-6.1 |
| Pixel Tablet (tangorpro) | android-gs-tangorpro-6.1-android16 | android14-6.1 |
| Pixel 7a (lynx) | android-gs-lynx-6.1-android16 | android14-6.1 |
| Pixel 7 (panther) 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 in den Android Common-Kernel Branches unterstützt, die in der Tabelle Unterstützte Kombinationen aus Android-Plattform und Kernel für Pixel 6 und Pixel 6 Pro aufgeführt sind. Zwischen den Android-Plattform-HALs und den Pixel-Kernel-Treibern der einzelnen Anbieter bestehen UAPI-Unterschiede und die Tabelle enthält die unterstützten Build-Kombinationen.
Unterstützte Kombinationen aus Android-Plattform und Kernel für das Pixel 6 und das Pixel 6 Pro
| Pixel-Kernel-Manifest-Branch | GKI-Branch | Android-Plattform-Build |
|---|---|---|
| gs-android-gs-raviole-mainline | android-mainline | android-latest-release |
| gs-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 Vorgang zum Aktualisieren des Kernels auf dem Pixel 6 und neueren Geräten:
Gerät mit flash.android.com flashen
- Rufen Sie flash.android.com auf.
- Wählen Sie den Android-Build entsprechend den unterstützten Kombinationen aus Android-Plattform und Kernels aus.
- Wählen Sie für
android-latest-releaseentweder „Back to Public“ (Zurück zu „Öffentlich“), „Canary“ oder „Beta“ aus.
- Wählen Sie für
- Wählen Sie die folgenden Optionen aus:
- „Wipe Device“ (Gerätedaten löschen)
- „Force Flash all Partitions“ (Flashen aller Partitionen erzwingen)
- „Disable Verification“ (Verifizierung deaktivieren)
- Klicken Sie auf den Button Install build (Build installieren), um das Gerät zu flashen.
Kernel-Repository synchronisieren
Führen Sie die folgenden Befehle aus, um den Kernel-Quellcode herunterzuladen. Informationen zum Pixel KERNEL_MANIFEST_BRANCH finden Sie in der Tabelle Unterstützte Kombinationen aus Android-Plattform und Kernel für Pixel 6 und Pixel 6 Pro.
repo init -u https://android.googlesource.com/kernel/manifest -b KERNEL_MANIFEST_BRANCH
repo sync -c --no-tags
Vendor-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. Es gibt mehrere Möglichkeiten, die vendor_ramdisk-DEVICE.img Datei zu aktualisieren. Verwenden Sie Option 1, wenn Sie Android 15 QPR2 (BP11.241025.006) oder höher verwenden. Verwenden Sie andernfalls 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 der
vendor_bootPartition flashen. Aktualisieren Sie Ihre Android Plattform-Tools auf Version 36.0.0 oder höher, um diese Option zu verwenden. Führen Sie hierzu den folgenden Befehl aus:$ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager "platform-tools"Folgen Sie der Anleitung unter Kernel-Images flashen, um die DTB- und
vendor_boot:dlkm-Dateien zu flashen.Option 2: Extrahieren Sie das Vendor-Ramdisk-Image aus dem Pixel-Factory-Image.
Laden Sie das unterstützte Factory Image für Ihr Gerät von https://developers.google.com/android/images herunter.
Extrahieren Sie
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 Namen des heruntergeladenen Factory Image.
unzip raven-ap1a.240505.004-factory-9d783215.zipcd raven-ap1a.240505.004unzip image-raven-ap1a.240505.004.zip vendor_boot.imgEntpacken 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_outKopieren 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
In Android 13 wurde das Script 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.
Zur Vereinfachung können Sie das Script build_DEVICE.sh unter KERNEL_REPO_ROOT ausführen. 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 ähnlicher Geräte mit demselben 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. Die Entwickler-Kernel-Branches erstellen den Kernel-Quellcode standardmäßig direkt.
Weitere Informationen zum Kernel-Build-System und zum Anpassen des Builds finden Sie unter Kleaf - Building Android Kernels with Bazel.
Kernel-Images flashen
Hinweis: Wenn Sie die Verifizierung nicht deaktiviert haben, müssen Sie sie durchführen, bevor Sie den benutzerdefinierten Kernel flashen. Hier ist der Befehl dafür:fastboot oem disable-verification
WARNUNG: Wenn Sie einen benutzerdefinierten Kernel auf einem Plattform-Build flashen und mit dem neuen Kernel ein Downgrade des Sicherheitspatch-Levels (SPL) verbunden ist, müssen Sie die Daten auf Ihrem Gerät möglicherweise löschen. Bei diesem Vorgang werden alle Ihre persönlichen Daten gelöscht. Sichern Sie daher Ihre Daten unbedingt vorher.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 Ihr Gerät neu im fastbootd-Modus starten.
| Gerät | Kernelpartitionen |
|---|---|
| Pixel 6 (oriole) Pixel 6 Pro (raven) Pixel 6a (bluejay) |
boot dtbo vendor_boot oder vendor_boot:dlkm vendor_dlkm (dynamische Partition) |
| Pixel 9 (tegu) Pixel 9 Pro Fold (comet) Pixel 9 (tokay) Pixel 9 Pro (caiman) Pixel 9 Pro XL (komodo) 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 (dynamische Partition) system_dlkm (dynamische Partition) |
Hier sind die Befehle zum Flashen des 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 vendor_ramdisk aktualisiert haben (siehe Abschnitt
Vendor-Ramdisk aktualisieren), verwenden Sie stattdessen den
folgenden Befehl, um die vendor_boot-Partition zu aktualisieren:
fastboot flash vendor_boot out/slider/dist/vendor_boot.img
Die Kernel-Images finden Sie im 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:Beispielbefehl für die Verbindung vom Host: fastboot oem uart enablefastboot oem uart config 3000000screen -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.
Upstream-Pixel-Kernel erstellen und flashen
Da das Pixel 6 und das Pixel 6 Pro im Upstream-Linux-Kernel unterstützt werden, können Sie android-mainline nur mit Upstream-Treibern verwenden, um zum Shell-Prompt des Geräts zu booten und den Kernel zu entwickeln. In diesem Abschnitt wird beschrieben, wie Sie einen Pixel 6- und Pixel 6 Pro-Kernel aus android-mainline synchronisieren, erstellen und flashen.
Führen Sie die folgenden Schritte aus, um zu beginnen.
- Bereiten Sie Ihr Gerät vor, indem Sie die Schritte unter Pixel Gerät vorbereiten ausführen.
- Synchronisieren Sie den Kernel-Manifest-Branch
common-android-mainline, indem Sie die Schritte unter Kernel-Repository synchronisieren ausführen. Die Kleaf-Build-Zielkonfiguration ist unter dem Pfad
KERNEL_REPO_ROOT/devices/google/ravioledefiniert. Führen Sie den folgenden Kleaf-Befehl aus, um das Build-Zielraviole_upstreamzu kompilieren:tools/bazel run //devices/google/raviole:raviole_upstream_distÄhnlich wie bei den Produktions-Kernels müssen Sie die Verifizierung deaktivieren und die Daten auf Ihrem Gerät löschen, wenn Sie einen benutzerdefinierten Kernel auf den Android-Factory Images flashen. Weitere Informationen finden Sie in den Hinweisen unter Kernel-Images flashen.
Führen Sie im Fastboot-Modus die folgenden Befehle aus, um die Kernel-Images zu flashen:
fastboot flash boot out/raviole_upstream/dist/boot.img fastboot flash dtbo out/raviole_upstream/dist/dtbo.img fastboot flash --dtb out/raviole_upstream/dist/dtb.img \ vendor_boot:dlkm out/raviole_upstream/dist/initramfs.imgWenn Sie auf einen Shell-Prompt des Geräts zugreifen möchten, können Sie das Gerät mit dem folgenden Befehl im Wiederherstellungsmodus neu starten:
fastboot reboot recoveryÖffnen Sie die Geräteshell mit dem Befehl
adb shell. Sie können auch mit dem Befehladb rootRoot-Zugriff verwenden.
Legacy-Pixel-Kernels
Als Referenz enthält die Tabelle Legacy-Pixel-Kernel-Branches die Kernel-Repository-Branches für das Pixel 5 und ältere Geräte. Das sind Geräte, die nicht von GKI unterstützt werden.
Legacy-Pixel-Kernel-Branches
| Gerät | Pfad des Binärprogramms im AOSP-Baum | Repository-Branches |
|---|---|---|
| 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 |