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 do dispositivo descritas em Adicionar um novo dispositivo, é possível fazer personalizações específicas do Cuttlefish, como predefinições de configuração de placa de dispositivo virtual (vsoc_x88_64, vsoc_arm64, vsoc_riscv64), pré-criações de kernel, pré-criações de carregador de inicialização, propriedades do fornecedor, configurações do sistema, suporte a virtualização aninhada e opções de exibição. Para conferir 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 big_phone x86-64 fictício dez vezes maior que um dispositivo Cuttlefish comum.

Herdar de um destino existente

Para herdar de um destino atual:

  • Crie um diretório device/google/cuttlefish/vsoc_x86_64/big_phone.
  • 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 objetivo de almoç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 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 represente as propriedades do dispositivo. Por exemplo, no arquivo de configuração JSON, é possível 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, defina valores padrão da sinalização launch_cvd a partir 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.

Confira abaixo um exemplo de como substituir os valores padrão das opções de flag launch_cvd usando um arquivo de configuração JSON e permitir que a tela de início do Cuttlefish inicie 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 a tela de início do Cuttlefish inicie a configuração big_phone, verifique se ela tem acesso ao arquivo device/google/cuttlefish/shared/config/config_big_phone.json fazendo o seguinte:

    1. Declare o artefato JSON como um artefato de build adicionando a estrofe prebuilt_etc_host ao 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 iniciador 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. Rotule 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