Créer des noyaux Pixel

Ce guide fournit des instructions détaillées sur le téléchargement, la compilation et le flash d'un noyau Pixel personnalisé pour le développement. Grâce à GKI, il est désormais possible de mettre à jour le noyau indépendamment du build de la plate-forme Android. Ces étapes ne s'appliquent qu'aux appareils Pixel 6 et versions ultérieures. En effet, les appareils Pixel 5 et les versions antérieures nécessitent la mise à jour des modules du noyau sur la partition vendor, qui dépend du build de la plate-forme Android pour ces appareils. Le tableau Branches du kernel Pixel compatibles avec GKI inclut la branche du fichier manifeste du dépôt du kernel pour chaque appareil Pixel compatible avec GKI. Reportez-vous à la section Legacy Pixel Kernels (Anciens noyaux Pixel) pour découvrir les branches du fichier manifeste du noyau Pixel 5 et antérieures.

Branches du kernel Pixel compatibles avec GKI
Appareil Chemin binaire dans l'arborescence AOSP Branches de dépôts Noyau GKI
Pixel 9 Pro Fold (comet) device/google/comet-kernel android-gs-comet-6.1-android14-qpr3-d1 Android 14-6.1
Pixel 9 (Tokay)
Pixel 9 Pro (Caiman)
Pixel 9 Pro XL (komodo)
appareil/google/caimito-kernel android-gs-caimito-6.1-android14-qpr3-d1 Android 14-6.1
Pixel 8a (akita) appareil/google/noyau-akita android-gs-akita-5.15-android14-qpr3 Android14-5.15
Pixel 8 (shiba)
Pixel 8 Pro (husky)
appareil/google/noyau-shusky android-gs-shusky-5.15-android14-qpr3 Android14-5.15
Pixel Fold (felix) appareil/google/felix-kernel android-gs-felix-5.10-android14-qpr3 android13-5.10
Pixel Tablet (tangorpro) device/google/tangorpro-kernel android-gs-tangorpro-5.10-android14-qpr3 Android 13-5.10
Pixel 7a (lynx) device/google/lynx-kernel android-gs-lynx-5.10-android14-qpr3 android13-5.10
Pixel 7 (panthère)
Pixel 7 Pro (guépard)
device/google/pantah-kernel android-gs-pantah-5.10-android14-qpr3 Android 13-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 (corbeau)
device/google/raviole-kernel android-gs-raviole-5.10-android14-qpr3 android13-5.10

En plus des noyaux compatibles en usine, les appareils Pixel 6 et Pixel 6 Pro ne sont compatibles avec le développement GKI que sur les branches de noyau Android Common incluses dans le tableau Combinaisons de noyau et plate-forme Android Pixel 6/6 Pro compatibles. En raison des différences entre les UAPI du fournisseur entre les HAL de la plate-forme Android et les pilotes du noyau Pixel, le tableau indique les combinaisons de compilation compatibles.

Combinaisons de plate-forme et de noyau Android des Pixel 6 et Pixel 6 Pro compatibles
Branche du fichier manifeste du noyau Pixel Branche GKI Build de la plate-forme Android Compatibilité avec aosp-main ?
gs-android-gs-raviole-mainline android-mainline (v6.8) AP1A.240505.004 (11583682) Oui
android14-gs-pixel-6.1 android14-6.1 AP1A.240505.004 (11583682) Oui
gs-android13-gs-raviole-5.15 android13-5.15 TQ1A.230205.002 (9471150) Non

Préparer votre appareil Pixel

L'organigramme suivant décrit le processus de mise à jour du noyau sur les appareils Pixel 6 et versions ultérieures:

**Figure 1.** Organigramme de la mise à jour du noyau

Flasher l'appareil à l'aide de flash.android.com

  1. Accédez à flash.android.com.
  2. Choisissez le build Android basé sur les combinaisons de plate-forme et de noyau Android compatibles.
  3. Sélectionnez les options suivantes :
    • Effacer les données de l'appareil
    • Forcer le flash de toutes les partitions
    • Désactiver la validation
  4. Appuyez sur le bouton Install build (Installer le build) pour flasher l'appareil.

**Figure 2.** Exemple de borne Flash

Télécharger et compiler le noyau

Synchroniser le dépôt du noyau

Exécutez les commandes suivantes pour télécharger le code source du noyau. Consultez le tableau Combinaisons compatibles avec la plate-forme Android et les noyaux Pixel 6/6 Pro pour le Pixel KERNEL_MANIFEST_BRANCH.

repo init -u https://android.googlesource.com/kernel/manifest -b KERNEL_MANIFEST_BRANCH
repo sync -c --no-tags

Mettre à jour le ramdisk du fournisseur

Mettez à jour le fichier vendor_ramdisk-DEVICE.img dans le dépôt du noyau pour qu'il corresponde au build de la plate-forme Android qui est flashé sur l'appareil. Vous pouvez suivre plusieurs options.

Option 1 : Extrayez l'image du ramdisk du fournisseur à partir de l'image d'usine Pixel.
  1. Téléchargez l'image d'usine compatible pour votre appareil sur https://developers.google.com/android/images.

  2. Extrayez vendor_boot.img:

    • Les commandes suivantes utilisent le Pixel 6 Pro AP1A.240505.004 comme exemple. Remplacez le nom du fichier ZIP par le nom de l'image d'usine que vous avez téléchargée.
      unzip raven-ap1a.240505.004-factory-9d783215.zip
    
      cd raven-ap1a.240505.004
    
      unzip image-raven-ap1a.240505.004.zip vendor_boot.img
    
  3. Décompressez vendor_boot.img pour obtenir le ramdisk du fournisseur.

      KERNEL_REPO_ROOT/tools/mkbootimg/unpack_bootimg.py --boot_img vendor_boot.img \
          --out vendor_boot_out
    
  4. Copiez le fichier vendor-ramdisk-by-name/ramdisk_ extrait dans le dépôt du kernel Pixel.

    Appareil DEVICE_RAMDISK_PATH
    Pixel 6 (oriole)
    Pixel 6 Pro (corbeau)
    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
    
Option 2 : Copiez le vendor_ramdisk à partir d'un dépôt de plate-forme Android créé localement.
Appareil DEVICE_RAMDISK_PATH
Pixel 6 (oriole)
Pixel 6 Pro (corbeau)
prebuilts/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

Compiler le noyau (Kleaf)

Dans Android 13, le script build.sh a été remplacé par un nouveau système de compilation du kernel appelé Kleaf. Pour les appareils utilisant android13-5.15 ou une version ultérieure, le noyau doit être créé à l'aide de Kleaf.

Pour les Pixel 6 et 6 Pro avec les noyaux android14 et versions ultérieures, exécutez la commande de compilation Kleaf :

tools/bazel run --config=fast --config=stamp //private/google-modules/soc/gs:slider_dist

Pour les Pixel 6 et 6 Pro avec noyaux android13-5.15, exécutez la commande de compilation Kleaf:

tools/bazel run --lto=thin //gs/google-modules/soc-modules:slider_dist

Pour tous les autres noyaux Pixel, exécutez le script build_DEVICE.sh disponible à l'emplacement KERNEL_REPO_ROOT. Dans la plupart des cas, DEVICE doit être le nom de code qui correspond au nom de code utilisé dans la colonne Chemin binaire dans l'arborescence AOSP de la table branches du noyau Pixel compatibles avec GKI. Il peut s'agir du nom de code d'un appareil, tel que "akita" (Pixel 8a), ou d'un nom de code représentant un groupe d'appareils associés partageant un noyau, comme "caimito", qui correspond au Pixel 9 (tokay), au Pixel 9 Pro (caiman) et au Pixel 9 Pro XL (komodo). Pour android14 et les versions antérieures, utilisez build_slider.sh pour le Pixel 6 et le Pixel 6 Pro, et build_cloudripper.sh pour le Pixel 7 et le Pixel 7 Pro.

Par exemple, pour créer le noyau du Pixel 6 sur la branche android-gs-raviole-5.10-android14, exécutez la commande suivante:

build_slider.sh

Par défaut, les scripts build_DEVICE.sh utilisent le noyau GKI prédéfini pour accélérer le processus de compilation. Si vous souhaitez modifier le kernel principal, définissez la variable d'environnement BUILD_AOSP_KERNEL=1 pour compiler le kernel à partir des sources locales à la place.

Pour en savoir plus sur le système de compilation du noyau et sur la personnalisation de la compilation, consultez Kleaf - Créer des noyaux Android avec Bazel.

Flasher les images du noyau

Remarque:Si vous n'avez pas désactivé la validation, vous devez le faire avant de flasher le noyau personnalisé. Voici la commande à exécuter :
fastboot oem disable-verification
AVERTISSEMENT:Si vous flashez un noyau personnalisé sur une version de plate-forme, vous devrez peut-être effacer les données de votre appareil si le nouveau noyau est associé à un niveau de correctif de sécurité (SPL) rétrogradé. Cette opération efface toutes vos données à caractère personnel. Veillez à sauvegarder vos données avant de les effacer.
fastboot -w

Pour flasher les images du noyau, exécutez la commande fastboot flash pour chaque partition de noyau listée pour votre appareil. Pour les partitions dynamiques, vous devez redémarrer en mode fastbootd avant de les flasher.

Appareil Partitions du kernel
Pixel 6 (oriole)
Pixel 6 Pro (corbeau)
Pixel 6a (geai)
boot
dtbo
vendor_boot
vendor_dlkm (partition dynamique)
Pixel 8 (shiba)
Pixel 8 Pro (husky)
Pixel Fold (Félix)
Pixel Tablet (tangorpro)
Pixel 7a (lynx)
Pixel 7 (panthère)
Pixel 7 Pro (guépard)
boot
dtbo
vendor_kernel_boot
vendor_dlkm (partition dynamique)
system_dlkm (partition dynamique)

Voici les commandes de flashage pour le Pixel 6 sur 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

Les images du noyau se trouvent dans DIST_DIR.

Branche du kernel DIST_DIR
v5.10 out/mixed/dist
v5.15 et versions ultérieures out/DEVICE/dist
Remarque:Si vous disposez d'un dongle série et que vous souhaitez activer les journaux série, la commande est la suivante:
fastboot oem uart enable
fastboot oem uart config 3000000
Exemple de commande pour vous connecter depuis l'hôte :
screen -fn /dev/ttyUSB* 3000000

Restaurer les images d'usine

Pour restaurer les images d'usine sur votre appareil, vous pouvez utiliser flash.android.com.

Kernels Pixel anciens

Pour référence, le tableau des anciennes branches du kernel Pixel fournit les branches du dépôt du kernel pour le Pixel 5 et les appareils plus anciens. Il s'agit d'appareils non compatibles avec GKI.

Anciennes branches du noyau Pixel
Appareil Chemin binaire dans l'arborescence AOSP Branches de dépôts
Pixel 5a (barbet)
Pixel 4a (5G) (bramble)
Pixel 5 (redfin)
appareil/google/noyau-redbull android-msm-redbull-4.19-android14-qpr3
Pixel 4a (poisson-soleil) device/google/sunfish-kernel android-msm-sunfish-4.14-android13-qpr3
Pixel 4 (Flame)
Pixel 4 XL (Coral)
appareil/google/noyau-coral 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 (crosshat)
appareil/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