Questa guida fornisce istruzioni dettagliate su come scaricare, compilare e eseguire il flashing 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
applicabili solo per Pixel 6 e modelli successivi. Questo perché Pixel 5 e i dispositivi precedenti richiedono l'aggiornamento dei moduli del kernel nella partizione vendor
, che dipende dalla build della piattaforma Android per questi dispositivi. La tabella Branch del kernel di Pixel supportati da GKI include il branch manifest del repository del kernel per ogni dispositivo Pixel supportato da GKI. Consulta la sezione Kernel Pixel legacy per i rami manifest del kernel di Pixel 5 e versioni precedenti.
Branch del kernel di Pixel supportati da GKI
Dispositivo | Percorso binario nella struttura ad albero di AOSP | Branch del repository | Kernel GKI |
---|---|---|---|
Pixel 9 Pro Fold (comet) | device/google/comet-kernels/6.1 | android-gs-comet-6.1-android15-qpr1 | android15-6.1 |
Pixel 9 (Tokay) Pixel 9 Pro (Caiman) Pixel 9 Pro XL (Komodo) |
device/google/caimito-kernels/6.1 | android-gs-caimito-6.1-android15-qpr1 | android15-6.1 |
Pixel 8a (Akita) | device/google/akita-kernels/5.15 | android-gs-akita-5.15-android15-qpr1 | android15-5.15 |
Pixel 8 (shiba) Pixel 8 Pro (husky) |
device/google/shusky-kernels/5.15 | android-gs-shusky-5.15-android15-qpr1 | android15-5.15 |
Pixel Fold (felix) | device/google/felix-kernels/5.10 | android-gs-felix-5.10-android15-qpr1 | android15-5.10 |
Pixel Tablet (tangorpro) | device/google/tangorpro-kernels/5.10 | android-gs-tangorpro-5.10-android15-qpr1 | android15-5.10 |
Pixel 7a (Lynx) | device/google/lynx-kernels/5.10 | android-gs-lynx-5.10-android15-qpr1 | android15-5.10 |
Pixel 7 (panther) Pixel 7 Pro (cheetah) |
device/google/pantah-kernels/5.10 | android-gs-pantah-5.10-android15-qpr1 | android15-5.10 |
Pixel 6a (bluejay) | device/google/bluejay-kernels/5.10 | android-gs-bluejay-5.10-android15-qpr1 | android15-5.10 |
Pixel 6 (oriole) Pixel 6 Pro (raven) |
device/google/raviole-kernels/5.10 | android-gs-raviole-5.10-android15-qpr1 | android15-5.10 |
Oltre ai kernel supportati in fabbrica, i dispositivi Pixel 6 e 6 Pro sono supportati a fini di sviluppo GKI solo nei rami del kernel Android Common inclusi nella tabella Combinazioni di piattaforma Android e kernel supportate per Pixel 6/6 Pro. A causa delle differenze tra le UAPI dei fornitori tra gli HAL della piattaforma Android e i driver del kernel di Pixel, la tabella fornisce le combinazioni di build supportate.
Combinazioni di kernel e piattaforma Android supportate per Pixel 6/6 Pro
Ramo manifest del kernel di Pixel | Ramo GKI | Build della piattaforma Android | aosp-main ? |
---|---|---|---|
gs-android-gs-raviole-mainline | android-mainline (v6.8) | AP1A.240505.004 (11583682) | Sì |
android14-gs-pixel-6.1 | android14-6.1 | AP1A.240505.004 (11583682) | Sì |
gs-android13-gs-raviole-5.15 | android13-5.15 | TQ1A.230205.002 (9471150) | No |
Prepara il dispositivo Pixel
Il seguente diagramma di flusso descrive la procedura per aggiornare il kernel su Pixel 6 e modelli successivi:
Eseguire il flashing del dispositivo utilizzando flash.android.com
- Vai alla pagina flash.android.com
- Scegli la build Android in base alle combinazioni di piattaforma e kernel Android supportate.
- Seleziona le seguenti opzioni:
- Cancella dati dispositivo
- Forza riavvio di tutte le partizioni
- Disattivare la verifica
- Premi il pulsante Installa build per eseguire il flashing del dispositivo.
Scarica e compila il kernel
Sincronizza il repository del kernel
Esegui i seguenti comandi per scaricare il codice sorgente del kernel. Consulta la tabella Combinazioni di kernel e piattaforma Android supportate per Pixel 6/6 Pro per PixelKERNEL_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 che viene flashata sul
dispositivo. Hai a disposizione alcune opzioni.
Opzione 1: estrai l'immagine ramdisk del fornitore dall'immagine di fabbrica di Pixel.
Scarica l'immagine di fabbrica supportata per il tuo dispositivo da https://developers.google.com/android/images.
Estrai il
vendor_boot.img
:- I seguenti comandi 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
Estrai il file
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 di 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
Opzione 2: copia vendor_ramdisk
da un repository della piattaforma Android compilato localmente.
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 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 compilazione del kernel chiamato Kleaf. Per i dispositivi che utilizzano android13-5.15
e versioni successive, il kernel deve essere compilato utilizzando Kleaf.
Per Pixel 6 e 6 Pro con kernel android14
e versioni successive, esegui il comando di compilazione Kleaf:
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 di compilazione Kleaf:
tools/bazel run --lto=thin //gs/google-modules/soc-modules:slider_dist
Per tutti gli altri kernel di Pixel, esegui lo script build_DEVICE.sh
disponibile all'indirizzo KERNEL_REPO_ROOT
. Nella maggior parte dei casi, DEVICE
deve essere il nome in codice corrispondente a quello utilizzato nella colonna Percorso del file binario nella struttura AOSP della tabella Branch del kernel di Pixel supportati da GKI. 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 significa Pixel 9 (tokay), Pixel 9 Pro (caiman) e Pixel 9 Pro XL (komodo). Per le release android14
e 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 compilare il kernel per Pixel 6 sul ramoandroid-gs-raviole-5.10-android14
, devi eseguire il comando:
build_slider.sh
Per impostazione predefinita, gli script build_DEVICE.sh
utilizzano il kernel GKI precompilato per velocizzare il processo di compilazione. Se vuoi modificare il kernel di base, imposta la variabile di ambiente BUILD_AOSP_KERNEL=1
per compilare il kernel dalle sorgenti locali.
Per ulteriori dettagli sul sistema di compilazione del kernel e su come personalizzare la compilazione, consulta Kleaf - Building Android Kernels with Bazel.
Esegui il flashing delle immagini del kernel
Nota: se non hai disattivato la verifica, devi farlo prima di eseguire il flashing del kernel personalizzato. Ecco il comando da utilizzare:fastboot oem disable-verification
ATTENZIONE: se stai eseguendo il flashing di un kernel personalizzato su una build della piattaforma, potrebbe essere necessario resettare il dispositivo se è presente un downgrade del livello della patch di sicurezza (SPL) associato al nuovo kernel. Questa procedura cancella tutti i tuoi dati personali. Assicurati di eseguire il backup dei dati prima del reset.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 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 (partizione dinamica) system_dlkm (partizione dinamica) |
Di seguito sono riportati 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 vendor_boot out/slider/dist/vendor_boot.img
fastboot reboot fastboot
fastboot flash vendor_dlkm out/slider/dist/vendor_dlkm.img
Le immagini del kernel sono disponibili 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 sul dispositivo, puoi utilizzare flash.android.com.
Kernel Pixel precedenti
Come riferimento, la tabella Branch del kernel Pixel legacy fornisce i branch del repository del kernel per Pixel 5 e versioni precedenti. Questi sono dispositivi non supportati da GKI.
Branch del kernel di Pixel precedenti
Dispositivo | Percorso binario nella struttura ad albero di AOSP | Branch 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 (rosso fuoco) 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 (linea blu) Pixel 3 XL (linee incrociate) |
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 |