Cuttlefish: Cómo crear 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 la personalización general del dispositivo, opciones descritas en Agregando un nuevo dispositivo, puedes hacer Personalizaciones específicas de Cuttlefish, como la placa de dispositivo virtual ajustes predeterminados de configuración (vsoc_x88_64, vsoc_arm64, vsoc_riscv64), compilaciones previas del kernel, bootloaders compilados previamente, propiedades del proveedor, configuraciones del sistema, datos anidados asistencia de virtualización y opciones de visualización. 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 x86-64 ficticio big_phone dispositivo diez veces el tamaño de un dispositivo común dispositivo Cuttlefish.

Heredar de un destino existente

Para heredar de un destino existente, sigue estos pasos:

  • Crea un 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)

Agregar 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 representa 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 pantalla configuración. No es necesario que este archivo esté en el árbol de AOSP. Para obtener detalles sobre el formato JSON para la configuración, 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 start --config_file=big_phone.json

Ejecuta launch_cvd (heredado)

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

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

  1. Crear 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 selector de Cuttlefish inicie la configuración de big_phone, asegúrate de que acceso a la device/google/cuttlefish/shared/config/config_big_phone.json de la siguiente manera:

    1. Para declarar el artefacto JSON como artefacto de compilación, agrega el elemento prebuilt_etc_host estrofa en 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. Agrega la declaración del artefacto de compilación resultante a Cuttlefish. selector ejecutando 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 a la agregando la siguiente línea al archivo 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. Propaga los datos para etiquetar el tipo de dispositivo con la configuración de big_phone. device/google/cuttlefish/vsoc_x86_64/big_phone/android-info.txt con lo siguiente:

      config=big_phone