Cuttlefish: Crea un dispositivo personalizado

En esta página, se describe cómo crear un dispositivo Cuttlefish personalizado. Cuttlefish incluye tipos de dispositivos predefinidos en diferentes factores de forma, como se indica en AndroidProducts.mk. Además de las opciones generales de personalización del dispositivo que se describen en Cómo agregar un dispositivo nuevo, puedes realizar personalizaciones específicas de Cuttlefish, como los ajustes predeterminados de configuración de la placa del dispositivo virtual (vsoc_x86_64, vsoc_arm64, vsoc_riscv64), las compilaciones previas del kernel, las compilaciones previas del cargador de arranque, las propiedades del proveedor, las configuraciones del sistema, la compatibilidad con la virtualización anidada y las opciones de pantalla. Para obtener una lista completa de los parámetros de tiempo de compilación que se pueden personalizar, consulta device/google/cuttlefish/vsoc_x86_64/phone/aosp_cf.mk.

En los siguientes pasos, se describe cómo crear un dispositivo big_phone ficticio x86-64 diez veces más grande que un dispositivo Cuttlefish común.

Cómo heredar de un destino existente

Para heredar de un destino existente, haz lo siguiente:

  • Crea un directorio device/google/cuttlefish/vsoc_x86_64/big_phone.
  • Crea un archivo aosp_cf.mk en ese directorio.
$(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)

Agrega un objetivo de almuerzo

Inserta el destino lunch en el archivo device/google/cuttlefish/AndroidProducts.mk:

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

Define la configuración de JSON

Para iniciar el dispositivo Cuttlefish, crea un archivo de configuración JSON llamado big_phone.json con una estructura jerárquica que represente las propiedades del dispositivo. Por ejemplo, en el archivo de configuración JSON, puedes especificar opciones como la RAM asignada a la VM y la configuración de pantalla. Este archivo no tiene que estar en el árbol de AOSP. Para obtener detalles sobre el formato JSON de las configuraciones, consulta Configuraciones canónicas.

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

Para iniciar la configuración, ejecuta el siguiente comando:

cvd create --config_file=big_phone.json

Ejecuta launch_cvd (versión heredada)

Algunas propiedades de configuración no están disponibles en el formato de configuración JSON jerárquico. Para esas configuraciones, puedes establecer valores predeterminados de la marca launch_cvd desde un diccionario JSON de un solo nivel. Para obtener una lista completa de todas las opciones de configuración, consulta cf_flags_validator.cpp.

A continuación, se describe un ejemplo de cómo anular los valores predeterminados de las opciones de la marca launch_cvd con un archivo de configuración JSON y habilitar el selector de Cuttlefish para iniciar la configuración personalizada.

  1. Crea un archivo de configuración JSON, device/google/cuttlefish/shared/config/config_big_phone.json, con valores personalizados.

    {
      "x_res": 7200,
      "y_res": 12800,
      "dpi": 320,
      "memory_mb": 40960,
      "ddr_mem_mb": 49150,
    }
    
  2. Para que el lanzador de Cuttlefish inicie la configuración de big_phone, asegúrate de que tenga acceso al archivo device/google/cuttlefish/shared/config/config_big_phone.json. Para ello, haz lo siguiente:

    1. Declara el artefacto JSON como un artefacto de compilación agregando la sección prebuilt_etc_host en el archivo 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. Para agregar la declaración del artefacto de compilación resultante al iniciador de Cuttlefish, ejecuta lo siguiente en device/google/cuttlefish/shared/device.mk.

      $(call soong_config_append,cvd,launch_configs,cvd_config_big_phone)
      
    3. Crea un archivo android_info.txt y vincula la configuración de big_phone al archivo agregando la siguiente línea 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. Etiqueta el tipo de dispositivo con la configuración de big_phone completando device/google/cuttlefish/vsoc_x86_64/big_phone/android-info.txt con lo siguiente:

      config=big_phone