Cuttlefish: יצירת מכשיר מותאם אישית

במאמר הזה מוסבר איך ליצור מכשיר Cuttlefish בהתאמה אישית. ‫Cuttlefish כולל סוגי מכשירים מוגדרים מראש בגורמי צורה שונים, כמו שמופיע ב-AndroidProducts.mk. בנוסף לאפשרויות ההתאמה האישית הכלליות של המכשיר שמתוארות במאמר הוספת מכשיר חדש, אפשר לבצע התאמות אישיות ספציפיות ל-Cuttlefish, כמו הגדרות קבועות מראש של לוח מכשיר וירטואלי (vsoc_x86_64, ‏ vsoc_arm64,‏ vsoc_riscv64), קבצים בינאריים מוכנים מראש של ליבת מערכת ההפעלה, קבצים בינאריים מוכנים מראש של טוען האתחול, מאפייני ספק, הגדרות מערכת, תמיכה בווירטואליזציה מקוננת ואפשרויות תצוגה. רשימה מלאה של הפרמטרים של משך זמן של תהליך build שאפשר להתאים אישית מופיעה במאמר 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 לקובץ device/google/cuttlefish/AndroidProducts.mk:

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

הגדרת JSON

כדי להפעיל את מכשיר Cuttlefish, יוצרים קובץ הגדרות JSON בשם big_phone.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.

בדוגמה הבאה מוסבר איך לשנות את ערכי ברירת המחדל של אפשרויות הדגל launch_cvd באמצעות קובץ הגדרה בפורמט JSON, ואיך להפעיל את Cuttlefish Launcher כדי להפעיל את ההגדרה המותאמת אישית.

  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. מגדירים את ארטיפקט ה-JSON כארטיפקט של בנייה על ידי הוספת פסקה prebuilt_etc_host בקובץ 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. כדי להוסיף את הצהרת ארטיפקט הבנייה שנוצר ל-Cuttlefish Launcher, מריצים את הפקודה הבאה ב-device/google/cuttlefish/shared/device.mk.

      $(call soong_config_append,cvd,launch_configs,cvd_config_big_phone)
      
    3. יוצרים קובץ android_info.txt ומקשרים את ההגדרה big_phone לקובץ על ידי הוספת השורה הבאה לקובץ 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. מזינים את סוג המכשיר בתווית big_phone config על ידי מילוי device/google/cuttlefish/vsoc_x86_64/big_phone/android-info.txt בהגדרות הבאות:

      config=big_phone