משאבים נוספים

קל לארגן דפים בעזרת אוספים אפשר לשמור ולסווג תוכן על סמך ההעדפות שלך.

המשאבים הבאים מספקים פרטים על מיקומי קוד, כלים, בדיקות ורישוי.

מיקום קוד שניתן לשאילתה

הקוד עבור אובייקט ממשק הספק הניתן לשאילתה עובר אל system/libvintf .

קבצי מניפסט בכתב יד ומטריצות תאימות יכולות להיות קשות. השתמש בכלים הבאים כדי ליצור מניפסט/מטריצת תאימות ללוח כדי להתחיל ממנה.

לש"ל

LSHAL הוא כלי בצד המכשיר המפרט את כל ה-HALs הרשומים ל- hwservicemanager ואת כל יישומי המעבר הזמינים (למשל android.hardware.foo@1.0-impl.so ) במכשיר. זה יכול גם ליצור קובץ מניפסט של מכשיר המבוסס על הרשימה:

adb shell su 0 /system/bin/lshal --init-vintf

שימו לב לדברים הבאים:

  1. אם חבילה רשומה גם ב- hwservicemanager וגם נמצאת כ-HAL מעבר, <transport> מוגדר hwbinder .
  2. שום גרסת SELinux לא נכתבת במניפסט. מומלץ להזריק את האלמנט דרך assemble_vintf כפי שמוסבר להלן.
  3. ייתכן שקובץ המניפסט של HAL שנוצר אינו מדויק. נדרשת תשומת לב אנושית כדי לתקן חוסר עקביות בין מניפסט המכשיר לבין מה vendor.img מספק בפועל.

ASSEMBLE_VINTF

assemble_vintf הוא כלי בצד המארח ש:

  1. מאמת שמטריצת תאימות או קובץ מניפסט חוקיים.
  2. מזריק משתנים למניפסטים/מטריצות תאימות הזמינות בזמן הבנייה ויוצר קובץ חדש שאמור להיות מותקן במכשיר.
  3. בודק תאימות בין הקובץ שנוצר לכפול שלו.
  4. אם ניתן קובץ מניפסט, יוצר באופן אופציונלי מטריצת תאימות ל-boilerplate התואמת לקובץ המניפסט.

דוגמה: צור מטריצת תאימות מכשירים מקובץ מניפסט מסגרת

assemble_vintf -m --hals-only \
    -i system/libhidl/manifest.xml \
    -o device/manufacturer/device_name/compatibility_matrix.xml

שים לב שכל ה-HALs מוגדרים ל- optional="true" .

דוגמה: צור מטריצת תאימות למסגרת שלד מקובץ מניפסט של מכשיר

assemble_vintf -m --hals-only \
    -i device/foo/bar/manifest.xml \
    -o path/to/place/output/compatibility_matrix.xml

שים לב שכל ה-HALs מוגדרים ל- optional="true" .

דוגמה: צור קובצי XML של מניפסט התקן ממשתנים

בזמן הבנייה, אם המשתנים הבאים מוגדרים ב- device/manufacturer/device_name/BoardConfig.mk :

# Vendor manifest is named DEVICE_MANIFEST_FILE for legacy reasons.
DEVICE_MANIFEST_FILE := \
    device/manufacturer/device_name/vendor_manifest.xml
ODM_MANIFEST_FILES := \
    device/manufacturer/device_name/odm_manifest.xml
ODM_MANIFEST_SKUS := sku1 sku2
ODM_MANIFEST_SKU1_FILES := \
    device/manufacturer/device_name/odm_manifest_sku1.xml
ODM_MANIFEST_SKU2_FILES := \
    device/manufacturer/device_name/odm_manifest_sku2.xml

לאחר מכן מבוצעות הפקודות הבאות (במערכת ה-build, ששונו כדי להשמיט פרטי יישום) כדי ליצור קובצי XML של מניפסט של המכשיר:

# vendor manifest; only when DEVICE_MANIFEST_FILE is set
BOARD_SEPOLICY_VERS=$(BOARD_SEPOLICY_VERS) assemble_vintf \
    $(addprefix,-i ,$(DEVICE_MANIFEST_FILE)) \
    -o $(TARGET_OUT_VENDOR)/etc/vintf/manifest.xml

# ODM manifests
assemble_vintf \
    $(addprefix,-i ,$(ODM_MANIFEST_FILES)) \
    -o $(TARGET_OUT_ODM)/etc/vintf/manifest.xml

# ODM manifests for each sku
assemble_vintf \
    $(addprefix,-i ,$(ODM_MANIFEST_SKU1_FILES)) \
    -o $(TARGET_OUT_ODM)/etc/vintf/manifest_sku1.xml
assemble_vintf \
    $(addprefix,-i ,$(ODM_MANIFEST_SKU2_FILES)) \
    -o $(TARGET_OUT_ODM)/etc/vintf/manifest_sku2.xml

בזמן ריצה, אובייקט VINTF משלב מניפסטים של ספקים ומניפסטים של ODM כמניפסט המכשיר. ראה מניפסט מכשיר לפרטים.

דוגמה: צור קובצי XML של מטריצת תאימות מכשירים ממשתנים

בזמן הבנייה, אם המשתנים הבאים מוגדרים ב- device/manufacturer/device_name/BoardConfig.mk :

# vendor compatibility matrix is named DEVICE_MATRIX_FILE for legacy reasons.
DEVICE_MATRIX_FILE := \
    device/manufacturer/device_name/vendor_compatibility_matrix.xml \
    device/manufacturer/device_name/vendor_compatibility_matrix_additional.xml

לאחר מכן מבוצעות הפקודות הבאות (במערכת ה-build, ששונו כדי להשמיט פרטי יישום) כדי ליצור קובצי XML של מטריצת תאימות למכשיר:

# vendor compatibility matrix; only when DEVICE_MATRIX_FILE is set
assemble_vintf \
    $(addprefix,-i ,$(DEVICE_MATRIX_FILE)) \
    -o $(TARGET_OUT_VENDOR)/etc/vintf/compatibility_matrix.xml

בזמן ריצה, אובייקט VINTF משתמש במטריצת תאימות הספק כמטריצת תאימות ההתקן. ראה מטריצת תאימות התקן לפרטים.

דוגמה: צור קובצי XML של מניפסט מסגרת מתוך משתנים

המשתנים הבאים עשויים להיות מוגדרים ב- device/manufacturer/device_name/BoardConfig.mk :

# Device-specific system manifest is named DEVICE_FRAMEWORK_MANIFEST_FILE for legacy reasons
DEVICE_FRAMEWORK_MANIFEST_FILE := \
    device/manufacturer/device_name/device_system_manifest.xml

# Product manifest
PRODUCT_MANIFEST_FILES := \
    device/manufacturer/device_name/product_manifest.xml

הפקודות הבאות מבוצעות (במערכת ה-build, שונו כדי להשמיט את פרטי הטמעה) כדי ליצור קובצי XML של Manifest Framework:

# system manifest
assemble_vintf \
    -i system/libhidl/vintfdata/manifest.xml \
    $(addprefix,-i ,$(DEVICE_FRAMEWORK_MANIFEST_FILE)) \
    -o $(TARGET_OUT)/etc/vintf/manifest.xml

# product manifest
assemble_vintf \
    $(addprefix,-i ,$(PRODUCT_MANIFEST_FILES)) \
    -o $(TARGET_OUT_PRODUCT)/etc/vintf/manifest.xml

בזמן ריצה, אובייקט VINTF משלב את מניפסט המערכת, קטעי מניפסט מערכת, מניפסט מוצר ומקטעי מניפסט מוצר כמניפסט המסגרת. ראה מניפסט מסגרת לפרטים.

דוגמה: צור קובצי XML של מטריצת תאימות למסגרת ממשתנים

המשתנים הבאים עשויים להיות מוגדרים ב- device/manufacturer/device_name/BoardConfig.mk כדי להגדיר את ה-FCM של המוצר ואת מערכת ה-FCM הספציפית למכשיר:

DEVICE_PRODUCT_COMPATIBILITY_MATRIX_FILE := \
    device/manufacturer/device_name/product_compatibility_matrix.xml
# Device-specific system compatibility matrix is named
# DEVICE_FRAMEWORK_COMPATIBILITY_MATRIX_FILE for legacy reasons.
DEVICE_FRAMEWORK_COMPATIBILITY_MATRIX_FILE := \
    device/manufacturer/device_name/device_system_compatibility_matrix.xml

יש להתקין את FCM system_ext עם מודולי Soong. המוצר FCM עשוי להיות מותקן גם עם מודולי Soong; אל תגדיר DEVICE_PRODUCT_COMPATIBILITY_MATRIX_FILE אם נעשה שימוש בשיטה זו. בנוסף, ניתן להתקין מספר גרסאות FCM של מוצר וגרסאות system_ext FCM עם מודולי Soong. הגדר את הדברים הבאים:

  • הגדר מודול ב- device/manufacturer/device_name/Android.bp . לדוגמה (החלף system_ext במוצר עבור מוצר FCM):
    vintf_compatibility_matrix {
        name: "system_ext_compatibility_matrix.xml",
        stem: "compatibility_matrix.xml",
        system_ext_specific: true,
        // product_specific: true, // for product FCM
        srcs: [
            "system_ext_compatibility_matrix.xml",
        ],
    }
    
  • התקן את המודול ל- device/manufacturer/device_name/device.mk . לדוגמה:
    PRODUCT_PACKAGES += system_ext_compatibility_matrix.xml
    

הפקודות הבאות מבוצעות (במערכת ה-build, שונו כדי להשמיט פרטי יישום) כדי ליצור קבצי XML של מטריצת תאימות למסגרת:

# common system compatibility matrix for each FCM version
BOARD_SEPOLICY_VERS=$(BOARD_SEPOLICY_VERS) \
POLICYVERS=$(POLICYVERS) \
BOARD_AVB_VBMETA_VERSION=$(BOARD_AVB_VBMETA_VERSION)
assemble_vintf \
    -i hardware/interfaces/compatibility_matrices/compatibility_matrix.empty.xml
    $(addprefix,-i ,$(DEVICE_FRAMEWORK_COMPATIBILITY_MATRIX_FILE)) \
    -o $(TARGET_OUT)/etc/vintf/compatibility_matrix.device.xml

# framework compatibility matrixes at each FCM version
assemble_vintf
    -i hardware/interfaces/compatibility_matrices/compatibility_matrix.{level}.xml \
    -o $(TARGET_OUT)/etc/vintf/compatibility_matrix.{level}.xml \
    --kernel=...

# product framework compatibility matrix; only when
# DEVICE_PRODUCT_COMPATIBILITY_MATRIX_FILE is set or when the Soong module for
# product FCM is defined
assemble_vintf
    -i $(DEVICE_PRODUCT_COMPATIBILITY_MATRIX_FILE)
    -o $(TARGET_OUT_PRODUCT)/etc/vintf/compatibility_matrix.xml

# system_ext framework compatibility matrix; only when the Soong module for
# system_ext FCM is defined
assemble_vintf
    -i <srcs for the soong module>
    -o $(TARGET_OUT_SYSTEM_EXT)/etc/vintf/compatibility_matrix.xml

בזמן ריצה, אובייקט VINTF משלב תת-קבוצה של מטריצות תאימות מערכת ומטריצות תאימות מוצרים כמטריצת תאימות מסגרת. ראה מטריצת תאימות מסגרת לפרטים.

דוגמה: הפק את המניפסט של הספק מקטעים

ניתן לאגד קטעי מניפסט מרובים של ספקים בזמן הבנייה. לדוגמה:

<!-- device/manufacturer/device_name/manifest_common.xml -->
<manifest version="1.0" type="device">
    <!-- common HALs here -->
</manifest>
<!-- device/manufacturer/device_name/ir.xml -->
<manifest version="1.0" type="device">
    <hal>
        <name>android.hardware.ir</name>
        <version>1.0</version>
        <!-- other fields -->
    </hal>
</manifest>
# device/manufacturer/device_name/BoardConfig.mk
DEVICE_MANIFEST_FILE := device/manufacturer/device_name/manifest_common.xml
ifdef BOARD_ENABLE_IR
    DEVICE_MANIFEST_FILE += device/manufacturer/device_name/ir.xml
endif

לאחר מכן, assemble_vintf מוסיף את ה-IR HAL למניפסט הספק אם BOARD_ENABLE_IR מוגדר, ומשמיט אותו אם BOARD_ENABLE_IR אינו מוגדר. הפקודות הבאות (שונו כדי להשמיט פרטי יישום) מבוצעות כדי ליצור את המניפסט של הספק:

# if BOARD_ENABLE_IR is defined
BOARD_SEPOLICY_VERS=10000.0 assemble_vintf \
    -i device/manufacturer/device_name/manifest_common.xml:device/manufacturer/device_name/ir.xml \
    -o $(TARGET_OUT_VENDOR)/manifest.xml

# if BOARD_ENABLE_IR is not defined
BOARD_SEPOLICY_VERS=10000.0 assemble_vintf \
    -i device/manufacturer/device_name/manifest_common.xml \
    -o $(TARGET_OUT_VENDOR)/manifest.xml

לפרטים, ראה:

assemble_vintf --help

בדיקה

פרויקט platform/system/libvintf משתמש ב- GTest לביצוע סדרה, דה-סריאליזציה ובדיקת תאימות.

רישוי

  • tinyxml2 (חיצוני/tinyxml2) להסדרת/ביטול סדרה של האובייקט אל/מ-XML. רישיון דמוי BSD.
  • libselinux (external/selinux/libselinux) לקבלת גרסת policydb. רישיון נחלת הכלל.
  • libz (external/zlib) לביטול הדחיסה /proc/config.gz . רישיון דמוי BSD.
  • פרויקט libvintf משתמש ברישיון Apache 2.0 (עם קבצי MODULE_LICENSE_APACHE2 ו- NOTICE מתאימים).