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.
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/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/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 Prozess zum Aktualisieren des Kernels auf dem Pixel 6 und neueren Geräten:
Gerät über 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-release
entweder „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 die Schaltfläche Install build (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. Informationen zum KERNEL_MANIFEST_BRANCH für das Pixel findest du 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 Datei vendor_ramdisk-DEVICE.img
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 Partition
vendor_boot
flashen. Laden Siesdk-repo-HOST_OS-platform-tools-12583183.zip
aus den v35.0.2-12583183-Artefakten in die entsprechende Umgebung Ihres Hostcomputers herunter und extrahieren Sie die Datei.Folgen Sie der Anleitung unter Kernel-Images flashen, um DTB und
vendor_boot:dlkm
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.zip
cd raven-ap1a.240505.004
unzip image-raven-ap1a.240505.004.zip vendor_boot.img
Entpacken 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_out
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 (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 (Kleaf)
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 Produktionskernel-Branches den vorgefertigten GKI-Kernel, um den Build-Prozess zu beschleunigen. Wenn Sie den Hauptkernel ändern möchten, legen Sie die Umgebungsvariable BUILD_AOSP_KERNEL=1
fest, um den Kernel stattdessen aus den lokalen Quellen zu erstellen. Bei den Entwickler-Kernel-Branches wird standardmäßig direkt aus dem Kernel-Quellcode kompiliert.
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 Partition vendor_boot
zu aktualisieren:
fastboot flash vendor_boot out/slider/dist/vendor_boot.img
Die Kernel-Images finden Sie unter 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 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.
Legacy-Pixel-Kernels
Die Tabelle Legacy-Pixel-Kernel-Branches enthält 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 | Binärpfad 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 |