Sviluppare funzionalità del bootloader di Android

Questa pagina descrive come creare, eseguire e sviluppare funzionalità del bootloader Android su un dispositivo Cuttlefish.

Origini AOSP

Per sviluppare funzionalità del bootloader Android, utilizza la configurazione Cuttlefish di U-boot con Cuttlefish nel ramo di rilascio più recente (android16-release) o nei rami dell'immagine di sistema generica (GSI) per Android 11 o versioni successive. Di seguito sono riportate le origini in AOSP:

Sviluppare un bootloader

Per creare, eseguire e sviluppare localmente le funzionalità del bootloader:

  1. Clona il manifest per il fork Android di 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. Crea la destinazione del bootloader appropriata per l'architettura Cuttlefish. Ad esempio:

    • x86_64

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

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

    Il file binario del bootloader risultante (u-boot.bin per arm64 e u-boot.rom per x86_64) si trova in $PATH_TO_REPO/out/u-boot-mainline/dist.

  3. Avvia il dispositivo Cuttlefish con il bootloader. Includi il parametro pause_in_bootloader per disattivare l'avvio automatico e interagire con il bootloader.

    $ launch_cvd \
        -bootloader /$PATH/$TO/u-boot-mainline/out/u-boot-mainline/dist/u-boot.rom \
        -pause_in_bootloader -console=true
  4. Per interagire con il bootloader, connettiti alla console bootloader.

    $ screen ~/cuttlefish_runtime/console
  5. Al termine delle interazioni con il bootloader, continua l'avvio digitando boot nella console.

Testare il flusso del bootloader con kernel diversi

Per testare il flusso del bootloader con kernel o moduli kernel diversi, trasmetti gli artefatti di destinazione (kernel e moduli kernel) utilizzando gli argomenti --kernel_path e --initramfs_path. L'assembler ricompone le immagini di avvio in base agli artefatti passati negli argomenti.

cvd create \
    -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

Per saperne di più, consulta Sviluppare kernel Android.