Cuttlefish:创建自定义设备

本页面介绍了如何创建自定义 Cuttlefish 设备。Cuttlefish 包括不同外形规格的预定义设备类型,如 AndroidProducts.mk 中所列。除了添加新设备中介绍的常规设备自定义选项之外,您还可以进行特定于 Cuttlefish 的自定义设置,例如虚拟设备主板配置预设(vsoc_x86_64、vsoc_arm64、vsoc_riscv64)、内核预构建、启动加载程序预构建、供应商属性、系统配置、嵌套虚拟化支持和显示选项。如需查看可以自定义的所有构建时参数的完整列表,请参阅 device/google/cuttlefish/vsoc_x86_64/phone/aosp_cf.mk

以下步骤介绍了如何创建虚构的 x86-64 big_phone 设备,其尺寸是普通 Cuttlefish 设备的十倍。

从现有目标继承

要从现有目标继承

  • 创建一个 device/google/cuttlefish/vsoc_x86_64/big_phone 目录。
  • 在该目录中创建一个 aosp_cf.mk 文件。
$(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)

添加 lunch 目标

lunch 目标插入到 device/google/cuttlefish/AndroidProducts.mk 文件中

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

定义 JSON 配置

要启动 Cuttlefish 设备,请创建一个名为 big_phone.json 的 JSON 配置文件,该文件具有表示设备属性的层次结构。例如,在 JSON 配置文件中,您可以指定诸如为虚拟机分配的 RAM 和显示配置之类的选项。此文件不必位于 AOSP 树中。如需详细了解配置的 JSON 格式,请参阅规范配置

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

要启动配置,请运行

cvd create --config_file=big_phone.json

运行 launch_cvd(旧版)

某些配置属性在分层 JSON 配置格式中不可用。对于此类配置,您可以从单级 JSON 字典中设置 launch_cvd 标志默认值。如需查看所有配置选项的完整列表,请参阅 cf_flags_validator.cpp

以下内容介绍了如何使用 JSON 配置文件覆盖 launch_cvd 标志选项的默认值,并使 Cuttlefish 启动器能够启动自定义配置的示例。

  1. 创建一个 JSON 配置文件,device/google/cuttlefish/shared/config/config_big_phone.json,其中包含自定义值。

    {
      "x_res": 7200,
      "y_res": 12800,
      "dpi": 320,
      "memory_mb": 40960,
      "ddr_mem_mb": 49150,
    }
    
  2. 为了让 Cuttlefish 启动器启动 big_phone 配置,请确保它可以访问 device/google/cuttlefish/shared/config/config_big_phone.json 文件,方法是执行以下操作:

    1. 通过在 device/google/cuttlefish/shared/config/Android.bp 文件中添加 prebuilt_etc_host stanza,将 JSON 工件声明为构建工件。

      prebuilt_etc_host {
          name: "cvd_config_big_phone.json",
          src: "config_big_phone.json",
          sub_dir: "cvd_config",
      }
      
    2. 通过在 device/google/cuttlefish/shared/device.mk 中运行以下命令,将生成的构建工件声明添加到 Cuttlefish 启动器中。

      $(call soong_config_append,cvd,launch_configs,cvd_config_big_phone)
      
    3. 创建一个 android_info.txt 文件,并通过将以下行添加到 device/google/cuttlefish/vsoc_x86_64/big_phone/aosp_cf.mk 中,将 big_phone 配置与该文件关联起来

      TARGET_BOARD_INFO_FILE := device/google/cuttlefish/vsoc_x86_64/<var>big_phone</var>/android-info.txt
      
    4. 通过使用以下内容填充 device/google/cuttlefish/vsoc_x86_64/big_phone/android-info.txt,使用 big_phone 配置标记设备类型

      config=big_phone