Sviluppa funzionalità bootloader Android

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

Origini AOSP

Per sviluppare le funzionalità del bootloader di Android, utilizza la configurazione di Cuttlefish di U-boot con Cuttlefish in aosp-main o nei branch generic system image (GSI) per Android 11 o versioni successive. Di seguito sono riportate le origini in AOSP:

Sviluppare un bootloader

Per compilare, 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 il target del bootloader appropriato per la tua 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 del bootloader.

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

Testa il flusso del bootloader con diversi kernel

Per testare il flusso del bootloader con kernel o moduli kernel diversi, passa gli artefatti di destinazione (moduli kernel e kernel) utilizzando gli argomenti --kernel_path e --initramfs_path. L'assemblatore repaca 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 ulteriori informazioni, consulta Sviluppare kernel Android.