Construir núcleos de píxeles

Esta guía proporciona instrucciones paso a paso sobre cómo descargar, compilar y actualizar un kernel de Pixel personalizado para su desarrollo. Gracias a GKI, ahora es posible actualizar el kernel independientemente de la compilación de la plataforma Android. Estos pasos solo se aplican a dispositivos Pixel 6 y posteriores. Esto se debe a que Pixel 5 y dispositivos anteriores requieren actualizar los módulos del kernel en la partición vendor , que depende de la compilación de la plataforma Android para esos dispositivos. La tabla de ramas del kernel de píxeles compatibles con GKI incluye la rama del manifiesto del repositorio del kernel para cada dispositivo Pixel compatible con GKI. Consulte la sección Legacy Pixel Kernels para conocer las ramas del manifiesto del kernel de Pixel 5 y versiones anteriores.

Ramas del kernel de Pixel compatibles con GKI
Dispositivo Ruta binaria en el árbol AOSP Ramas del repositorio Núcleo GKI
Píxel 8 (shiba)
Pixel 8 Pro (ronco)
dispositivo/google/shusky-kernel android-gs-shusky-5.15-android14-d1 android14-5.15
Pliegue de píxeles (félix) dispositivo/google/felix-kernel android-gs-felix-5.10-android14 android13-5.10
Tableta de píxeles (tangorpro) dispositivo/google/tangorpro-kernel android-gs-tangorpro-5.10-android14 android13-5.10
Píxel 7a (lince) dispositivo/google/kernel-lynx android-gs-lynx-5.10-android14 android13-5.10
Píxel 7 (pantera)
Pixel 7 Pro (guepardo)
dispositivo/google/pantah-kernel android-gs-pantah-5.10-android14 android13-5.10
Píxel 6a (arrendajo azul) dispositivo/google/bluejay-kernel android-gs-bluejay-5.10-android14 android13-5.10
Píxel 6 (oropéndola)
Pixel 6 Pro (cuervo)
dispositivo/google/núcleo-raviole android-gs-raviole-5.10-android14 android13-5.10

Además de los kernels compatibles de fábrica, los dispositivos Pixel 6 y 6 Pro son compatibles para fines de desarrollo de GKI solo en las ramas de kernel comunes de Android incluidas en la tabla de combinaciones de kernel y plataforma Android Pixel 6/6 Pro compatibles . Debido a las diferencias de UAPI de los proveedores entre los HAL de la plataforma Android y los controladores del kernel de Pixel, la tabla proporciona las combinaciones de compilaciones admitidas.

Combinaciones de kernel y plataforma Android Pixel 6/6 Pro compatibles
Rama de manifiesto del kernel de píxeles Sucursal GKI Construcción de plataforma Android ¿Soporte aosp-main ?
gs-android-gs-rviole-línea principal Android-mainline ( etiqueta v6.7 ) UP1A.231005.007.A1 (10762838)
android14-gs-pixel-6.1 android14-6.1 UP1A.231005.007.A1 (10762838)
gs-android13-gs-rviole-5.15 android13-5.15 TQ1A.230205.002 (9471150) No

Prepara tu dispositivo Pixel

El siguiente diagrama de flujo describe el proceso para actualizar el kernel en dispositivos Pixel 6 y posteriores:

**Figura 1.** Diagrama de flujo de actualización del kernel

Actualice el dispositivo usando flash.android.com

  1. Vaya a flash.android.com
  2. Elija la compilación de Android según las combinaciones de kernel y plataforma Android compatibles .
  3. Seleccione las siguientes opciones:
    • Limpiar dispositivo
    • Forzar flasheo de todas las particiones
    • Desactivar verificación
  4. Presione el botón Instalar compilación para actualizar el dispositivo.

**Figura 2.** Ejemplo de estación flash

Descargar y compilar el kernel.

Sincronizar el repositorio del kernel

Ejecute los siguientes comandos para descargar el código fuente del kernel. Consulte la tabla de combinaciones de kernel y plataforma Android Pixel 6/6 Pro compatibles para Pixel KERNEL_MANIFEST_BRANCH .

repo init -u https://android.googlesource.com/kernel/manifest -b KERNEL_MANIFEST_BRANCH
repo sync -c --no-tags

Actualizar el disco ram del proveedor

Actualice el archivo vendor_ramdisk- DEVICE .img en el repositorio del kernel para que coincida con la versión de la plataforma Android que se muestra en el dispositivo. Hay algunas opciones que puedes seguir.

Opción 1) Extraiga la imagen del disco RAM del proveedor de la imagen de fábrica de Pixel .
  1. Descargue la imagen de fábrica compatible para su dispositivo desde https://developers.google.com/android/images.

  2. Extraiga el vendor_boot.img :

    • Los siguientes comandos utilizan el Pixel 6 Pro UP1A.231005.007.a1 como ejemplo. Reemplace el nombre del archivo zip con el nombre de archivo de la imagen de fábrica que descargó.
      unzip raven-up1a.231005.007.a1-factory-5d927f3e.zip
    
      cd raven-up1a.231005.007.a1
    
      unzip image-raven-up1a.231005.007.a1.zip vendor_boot.img
    
  3. Descomprima el vendor_boot.img para obtener el disco RAM del proveedor.

      KERNEL_REPO_ROOT/tools/mkbootimg/unpack_bootimg.py --boot_img vendor_boot.img \
          --out vendor_boot_out
    
  4. Copie el archivo ramdisk_ extraído al repositorio del kernel de Pixel.

    Dispositivo DEVICE_RAMDISK_PATH
    Píxel 6 (oropéndola)
    Pixel 6 Pro (cuervo)
    prebuilts/boot-artifacts/ramdisks/vendor_ramdisk- oriole.img
    Píxel 6a (arrendajo azul) privado/dispositivos/google/bluejay/vendor_ramdisk -bluejay.img
      cp vendor_boot_out/vendor-ramdisk-by-name/ramdisk_ \
          KERNEL_REPO_ROOT/DEVICE_RAMDISK_PATH
    
Opción 2) Copie el vendor_ramdisk de un repositorio de plataforma Android creado localmente.
Dispositivo DEVICE_RAMDISK_PATH
Píxel 6 (oropéndola)
Pixel 6 Pro (cuervo)
prebuilts/boot-artifacts/ramdisks/vendor_ramdisk- oriole.img
Píxel 6a (arrendajo azul) privado/dispositivos/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

Compile el kernel (Kleaf)

En Android 13, el script build.sh fue reemplazado por un nuevo sistema de compilación del kernel llamado Kleaf . Para dispositivos que usan android13-5.15 y versiones posteriores, el kernel debe compilarse con Kleaf.

Para Pixel 6 y 6 Pro con android14 y kernels posteriores, ejecute el comando de compilación de Kleaf:

tools/bazel run --config=fast --config=stamp //private/google-modules/soc/gs:slider_dist

Para Pixel 6 y 6 Pro con kernels android13-5.15 , ejecute el comando de compilación de Kleaf:

tools/bazel run --lto=thin //gs/google-modules/soc-modules:slider_dist

Para todos los demás kernels de Pixel, ejecute el script build_ DEVICE.sh que se encuentra en KERNEL_REPO_ROOT . Por ejemplo, para compilar el kernel para Pixel 6 en la rama android-gs-raviole-5.10-android14 , ejecutarías el comando:

build_slider.sh

De forma predeterminada, los scripts build_ DEVICE .sh utilizan el kernel GKI prediseñado para acelerar el proceso de compilación. Si desea modificar el kernel principal, configure la variable de entorno BUILD_AOSP_KERNEL=1 para compilar el kernel a partir de las fuentes locales.

Para obtener más detalles sobre el sistema de compilación del kernel y cómo personalizar la compilación, consulte la documentación de Kleaf .

Flashear las imágenes del kernel

Nota: Si no ha desactivado la verificación, debe hacerlo antes de actualizar el kernel personalizado. Aquí está el comando para hacerlo:
fastboot oem disable-verification
ADVERTENCIA: Si está actualizando un kernel personalizado sobre una versión de plataforma, es posible que deba borrar su dispositivo si hay una degradación del nivel de parche de seguridad (SPL) asociada con el nuevo kernel. Este proceso borra todos sus datos personales. Asegúrese de hacer una copia de seguridad de sus datos antes de borrarlos.
fastboot -w

Para actualizar las imágenes del kernel, ejecute el comando fastboot flash para cada partición del kernel listada para su dispositivo. Para particiones dinámicas, debe reiniciar en modo fastbootd antes de flashear.

Dispositivo Particiones del núcleo
Píxel 6 (oropéndola)
Pixel 6 Pro (cuervo)
Píxel 6a (arrendajo azul)
bota
dtbo
proveedor_arranque
proveedor_dlkm (partición dinámica)
Píxel 8 (shiba)
Pixel 8 Pro (ronco)
Pliegue de píxeles (félix)
Tableta de píxeles (tangorpro)
Píxel 7a (lince)
Píxel 7 (pantera)
Pixel 7 Pro (guepardo)
bota
dtbo
proveedor_kernel_boot
proveedor_dlkm (partición dinámica)
system_dlkm (partición dinámica)

Estos son los comandos de actualización para 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 se pueden encontrar en DIST_DIR .

rama del núcleo DIST_DIR
v5.10 out/mixed/dist
v5.15 y posteriores out/ DEVICE /dist
Nota: Si tiene un dongle serial y desea habilitar los registros seriales, el comando es:
fastboot oem uart enable
fastboot oem uart config 3000000
Comando de ejemplo para conectarse desde el host:
screen -fn /dev/ttyUSB* 3000000

Restaurar las imágenes de fábrica.

Para restaurar su dispositivo a las imágenes de fábrica, puede usar flash.android.com .

Núcleos de píxeles heredados

Como referencia, la tabla de ramas del kernel de Pixel heredado proporciona las ramas del repositorio del kernel para Pixel 5 y dispositivos anteriores. Estos son dispositivos que no son compatibles con GKI.

Ramas del kernel Legacy Pixel
Dispositivo Ruta binaria en el árbol AOSP Ramas del repositorio
Pixel 5a (barbudo)
Pixel 4a (5G) (zarza)
Píxel 5 (aleta roja)
dispositivo/google/kernel-redbull android-msm-redbull-4.19-android14
Píxel 4a (pez luna) dispositivo/google/núcleo-sunfish android-msm-sunfish-4.14-android13-qpr3
Píxel 4 (llama)
Píxel 4 XL (coral)
dispositivo/google/núcleo-de-coral android-msm-coral-4.14-android13
Píxel 3a (sargo)
Pixel 3a XL (bonito)
dispositivo/google/bonito-kernel android-msm-bonito-4.9-android12L
Píxel 3 (línea azul)
Pixel 3 XL (rayado cruzado)
dispositivo/google/kernel-crosshatch android-msm-crosshatch-4.9-android12
Píxel 2 (lucioperca)
Pixel 2 XL (taimen)
dispositivo/google/wahoo-kernel android-msm-wahoo-4.4-android10-qpr3
Píxel (pez vela)
Pixel XL (marlín)
dispositivo/google/marlin-kernel android-msm-marlin-3.18-pie-qpr2