Cómo desarrollar funciones del bootloader de Android

En esta página, se describe cómo compilar, ejecutar y desarrollar funciones del bootloader de Android en un dispositivo Cuttlefish.

Fuentes del AOSP

Para desarrollar funciones del bootloader de Android, usa la configuración de Cuttlefish U-boot con Cuttlefish en aosp-main o en ramas de la imagen genérica del sistema (GSI) para Android 11 o versiones posteriores. Las siguientes son las fuentes del AOSP:

Cómo desarrollar un bootloader

Para compilar, ejecutar y desarrollar funciones del bootloader de forma local, sigue estos pasos:

  1. Clona el manifiesto para la bifurcación de Android de U-boot:

    $ mkdir u-boot-mainline
    $ cd u-boot-mainline
    $ repo init -u https://android.googlesource.com/kernel/manifest -b u-boot-mainline
    $ repo sync -j$(nproc) -q
    
  2. Compila el objetivo del bootloader apropiado para tu arquitectura de Cuttlefish. Por ejemplo:

    • x86_64

      $ tools/bazel run //u-boot:crosvm_x86_64_dist
      
    • aarch64

      $ tools/bazel run //u-boot:crosvm_aarch64_dist
      

    El objeto binario del bootloader resultante (u-boot.bin para arm64 y u-boot.rom para x86_64) se encuentra en $PATH_TO_REPO/out/u-boot-mainline/dist.

  3. Ejecuta el dispositivo Cuttlefish con el bootloader. Incluye el parámetro pause_in_bootloader para inhabilitar inicio automático y permitirte interactuar con el bootloader.

    $ launch_cvd \
        -bootloader /$PATH/$TO/u-boot-mainline/out/u-boot-mainline/dist/u-boot.rom \
        -pause_in_bootloader -console=true
    
  4. Para interactuar con el bootloader, conectate con la consola del bootloader.

    $ screen ~/cuttlefish_runtime/console
    
  5. Una vez que finalices las interacciones con el bootloader, ingresa boot en la consola para continuar con el inicio.

Cómo probar el flujo del bootloader con diferentes kernels

Para probar el flujo del bootloader con diferentes kernels o módulos de kernels, pasa los artefactos objetivo (kernels y módulos de kernels) usando los argumentos --kernel_path y --initramfs_path. El ensamblador vuelve a empaquetar las imágenes de arranque en los artefactos que se pasaron en los argumentos.

cvd start \
    -kernel_path=/$PATH/$TO/common-android14-6.1/out/android14-6.1/dist/bzImage \
    -initramfs_path=/$PATH/$TO/common-android14-6.1/out/android14-6.1/dist/initramfs.img

Para más información, consulta Desarrolla Kernels de Android.