Creare kernel Pixel

Questa guida fornisce istruzioni dettagliate su come scaricare, compilare e eseguire il flash di un kernel Pixel personalizzato per lo sviluppo. Grazie a GKI, ora è possibile aggiornare il kernel indipendentemente dalla build della piattaforma Android. Questi passaggi sono validi solo per Pixel 6 e modelli successivi. Questo perché Pixel 5 e i dispositivi precedenti richiedono l'aggiornamento dei moduli kernel sulla partizione vendor, che dipende dalla build della piattaforma Android per i dispositivi in questione. La tabella Rali del kernel Pixel supportati da GKI include il ramo del manifest del repository del kernel per ogni dispositivo Pixel supportato da GKI. Fai riferimento alla sezione Kernel Pixel legacy per i rami del manifest del kernel Pixel 5 e i rami del manifest dei kernel precedenti.

Rami del kernel Pixel supportati da GKI
Dispositivo Percorso binario nell'albero AOSP Rami del repository Kernel GKI
Pixel 8a (akita) dispositivo/google/kernel-akita android-gs-akita-5.15-android14-qpr3 android14-5.15
Pixel 8 (shiba)
Pixel 8 Pro (husky)
device/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
Pixel Tablet (tangorpro) device/google/tangorpro-kernel android-gs-tangorpro-5.10-android14-qpr3 android13-5.10
Pixel 7a (lynx) device/google/lynx-kernel android-gs-lynx-5.10-android14-qpr3 android13-5.10
Pixel 7 (pantera)
Pixel 7 Pro (ghepardo)
device/google/pantah-kernel android-gs-pantah-5.10-android14-qpr3 android13-5.10
Pixel 6a (ghiandaia) device/google/kernel-bluejay android-gs-bluejay-5.10-android14-qpr3 android13-5.10
Pixel 6 (oriole)
Pixel 6 Pro (corvo)
device/google/kernel-raviole android-gs-raviole-5.10-android14-qpr3 android13-5.10

Oltre ai kernel supportati di fabbrica, i dispositivi Pixel 6 e 6 Pro sono supportati per lo sviluppo GKI solo sui rami di kernel Android comuni inclusi nella tabella Combinazioni di kernel e piattaforma Android per Pixel 6/6 Pro supportate. A causa delle differenze UAPI del fornitore tra gli HAL della piattaforma Android e i driver del kernel Pixel, la tabella fornisce le combinazioni di build supportate.

Combinazioni di kernel e piattaforma Android per Pixel 6/6 Pro supportate
Ramo manifest kernel Pixel Filiale GKI Build della piattaforma Android Assistenza aosp-main?
gs-android-gs-raviole-mainline Android-mainline (v6.8) AP1A.240505.004 (11583682)
Android14-gs-pixel-6.1 Android 14-6.1 AP1A.240505.004 (11583682)
gs-android13-gs-raviole-5.15 Android 13-5,15 TQ1A.230205.002 (9471150) No

Prepara il dispositivo Pixel

Il seguente diagramma di flusso descrive la procedura per l'aggiornamento del kernel su Pixel 6 e dispositivi successivi:

**Figura 1.** Diagramma di flusso di aggiornamento del kernel

Esegui il flashing del dispositivo utilizzando flash.android.com

  1. Visita il sito flash.android.com.
  2. Scegli la build Android in base alle combinazioni della piattaforma Android e del kernel supportate.
  3. Seleziona le seguenti opzioni:
    • Cancella dati dispositivo
    • Forza il flash di tutte le partizioni
    • Disabilita verifica
  4. Premi il pulsante Installa build per far lampeggiare il dispositivo.

**Figura 2.** Esempio di Flash Station

Scarica e compila il kernel

Sincronizza il repository del kernel

Esegui questi comandi per scaricare il codice sorgente del kernel. Fai riferimento alla tabella Combinazioni supportate per piattaforma Android e kernel Pixel 6/6 Pro per Pixel KERNEL_MANIFEST_BRANCH.

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

Aggiorna il ramdisk del fornitore

Aggiorna il file vendor_ramdisk-DEVICE.img nel repository del kernel in modo che corrisponda alla build della piattaforma Android su cui viene eseguito il flashing del dispositivo. Ecco alcune opzioni che puoi seguire.

Opzione 1) estrai l'immagine ramdisk del fornitore dall'immagine di fabbrica di Pixel.
  1. Scarica l'immagine di fabbrica supportata per il tuo dispositivo da https://developers.google.com/android/images.

  2. Estrai il valore vendor_boot.img:

    • I comandi riportati di seguito utilizzano Pixel 6 Pro AP1A.240505.004 come esempio. Sostituisci il nome del file ZIP con il nome del file dell'immagine di fabbrica che hai scaricato.
      unzip raven-ap1a.240505.004-factory-9d783215.zip
    
      cd raven-ap1a.240505.004
    
      unzip image-raven-ap1a.240505.004.zip vendor_boot.img
    
  3. Apri la pacchettizzazione vendor_boot.img per ottenere il ramdisk del fornitore.

      KERNEL_REPO_ROOT/tools/mkbootimg/unpack_bootimg.py --boot_img vendor_boot.img \
          --out vendor_boot_out
    
  4. Copia il file vendor-ramdisk-by-name/ramdisk_ estratto nel repository del kernel di Pixel.

    Dispositivo DEVICE_RAMDISK_PATH
    Pixel 6 (oriole)
    Pixel 6 Pro (corvo)
    predefiniti/boot-artifacts/ramdisks/vendor_ramdisk-oriole.img
    Pixel 6a (ghiandaia) private/devices/google/bluejay/vendor_ramdisk-bluejay.img
      cp vendor_boot_out/vendor-ramdisk-by-name/ramdisk_ \
          KERNEL_REPO_ROOT/DEVICE_RAMDISK_PATH
    
Opzione 2) Copia l'oggetto vendor_ramdisk da un repository della piattaforma Android creato localmente.
Dispositivo DEVICE_RAMDISK_PATH
Pixel 6 (oriole)
Pixel 6 Pro (corvo)
predefiniti/boot-artifacts/ramdisks/vendor_ramdisk-oriole.img
Pixel 6a (ghiandaia) 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

Compila il kernel (Kleaf)

In Android 13, lo script build.sh è stato sostituito con un nuovo sistema di build del kernel denominato Kleaf. Per i dispositivi che utilizzano android13-5.15 e versioni successive, il kernel deve essere creato utilizzando Kleaf.

Per Pixel 6 e 6 Pro con kernel android14 e successivi, esegui il comando Kleaf build:

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

Per Pixel 6 e 6 Pro con kernel android13-5.15, esegui il comando Kleaf build:

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

Per tutti gli altri kernel Pixel, esegui lo script build_DEVICE.sh che si trova all'indirizzo KERNEL_REPO_ROOT. Ad esempio, per creare il kernel per Pixel 6 sul ramo android-gs-raviole-5.10-android14, devi eseguire il comando:

build_slider.sh

Per impostazione predefinita, gli script build_DEVICE.sh usano il kernel GKI predefinito per accelerare il processo di compilazione. Se vuoi modificare il kernel principale, imposta la variabile di ambiente BUILD_AOSP_KERNEL=1 per creare il kernel dalle origini locali.

Per maggiori dettagli sul sistema di compilazione del kernel e su come personalizzarla, consulta Kleaf - Building Android Kernels with Bazel.

Esegui il flashing delle immagini kernel

Nota: se non hai disabilitato la verifica, devi farlo prima di eseguire il flashing del kernel personalizzato. Ecco il comando per farlo:
fastboot oem disable-verification
AVVISO: se stai eseguendo il flashing di un kernel personalizzato sopra una build di una piattaforma, potresti dover cancellare i dati del dispositivo se esiste un downgrade a livello di patch di sicurezza (SPL) associato al nuovo kernel. Questa procedura cancella tutti i tuoi dati personali. Assicurati di eseguire il backup dei dati prima di cancellare.
fastboot -w

Per eseguire il flashing delle immagini kernel, esegui il comando fastboot flash per ogni partizione del kernel elencata per il tuo dispositivo. Per le partizioni dinamiche, devi riavviare in modalità fastbootd prima di lampeggiare.

Dispositivo Partizioni kernel
Pixel 6 (oriole)
Pixel 6 Pro (corvo imperiale)
Pixel 6a (bluejay)
boot
dtbo
vendor_boot
vendor_dlkm (partizione dinamica)
Pixel 8 (shiba)
Pixel 8 Pro (husky)
Pixel Fold (felix)
Pixel Tablet (tangorpro)
Pixel 7a (lynx)
Pixel 7 (pantera)
Pixel 7 Pro (cheetah)
boot
dtbo
vendor_kernel_boot
vendor_dlkm (partizione dinamica)
system_dlkm (partizione dinamica)

Ecco i comandi lampeggianti per Pixel 6 su 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

Le immagini kernel sono disponibili in DIST_DIR.

Ramo kernel DIST_DIR
Versione 5.10 out/mixed/dist
v5.15 e successive out/DEVICE/dist
Nota: se hai un dongle seriale e vuoi abilitare i log seriali, il comando è:
fastboot oem uart enable
fastboot oem uart config 3000000
Esempio di comando per connetterti dall'host:
screen -fn /dev/ttyUSB* 3000000

Ripristina le immagini di fabbrica

Per ripristinare le immagini di fabbrica del dispositivo, puoi utilizzare flash.android.com.

Kernel Pixel legacy

Come riferimento, la tabella dei rami del kernel Pixel legacy fornisce i rami del repository di kernel per Pixel 5 e dispositivi precedenti. Si tratta di dispositivi non supportati da GKI.

Rami del kernel Pixel legacy
Dispositivo Percorso binario nell'albero AOSP Rami del repository
Pixel 5a (barbet)
Pixel 4a (5G) (rovesci)
Pixel 5 (pinna rossa)
device/google/redbull-kernel android-msm-redbull-4.19-android14-qpr3
Pixel 4a (pesce giallo) device/google/kernel-sunfish android-msm-sunfish-4.14-android13-qpr3
Pixel 4 (fiamma)
Pixel 4 XL (corallo)
device/google/kernel-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 (linea blu)
Pixel 3 XL (linea blu)
device/google/kernel-crosshatch android-msm-crosshatch-4.9-android12
Pixel 2 (walleye)
Pixel 2 XL (taimen)
dispositivo/google/kernel-wahoo android-msm-wahoo-4.4-android10-qpr3
Pixel (pesce vela)
Pixel XL (marlin)
device/google/marlin-kernel android-msm-marlin-3.18-pie-qpr2