Pixel-Kernel erstellen

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:

**Abbildung 1:** Flussdiagramm 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 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.
  3. 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)
  4. Klicken Sie auf die Schaltfläche Install build (Build installieren), um das Gerät zu flashen.

**Abbildung 2:** Beispiel für eine Flash Station

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 Sie sdk-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.

    1. Laden Sie das unterstützte Factory Image für Ihr Gerät von https://developers.google.com/android/images herunter.

    2. 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
      
    3. 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
      
    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 (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:
fastboot oem uart enable
fastboot oem uart config 3000000
Beispielbefehl für die 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.

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