Questa guida fornisce le istruzioni passo passo su come scaricare, compilare ed 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 a Pixel 6 e modelli successivi. Questo perché Pixel 5 e modelli precedenti richiedono l'aggiornamento dei moduli del kernel nella partizione vendor, che dipende dalla build della piattaforma Android per questi dispositivi. La tabella dei branch del kernel Pixel supportati da
GKI include il branch del manifest del repository del kernel per ogni dispositivo Pixel supportato da GKI. Consulta
Kernel Pixel legacy per i branch del manifest del kernel di Pixel 5 e modelli precedenti.
Pixel 6 e Pixel 6 Pro sono supportati anche nel kernel Linux upstream e possono essere avviati al prompt della shell del dispositivo solo con i driver upstream. Per ulteriori dettagli, consulta Creare ed eseguire il flashing del kernel Pixel upstream.
Creare ed eseguire il flashing dei kernel Pixel GKI
Questa sezione fornisce i passaggi per sincronizzare, creare ed eseguire il flashing dei branch del kernel supportati da GKI. La tabella seguente fornisce un mapping dei dispositivi Pixel supportati e dei rispettivi branch del repository del kernel di produzione.
Branch del kernel Pixel supportati da GKI
| Dispositivo | Branch del repository | Kernel GKI |
|---|---|---|
| Pixel 9a (tegu) | android-gs-tegu-6.1-android16 | android14-6.1 |
| Pixel 9 Pro Fold (comet) | 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 dal produttore, i dispositivi Pixel 6 e 6 Pro sono supportati per scopi di sviluppo GKI solo sui branch del kernel Android Common inclusi nella tabella Combinazioni di piattaforma Android e kernel supportate per Pixel 6 e Pixel 6 Pro. 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 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 per aggiornare il kernel su Pixel 6 e modelli successivi:
Esegui il flashing del dispositivo utilizzando flash.android.com
- Vai a flash.android.com.
- Scegli la build di Android in base alle combinazioni di piattaforma e kernel Android supportate.
- Per
android-latest-release, seleziona "Back to Public", Canary o Beta.
- Per
- Seleziona le seguenti opzioni:
- Elimina i dati sul dispositivo
- Forza il flashing di tutte le partizioni
- Disabilita la verifica
- Premi il pulsante Installa build per eseguire il flashing del dispositivo.
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 KERNEL_MANIFEST_BRANCH di Pixel.
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 di cui è stato eseguito il flashing sul
dispositivo. Esistono alcune 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 del ramdisk DTB e DLKM della partizione vendor_boot
A partire dalla versione 35.0.2-12583183 di fastboot, puoi eseguire il flashing diretto del 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 eseguire il flashing di DTB e
vendor_boot:dlkmin Eseguire il flashing delle immagini del kernel.Opzione 2: estrai l'immagine del ramdisk del fornitore dall'immagine del produttore di Pixel.
Scarica l'immagine del produttore supportata per il tuo dispositivo da https://developers.google.com/android/images.
Estrai
vendor_boot.img:I comandi seguenti utilizzano Pixel 6 Pro AP1A.240505.004 come esempio. Sostituisci il nome del file zip con il nome file dell'immagine del produttore che hai scaricato.
unzip raven-ap1a.240505.004-factory-9d783215.zipcd raven-ap1a.240505.004unzip image-raven-ap1a.240505.004.zip vendor_boot.imgDecomprimi
vendor_boot.imgper ottenere il ramdisk del fornitore.KERNEL_REPO_ROOT/tools/mkbootimg/unpack_bootimg.py --boot_img vendor_boot.img \ --out vendor_boot_outCopia il file estratto
vendor-ramdisk-by-name/ramdisk_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 build_DEVICE.sh
script 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 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 creare il kernel per Pixel 6 sul branch android-gs-raviole-5.10-android14, esegui il comando:
build_slider.sh
Per impostazione predefinita, nei branch del kernel di produzione, gli
build_DEVICE.sh script 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. Per impostazione predefinita, i branch del kernel di sviluppo creano direttamente l'origine del kernel.
Per ulteriori dettagli sul sistema di compilazione del kernel e su come personalizzare la build, consulta Kleaf - Creare kernel Android con 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 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 sul 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 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 di eseguire il 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 9a (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.
| Branch del kernel | DIST_DIR |
|---|---|
| v5.10 | out/mixed/dist |
| v5.15 e versioni successive | out/DEVICE/dist |
Nota: se hai una chiavetta seriale e vuoi attivare i log seriali, il comando è:Esempio di comando per connettersi dall'host: fastboot oem uart enablefastboot oem uart config 3000000screen -fn /dev/ttyUSB* 3000000
Ripristina le immagini di fabbrica
Per ripristinare le immagini di fabbrica sul dispositivo, puoi utilizzare flash.android.com.
Crea ed esegui il flashing del kernel Pixel upstream
Poiché Pixel 6 e Pixel 6 Pro sono supportati nel kernel Linux upstream, puoi utilizzare android-mainline solo con i driver upstream per avviare un prompt della shell del dispositivo per lo sviluppo del kernel. Questa sezione fornisce i passaggi per sincronizzare, creare ed eseguire il flashing di un kernel Pixel 6 e Pixel 6 Pro da android-mainline.
Segui i passaggi successivi per iniziare.
- Prepara il dispositivo seguendo i passaggi descritti in Prepara il dispositivo Pixel .
- Sincronizza il branch del manifest del kernel
common-android-mainlineseguendo i passaggi descritti in Sincronizza il repository del kernel. La configurazione della destinazione di build di Kleaf è definita nel percorso
KERNEL_REPO_ROOT/devices/google/raviole. Per compilare la destinazione di buildraviole_upstream, esegui il comando Kleaf:tools/bazel run //devices/google/raviole:raviole_upstream_distAnalogamente ai kernel di produzione, disattiva la verifica e cancella i dati sul dispositivo quando esegui il flashing di un kernel personalizzato sulle immagini di fabbrica di Android. Per ulteriori dettagli, consulta le note in Esegui il flashing delle immagini del kernel.
In modalità fastboot, esegui i seguenti comandi per eseguire il flashing delle 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.imgPer accedere a un prompt della shell del dispositivo, puoi riavviare in modalità di ripristino eseguendo il comando:
fastboot reboot recoveryApri la shell del dispositivo eseguendo il comando
adb shell. È possibile utilizzare anche l'accesso root eseguendo il comandoadb root.
Kernel Pixel legacy
A titolo di riferimento, la tabella dei branch del kernel Pixel legacy fornisce i branch del repository del kernel per Pixel 5 e modelli precedenti. Questi sono dispositivi non supportati da GKI.
Branch del kernel Pixel legacy
| Dispositivo | Percorso binario nell'albero 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 (flame) Pixel 4 XL (coral) |
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 (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 |