En esta guía, se proporcionan instrucciones paso a paso sobre cómo descargar, compilar y escribir en la memoria flash un kernel personalizado de Pixel para desarrollo. Gracias a la GKI, ahora es posible actualizar el kernel de manera independiente de la compilación de la plataforma de Android. Estos pasos solo se aplican a dispositivos Pixel 6 y versiones posteriores. Esto se debe a que el dispositivo Pixel 5 y versiones anteriores requieren la actualización de los módulos de kernel en la partición vendor
, que depende de la compilación de la plataforma de Android para esos dispositivos. En la tabla de las ramas del kernel de Pixel compatibles con GKI, se incluye la rama del manifiesto del repositorio del kernel para cada dispositivo Pixel compatible con GKI. Consulta la sección Kernels heredados de Pixel para las ramas del manifiesto de kernel de Pixel 5 y versiones anteriores.
Ramas del kernel de Pixel compatibles con GKI
Dispositivo | Ruta de objeto binario en el árbol de AOSP | Ramas de repositorio | Kernel de GKI |
---|---|---|---|
Pixel 9 Pro Fold (comet) | device/google/comet-kernel | android-gs-comet-6.1-android14-qpr3-d1 | android14-6.1 |
Pixel 9 (tokay) Pixel 9 Pro (caiman) Pixel 9 Pro XL (komodo) |
device/google/caimito-kernel | android-gs-caimito-6.1-android14-qpr3-d1 | android14-6.1 |
Pixel 8a (akita) | device/google/akita-kernel | 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 (panther) Pixel 7 Pro (cheetah) |
device/google/pantah-kernel | android-gs-pantah-5.10-android14-qpr3 | android13-5.10 |
Pixel 6a (bluejay) | device/google/bluejay-kernel | android-gs-bluejay-5.10-android14-qpr3 | android13-5.10 |
Pixel 6 (oriole) Pixel 6 Pro (raven) |
device/google/raviole-kernel | android-gs-raviole-5.10-android14-qpr3 | android13-5.10 |
Además de los kernels compatibles de fábrica, los dispositivos Pixel 6 y 6 Pro son compatibles con fines de desarrollo de GKI únicamente en las ramas de los kernels comunes de Android incluidas en la tabla Combinaciones compatibles de plataforma de Android y kernel para Pixel 6/6 Pro. Debido a las diferencias de UAPI de proveedores entre las HAL de la plataforma de Android y los controladores del kernel de Pixel, en la tabla se detallan las combinaciones de compilación admitidas.
Combinaciones compatibles de plataforma de Android y kernel para Pixel 6/6 Pro
Rama del manifiesto del kernel de Pixel | Rama de GKI | Compilación de la plataforma de Android | ¿Es compatible con 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 tu dispositivo Pixel
En el siguiente diagrama de flujo, se describe el proceso para actualizar el kernel en el dispositivo Pixel 6 y versiones posteriores:
Escribe en la memoria flash del dispositivo usando flash.android.com
- Navega a flash.android.com.
- Elige la compilación de Android según las combinaciones compatibles de la plataforma de Android y el kernel.
- Selecciona las siguientes opciones:
- Limpiar el dispositivo
- Forzar la escritura de todas las particiones en la memoria flash
- Inhabilitar la verificación
- Presiona el botón Install build para escribir en la memoria flash del dispositivo.
Descarga y compila el kernel
Sincroniza el repositorio del kernel
Ejecuta los siguientes comandos para descargar el código fuente del kernel. Consulta la tabla Combinaciones compatibles de plataforma de Android y kernel para Pixel 6/6 Pro para la KERNEL_MANIFEST_BRANCH del Pixel.
repo init -u https://android.googlesource.com/kernel/manifest -b KERNEL_MANIFEST_BRANCH
repo sync -c --no-tags
Actualiza el ramdisk del proveedor
Actualiza el archivo vendor_ramdisk-DEVICE.img
en el repositorio del kernel para hacer coincidir la compilación de la plataforma de Android que se escribe en la memoria flash del dispositivo. Existen algunas opciones que puedes elegir.
Opción 1) Extrae la imagen del ramdisk del proveedor de la imagen de fábrica del Pixel.
Descarga la imagen de fábrica compatible de tu dispositivo de https://developers.google.com/android/images.
Extrae el archivo
vendor_boot.img
:- En los siguientes comandos, se usa AP1A.240505.004 del Pixel 6 Pro como ejemplo. Reemplaza el nombre del archivo zip por el nombre de la imagen de fábrica que descargaste.
unzip raven-ap1a.240505.004-factory-9d783215.zip
cd raven-ap1a.240505.004
unzip image-raven-ap1a.240505.004.zip vendor_boot.img
Descomprime el archivo
vendor_boot.img
para obtener el ramdisk del proveedor.KERNEL_REPO_ROOT/tools/mkbootimg/unpack_bootimg.py --boot_img vendor_boot.img \ --out vendor_boot_out
Copia el archivo
vendor-ramdisk-by-name/ramdisk_
que se extrajo en el repositorio del kernel de 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
Opción 2) Copia el vendor_ramdisk
de un repositorio de plataforma de Android compilado 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 el kernel (Kleaf)
En Android 13, la secuencia de comandos de build.sh
se reemplazó con un nuevo sistema de compilación de kernel llamado Kleaf. Para dispositivos en los que se usa android13-5.15
y versiones posteriores, el kernel debería compilarse usando Kleaf.
Para Pixel 6 y 6 Pro con android14
y kernels posteriores, ejecuta el comando de compilación Kleaf:
tools/bazel run --config=fast --config=stamp //private/google-modules/soc/gs:slider_dist
Para Pixel 6 y 6 Pro con kernels de android13-5.15
, ejecuta el comando de compilación Kleaf:
tools/bazel run --lto=thin //gs/google-modules/soc-modules:slider_dist
Para el resto de los kernels de Pixel, ejecuta la secuencia de comandos build_DEVICE.sh
que se encuentra en KERNEL_REPO_ROOT
. En la mayoría de los casos, DEVICE
debe ser el nombre interno que coincide con el que se utiliza en la columna Ruta de objeto binario en el árbol de AOSP de la tabla Ramas del kernel de Pixel compatibles con GKI. Puede ser el nombre interno de un dispositivo, como "akita" (Pixel 8a), o un nombre interno que representa a un grupo de dispositivos relacionados que comparten un kernel, como "caimito", que significa Pixel 9 (tokay), Pixel 9 Pro (caiman) y Pixel 9 Pro XL (komodo). Para android14
y versiones anteriores, usa build_slider.sh
para Pixel 6 y Pixel 6 Pro, y build_cloudripper.sh
para Pixel 7 y Pixel 7 Pro.
Por ejemplo, para compilar el kernel de Pixel 6 en la rama de android-gs-raviole-5.10-android14
, deberías ejecutar este comando:
build_slider.sh
De forma predeterminada, en las secuencias de comandos de build_DEVICE.sh
, se usa el kernel de GKI compilado de manera previa para acelerar el proceso de compilación. Si quieres modificar el kernel principal, configura la variable de entorno BUILD_AOSP_KERNEL=1
para compilar el kernel desde fuentes locales.
Para obtener más detalles sobre el sistema de compilación de kernels y cómo personalizar la compilación, consulta Kleaf: Cómo compilar kernels de Android con Bazel.
Escribe las imágenes del kernel en la memoria flash
Nota: Si no inhabilitaste la verificación, debes hacerlo antes de escribir el kernel personalizado en la memoria flash. Este es el comando para hacerlo:fastboot oem disable-verification
ADVERTENCIA: Si escribes un kernel personalizado en la memoria flash sobre una compilación de plataforma, es posible que necesites limpiar tu dispositivo si hay un cambio a una versión inferior en el nivel de parche de seguridad asociado con el kernel nuevo. Con este proceso, se borran todos tus datos personales. Antes de realizar la limpieza, asegúrate de respaldar todos tus datos.fastboot -w
Para escribir las imágenes del kernel en la memoria flash, ejecuta el comando fastboot flash
para cada partición de kernel detallada para tu dispositivo. Para las particiones dinámicas, debes reiniciar en modo fastbootd
antes de escribir en la memoria flash.
Dispositivo | Particiones de kernel |
---|---|
Pixel 6
(oriole) Pixel 6 Pro (raven) Pixel 6a (bluejay) |
boot dtbo vendor_boot vendor_dlkm (partición dinámica) |
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 (partición dinámica) system_dlkm (partición dinámica) |
A continuación, se detallan los comandos para escribir en la memoria flash de Pixel 6 en 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
Las imágenes del kernel pueden encontrarse en DIST_DIR.
Rama del kernel | DIST_DIR |
---|---|
v5.10 | out/mixed/dist |
v5.15 y posteriores | out/DEVICE/dist |
Nota: Si tienes una llave de serie y quieres habilitar registros de serie, el comando es:Comando de ejemplo para conectarse desde el host: fastboot oem uart enable
fastboot oem uart config 3000000
screen -fn /dev/ttyUSB* 3000000
Restablece las imágenes de fábrica
Para restablecer el dispositivo a las imágenes de fábrica, puedes usar flash.android.com.
Kernels heredados de Pixel
Como referencia, en la tabla Ramas de kernels heredados de Pixel, se proporcionan las ramas del repositorio de kernels para Pixel 5 y dispositivos anteriores, es decir, dispositivos compatibles que no son de GKI.
Ramas de kernels heredados de Pixel
Dispositivo | Ruta de objeto binario en el árbol de AOSP | Ramas de repositorio |
---|---|---|
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 |