Android 부트로더 기능 개발

이 페이지에서는 Cuttlefish 기기에서 Android 부트로더 기능을 빌드, 실행, 개발하는 방법을 설명합니다.

AOSP 소스

Android 부트로더 기능을 개발하려면 Cuttlefish가 aosp-main 또는 일반 시스템 이미지(GSI)(Android 11 및 이후 버전)에 있는 U-boot의 Cuttlefish 구성을 사용하세요. 다음은 AOSP의 소스입니다.

부트로더 개발

부트로더 기능을 로컬에서 빌드, 실행, 개발하려면 다음 단계를 따르세요.

  1. U-boot의 Android 포크에 매니페스트를 클론합니다.

    $ 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. Cuttlefish 아키텍처에 적합한 부트로더 타겟을 빌드합니다. 예:

    • x86_64

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

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

    결과로 생성되는 부트로더 바이너리(arm64: u-boot.bin, x86_64: u-boot.rom)는 $PATH_TO_REPO/out/u-boot-mainline/dist에서 찾을 수 있습니다.

  3. 부트로더가 적용된 Cuttlefish 기기를 실행합니다. 자동 부팅을 중지하고 부트로더와 직접 상호작용할 수 있도록 pause_in_bootloader 매개변수를 포함합니다.

    $ launch_cvd \
        -bootloader /$PATH/$TO/u-boot-mainline/out/u-boot-mainline/dist/u-boot.rom \
        -pause_in_bootloader -console=true
    
  4. 부트로더 콘솔에 접속하여 부트로더와 상호작용합니다.

    $ screen ~/cuttlefish_runtime/console
    
  5. 부트로더 상호작용이 완료되면 콘솔에 boot을 입력하여 부팅을 계속합니다.

여러 커널을 사용하여 부트로더 흐름 테스트

여러 커널 또는 커널 모듈을 사용하여 부트로더 흐름을 테스트하려면 --kernel_path--initramfs_path 인수를 사용하여 타겟 아티팩트(커널 및 커널 모듈)를 전달합니다. 어셈블러가 인수로 전달된 아티팩트를 기반으로 부트 이미지를 다시 패킹합니다.

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

자세한 내용은 Android 커널 개발을 참고하세요.