Compilare i kernel di Pixel

Questa guida fornisce istruzioni passo passo su come scaricare, compilare e flashare un kernel Pixel personalizzato per lo sviluppo. Grazie a GKI, ora è possibile aggiornare il kernel indipendentemente dalla build della piattaforma Android. Questi passaggi sono applicabili solo a Pixel 6 e modelli successivi. Questo perché Pixel 5 e i dispositivi precedenti richiedono l'aggiornamento dei moduli del kernel sulla partizione vendor, che dipende dalla build della piattaforma Android per questi dispositivi. La tabella rami del kernel Pixel supportati da GKI include il ramo del manifest del repository del kernel per ogni dispositivo Pixel supportato da GKI. Consulta Legacy Pixel Kernels per i rami manifest del kernel di Pixel 5 e modelli precedenti.

Pixel 6 e Pixel 6 Pro sono supportati anche nel kernel Linux upstream e possono avviarsi al prompt della shell del dispositivo solo con i driver upstream. Per maggiori dettagli, consulta Compilare e installare il kernel Pixel upstream.

Crea e installa i kernel GKI Pixel

Questa sezione fornisce i passaggi per sincronizzare, compilare e flashare i rami del kernel supportati da GKI. La tabella seguente fornisce una mappatura dei dispositivi Pixel supportati e dei rispettivi rami del repository del kernel di produzione.

Branch di kernel Pixel supportati da GKI

Dispositivo Rami del repository Kernel GKI
Pixel 9a (tegu) android-gs-tegu-6.1-android16 android14-6.1
Pixel 9 Pro Fold (cometa) 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

Oltre ai kernel supportati in fabbrica, i dispositivi Pixel 6 e 6 Pro sono supportati per scopi di sviluppo GKI solo sui rami del kernel Android Common inclusi nella tabella Combinazioni di piattaforma Android e kernel Pixel 6 e Pixel 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 piattaforma e kernel Android supportate per Pixel 6 e Pixel 6 Pro
Branch del manifest del kernel Pixel Branch GKI Build della piattaforma Android
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)

Prepara il dispositivo Pixel

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

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

Esegui il flashing del dispositivo utilizzando flash.android.com

  1. Vai alla pagina flash.android.com.
  2. Scegli la build Android in base alle combinazioni di piattaforma e kernel Android supportate.
    • Per android-latest-release, seleziona "Torna alla versione pubblica", Canary o Beta.
  3. Seleziona le seguenti opzioni:
    • Cancella dati dispositivo
    • Forza il flash di tutte le partizioni
    • Disattiva la verifica
  4. Premi il pulsante Installa build per eseguire il flashing del dispositivo.

**Figura 2.** Esempio di stazione di ricarica rapida

Sincronizza il repository del kernel

Esegui i seguenti comandi per scaricare il codice sorgente del kernel. Consulta la tabella Combinazioni di piattaforma e kernel Android supportate per Pixel 6 e Pixel 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 installata sul dispositivo. Esistono due opzioni per aggiornare il file vendor_ramdisk-DEVICE.img. Utilizza l'opzione (1) se utilizzi Android 15 QPR2 (BP11.241025.006) o versioni successive. In caso contrario, utilizza l'opzione (2).

  • Opzione 1: aggiorna solo i bit DTB e DLKM ramdisk della partizione vendor_boot

    A partire dalla versione fastboot 35.0.2-12583183, puoi flashare direttamente il ramdisk DTB e DLKM sulla partizione vendor_boot. Esegui l'upgrade di Android platform-tools alla versione 36.0.0 o successive per utilizzare questa opzione. Per farlo, esegui questo comando:

    $ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager "platform-tools"
    

    Segui le istruzioni per flashare il DTB e vendor_boot:dlkm in Flashare le immagini del kernel.

  • Opzione 2: estrai l'immagine ramdisk del fornitore dall'immagine di fabbrica Pixel.

    1. Scarica l'immagine di fabbrica supportata per il tuo dispositivo da https://developers.google.com/android/images.

    2. Estrai vendor_boot.img:

      I seguenti comandi utilizzano AP1A.240505.004 di Pixel 6 Pro come esempio. Sostituisci il nome del file zip con il nome 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. Decomprimi 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 Pixel.

      Dispositivo 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
      

Compila il kernel

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

Per comodità, puoi eseguire lo script build_DEVICE.sh che si trova in KERNEL_REPO_ROOT. Nella maggior parte dei casi, DEVICE deve essere il nome in codice, che può essere il nome in codice di un dispositivo, ad esempio "akita" (Pixel 8a), o un nome in codice che rappresenta un gruppo di dispositivi correlati che condividono un kernel, ad esempio "caimito", che indica Pixel 9 (tokay), Pixel 9 Pro (caiman) e Pixel 9 Pro XL (komodo). Per android14 e versioni precedenti, utilizza build_slider.sh per Pixel 6 e Pixel 6 Pro e build_cloudripper.sh per Pixel 7 e Pixel 7 Pro.

Ad esempio, per creare il kernel per Pixel 6 sul ramo android-gs-raviole-5.10-android14, esegui questo comando:

build_slider.sh

Per impostazione predefinita, nei rami del kernel di produzione, gli script build_DEVICE.sh utilizzano il kernel GKI precompilato per velocizzare 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. I rami del kernel di sviluppo creano direttamente il codice sorgente del kernel per impostazione predefinita.

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

Flash delle immagini del kernel

Nota: se non hai disattivato la verifica, devi farlo prima di installare il kernel personalizzato. Ecco il comando per farlo:
fastboot oem disable-verification
AVVISO: se esegui il flashing di un kernel personalizzato su una build della piattaforma, potresti dover cancellare i dati del dispositivo se è presente un downgrade del livello delle 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 cancellarli.
fastboot -w

Per eseguire il flashing delle immagini del 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 del flashing.

Dispositivo Partizioni del kernel
Pixel 6 (oriole)
Pixel 6 Pro (raven)
Pixel 6a (bluejay)
boot
dtbo
vendor_boot o vendor_boot:dlkm
vendor_dlkm (partizione dinamica)
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 (partizione dinamica)
system_dlkm (partizione dinamica)

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

Per Pixel 6, Pixel 6 Pro e Pixel 6a, se hai aggiornato vendor_ramdisk in Aggiorna il ramdisk del fornitore, utilizza invece il seguente comando per aggiornare la partizione vendor_boot:

fastboot flash vendor_boot out/slider/dist/vendor_boot.img

Le immagini del kernel si trovano in DIST_DIR.

Ramo del kernel DIST_DIR
v5.10 out/mixed/dist
v5.15 e versioni successive out/DEVICE/dist
Nota:se hai un dongle seriale e vuoi attivare i log seriali, il comando è:
fastboot oem uart enable
fastboot oem uart config 3000000
Comando di esempio per la connessione dall'host:
screen -fn /dev/ttyUSB* 3000000

Ripristinare le immagini di fabbrica

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

Compila e installa il kernel Pixel upstream

Poiché Pixel 6 e Pixel 6 Pro sono supportati nel kernel Linux upstream, puoi utilizzare android-mainline con solo i driver upstream per avviare un prompt della shell del dispositivo per lo sviluppo del kernel. Questa sezione fornisce i passaggi per sincronizzare, compilare e flashare un kernel Pixel 6 e Pixel 6 Pro da android-mainline.

Segui i passaggi successivi per iniziare.

  1. Prepara il dispositivo seguendo i passaggi descritti in Preparare il dispositivo Pixel.
  2. Sincronizza il ramo del manifest del kernel common-android-mainline seguendo i passaggi descritti in Sincronizzare il repository del kernel.
  3. La configurazione della destinazione di build di Kleaf è definita nel percorso KERNEL_REPO_ROOT/devices/google/raviole. Per compilare la destinazione di build raviole_upstream, esegui il comando Kleaf:

    tools/bazel run //devices/google/raviole:raviole_upstream_dist
    
  4. Analogamente ai kernel di produzione, disattiva la verifica e cancella i dati del dispositivo quando installi un kernel personalizzato sopra le immagini di fabbrica di Android. Per ulteriori dettagli, consulta le note nella sezione Flash delle immagini del kernel.

  5. In modalità fastboot, esegui i seguenti comandi per flashare le immagini del kernel:

    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.img
    
  6. Per accedere a un prompt della shell del dispositivo, puoi riavviare in modalità di ripristino eseguendo il comando:

    fastboot reboot recovery
    

    Apri la shell del dispositivo eseguendo il comando adb shell. L'accesso root può essere utilizzato anche eseguendo il comando adb root.

Kernel Pixel legacy

Come riferimento, la tabella Legacy Pixel kernel branches fornisce i rami del repository del kernel per Pixel 5 e modelli precedenti. Questi sono dispositivi non supportati da GKI.

Branch legacy del kernel Pixel
Dispositivo Percorso binario nell'albero AOSP Rami del repository
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 (fiamma)
Pixel 4 XL (corallo)
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 (luccio)
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