ConfigStore HAL

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

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

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

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

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

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

עיצוב ConfigStore HAL

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

עיצוב HAL של Configstore

עיצוב האיור 1. ConfigStore HAL

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

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

שיקולי אבטחה

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