Google is committed to advancing racial equity for Black communities. See how.
דף זה תורגם על ידי Cloud Translation API.
Switch to English

ConfigStore HAL

אנדרואיד 8.0 מחלק את מערכת ההפעלה אנדרואיד מונוליטית למחיצות כלליות ( system.img ) וחומרה ספציפית ( vendor.img ו- odm.img ). כתוצאה משינוי זה, יש להסיר אוסף מותנה ממודולים המותקנים למחיצת המערכת ועל מודולים כאלה לקבוע את תצורת המערכת בזמן הריצה (ולהתנהג אחרת בהתאם לתצורה זו).

ה- HAL של ConfigStore מספק קבוצה של ממשקי API לגישה לפריטי תצורה לקריאה בלבד המשמשים להגדרת תצורת מסגרת Android. דף זה מתאר את העיצוב של ConfigStore HAL (ומדוע לא נעשה שימוש במאפייני מערכת למטרה זו); דפים אחרים בסעיף זה מפרטים את ממשק ה- HAL , יישום השירות והשימוש בצד הלקוח , והכל משתמשים surfaceflinger לעזרה בשיעורי ממשק ConfigStore, ראה הוספת כיתות ממשק ופריטים .

מדוע לא להשתמש במאפייני מערכת?

שקלנו להשתמש במאפייני מערכת אך מצאנו כמה סוגיות מהותיות, כולל:

  • מגבלות אורך על ערכים. למאפייני המערכת יש מגבלות הדוקות על אורך הערכים שלהם (92 בתים). בנוסף, מכיוון שמגבלות אלו נחשפו ישירות לאפליקציות אנדרואיד כמקרו C, הגדלת האורך עלולה לגרום לבעיות תאימות לאחור.
  • אין תמיכה מסוג. כל הערכים הם למעשה מחרוזות, ו- API פשוט מנתח את המחרוזת לתוך int או bool . סוגי נתונים מורכבים אחרים (למשל, מערך ומבנה) צריכים להיות מקודדים / מפוענחים על ידי הלקוחות (לדוגמא, ניתן לקודד "aaa,bbb,ccc" כמערך של שלוש מחרוזות).
  • מחליף. מכיוון שמאפייני מערכת לקריאה בלבד מיושמים כמאפיינים של כתיבה פעם אחת, ספקים / ODM שרוצים לעקוף ערכי קריאה בלבד המוגדרים על ידי AOSP חייבים לייבא את ערכי הקריאה בלבד שלהם לפני ערכי קריאה בלבד המוגדרים באמצעות AOSP. זה, בתורו, גורם לערכים המוגדרים על ידי ספק מוגדרים על ידי ערכים המוגדרים על ידי AOSP.
  • התייחס לדרישות שטח. מאפייני המערכת תופסים כמות גדולה יחסית של שטח כתובות בכל תהליך. מאפייני מערכת מקובצים ביחידות prop_area בגודל קבוע של 128 קילו-בתים, אשר כולן מוקצות למרחב כתובות תהליך אפילו אם ניגשים רק למאפיין מערכת יחיד בו. זה יכול לגרום לבעיות במכשירים של 32 סיביות שבהם שטח הכתובת יקר.

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

עיצוב HAL של ConfigStore

העיצוב הבסיסי פשוט:

עיצוב HAL של קונפיגסטור

איור 1. עיצוב HAL של ConfigStore

  • תאר דגלי בנייה (המשמשים כיום להרכבת המסגרת המותנית) ב- HIDL.
  • ספקים ו- OEM מספקים ערכי SoC וספציפיים למכשירים עבור דגלי בנייה על ידי יישום שירות HAL.
  • שנה את המסגרת כדי להשתמש בשירות HAL כדי למצוא את הערך של פריט תצורה בזמן הריצה.

פריטי תצורה שמפנים כעת למסגרת כלולים בחבילת HIDL גרסתית ( android.hardware.configstore@1.0 ). ספקים / יצרני ציוד מקורי מספקים ערכים לפריטי התצורה על ידי הטמעת ממשקים בחבילה זו, והמסגרת משתמשת בממשקים כאשר היא צריכה לקבל ערך לפריט תצורה.

שיקולי ביטחון

דגלי בנייה המוגדרים באותו ממשק מושפעים מאותה מדיניות SELinux. אם על דגל בנייה אחד או יותר להיות בעל מדיניות SELinux שונה, עליהם להיות מופרדים לממשק אחר . זה יכול לדרוש תיקון משמעותי של android.hardware.configstore package מכיוון שהממשקים המופרדים אינם תואמים עוד לאחור.