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 לקובץ 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. בהגדרות כאלה, אפשר להגדיר ערכי ברירת מחדל של launch_cvd flag ממילון JSON ברמה אחת. רשימה מלאה של כל אפשרויות ההגדרה זמינה במאמר 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. כדי להוסיף את ההצהרה של ארטיפקט ה-build שנוצר למפעיל של Cuttlefish, מריצים את הפקודה הבאה ב-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