Cuttlefish: criar um dispositivo personalizado

Esta página descreve como criar um dispositivo Cuttlefish personalizado. O Cuttlefish inclui tipos de dispositivos predefinidos em diferentes formatos, conforme listado em AndroidProducts.mk. Além das opções gerais de personalização de dispositivos descritas em Adicionar um novo dispositivo, você pode fazer personalizações específicas do Cuttlefish, como predefinições de configuração da placa do dispositivo virtual (vsoc_x86_64, vsoc_arm64, vsoc_riscv64), pré-builds do kernel, pré-builds do bootloader, propriedades do fornecedor, configurações do sistema, suporte à virtualização aninhada e opções de exibição. Para uma lista completa dos parâmetros de tempo de build que podem ser personalizados, consulte device/google/cuttlefish/vsoc_x86_64/phone/aosp_cf.mk.

As etapas a seguir descrevem como criar um dispositivo x86-64 big_phone fictício dez vezes maior que um dispositivo Cuttlefish comum.

Herdar de um destino atual

Para herdar de um destino atual:

  • Crie um device/google/cuttlefish/vsoc_x86_64/big_phone diretório.
  • Crie um arquivo aosp_cf.mk nesse diretório.
$(call inherit-product, device/google/cuttlefish/vsoc_x86_64_phone.mk)

PRODUCT_NAME: big_phone
PRODUCT_DEVICE: vsoc_x86_64
PRODUCT_MANUFACTURER := My Company
PRODUCT_MODEL: My Company very large phone

PRODUCT_VENDOR_PROPERTIES += \
    ro.soc.manufacturer=$(PRODUCT_MANUFACTURER) \
    ro.soc.model=$(PRODUCT_DEVICE)

Adicionar um destino de inicialização

Insira o destino lunch no arquivo device/google/cuttlefish/AndroidProducts.mk:

PRODUCT_MAKEFILES := \
  ...
  big_phone:$(LOCAL_DIR)/vsoc_x86_64/big_phone/aosp_cf.mk
  ...
lunch big_phone

Definir a configuração JSON

Para iniciar o dispositivo Cuttlefish, crie um arquivo de configuração JSON chamado big_phone.json com uma estrutura hierárquica que representa as propriedades do dispositivo. Por exemplo, no arquivo de configuração JSON, você pode especificar opções como a RAM alocada para a VM e a configuração de exibição. Esse arquivo não precisa estar na árvore do AOSP. Para detalhes sobre o formato JSON para configurações, consulte Configurações canônicas.

{
  "instances":
      [
        {
          "vm": {
            "memory_mb": 40960,
          },
          "graphics": {
            "displays": [
              {
                "width": 7200,
                "height": 12800,
                "dpi": 320
              }
            ]
          }
        }
      ]
}

Para iniciar a configuração, execute:

cvd create --config_file=big_phone.json

Executar launch_cvd (legado)

Algumas propriedades de configuração não estão disponíveis no formato de configuração JSON hierárquico. Para essas configurações, é possível definir valores padrão de flag launch_cvd de um dicionário JSON de nível único. Para uma lista completa de todas as opções de configuração, consulte cf_flags_validator.cpp.

A seguir, descrevemos um exemplo de como substituir os valores padrão das launch_cvd opções de flag usando um arquivo de configuração JSON e ativar o inicializador do Cuttlefish para iniciar a configuração personalizada.

  1. Crie um arquivo de configuração JSON, device/google/cuttlefish/shared/config/config_big_phone.json, com valores personalizados.

    {
      "x_res": 7200,
      "y_res": 12800,
      "dpi": 320,
      "memory_mb": 40960,
      "ddr_mem_mb": 49150,
    }
    
  2. Para que o inicializador do Cuttlefish inicie a configuração big_phone, verifique se ele tem acesso ao device/google/cuttlefish/shared/config/config_big_phone.json arquivo fazendo o seguinte:

    1. Declare o artefato JSON como um artefato de build adicionando a seção prebuilt_etc_host no arquivo device/google/cuttlefish/shared/config/Android.bp.

      prebuilt_etc_host {
          name: "cvd_config_big_phone.json",
          src: "config_big_phone.json",
          sub_dir: "cvd_config",
      }
      
    2. Adicione a declaração de artefato de build resultante ao inicializador do Cuttlefish executando o seguinte em device/google/cuttlefish/shared/device.mk.

      $(call soong_config_append,cvd,launch_configs,cvd_config_big_phone)
      
    3. Crie um arquivo android_info.txt e vincule a configuração big_phone ao arquivo adicionando a seguinte linha a device/google/cuttlefish/vsoc_x86_64/big_phone/aosp_cf.mk:

      TARGET_BOARD_INFO_FILE := device/google/cuttlefish/vsoc_x86_64/<var>big_phone</var>/android-info.txt
      
    4. Marque o tipo de dispositivo com a configuração big_phone preenchendo device/google/cuttlefish/vsoc_x86_64/big_phone/android-info.txt com o seguinte:

      config=big_phone