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 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. Per i rami del manifest del kernel di Pixel 5 e versioni precedenti, consulta la sezione Kernel Pixel legacy.
Branch del 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 e kernel Android 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 piattaforma Android e kernel Pixel 6/6 Pro supportate
Branch del manifest del kernel Pixel | Branch GKI | Build della piattaforma Android |
---|---|---|
gs-android-gs-raviole-mainline | android-mainline | android-latest-release |
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:
Esegui il flashing del dispositivo utilizzando flash.android.com
- Vai alla pagina flash.android.com.
- Scegli la build Android in base alle combinazioni supportate di piattaforma e kernel Android.
- Seleziona le seguenti opzioni:
- Cancella dati dispositivo
- Forza il flash di tutte le partizioni
- Disattiva la verifica
- Premi il pulsante Installa build per eseguire il flashing del dispositivo.
Scaricare e compilare il kernel
Sincronizza il repository del kernel
Esegui i seguenti comandi per scaricare il codice sorgente del kernel. Consulta la tabella Combinazioni supportate di piattaforma Android e kernel per 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 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
. Scarica ed estraisdk-repo-HOST_OS-platform-tools-12583183.zip
dagli artefatti v35.0.2-12583183 nell'ambiente della macchina host per l'utilizzo.Segui le istruzioni per eseguire il flashing di DTB e
vendor_boot:dlkm
nella sezione Esegui il flashing delle immagini del kernel.Opzione 2: estrai l'immagine ramdisk del fornitore dall'immagine di fabbrica Pixel.
Scarica l'immagine di fabbrica supportata per il tuo dispositivo da https://developers.google.com/android/images.
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
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
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 (Kleaf)
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
disponibile all'indirizzo 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 il 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 compilare 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.
Flashare le 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 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 (dynamic partition) system_dlkm (dynamic partition) |
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/6 Pro/6a, se hai aggiornato vendor_ramdisk
nella sezione
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 è:Comando di esempio per la connessione dall'host: fastboot oem uart enable
fastboot oem uart config 3000000
screen -fn /dev/ttyUSB* 3000000
Ripristinare le immagini di fabbrica
Per ripristinare le immagini di fabbrica del dispositivo, puoi utilizzare flash.android.com.
Kernel Pixel legacy
Come riferimento, la tabella Rami del kernel Pixel legacy fornisce i rami del repository del kernel per Pixel 5 e dispositivi 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 |