הטמעת USB HAL

מהדורת אנדרואיד 8.0 מעבירה את הטיפול בפקודות USB מתוך סקריפטים של init אל דמון USB מקורי עבור תצורה ואמינות קוד טובים יותר. עבור תצורת פונקציית הגאדג'ט, נעשה שימוש בסקריפטים init (טריגרים של מאפיינים) לביצוע פעולות גאדג'ט ספציפיות למכשיר.

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

  1. פעולות כגון כתיבה לצמתי sysfs של הליבה עלולות להיכשל אך לא להיות מופצות בחזרה לקוד ה-frameswork שקובע את טריגר המאפיין. כתוצאה מכך, מסגרות מניחות בטעות שהמבצעים הצליחו למרות שנכשלו בשקט.
  2. לסקריפטים init יש מספר מוגבל של פעולות שניתן לבצע.

מהדורת אנדרואיד 12 מוסיפה תמיכה ב-USB Gadget HAL עבור דגמי בקרת רשת (NCM) וקריאות API המחזירות גם את מספר גרסת HAL וגם את מהירות ה-USB. למידע נוסף על קריאות ה-API הזמינות דרך ה-USB HAL, עיין בסיכום החבילה android.hardware.usb .

HAL וטרבל

סקריפטי init הספציפיים למכשיר שימשו כתחליף לשכבות HAL לביצוע פעולות USB ספציפיות למכשיר. USB (דרך ADB) הוא ממשק ראשי לאיתור בעיות במערכת. קיום דמון מקורי לביצוע תצורת USB מבטלת את התלות בקוד המסגרת כך שגם אם המסגרת קורסת ה-USB אמור לפעול.

תחת מודל ה- Treble שהוצג גם באנדרואיד 8.0, כל ה-HALs מבודדים משירותי מערכת ונדרשים לפעול בדמונים מקוריים משלהם. זה מבטל את הדרישה להחזיק דמון USB בלעדי שכן שכבת HAL משמשת יפה כמו דמון USB.

יישום ברירת המחדל של HAL מטפל בכל מכשירי טרום אנדרואיד 8.0. לכן, לא תהיה עבודה ספציפית למכשיר עבור מכשירי טרום אנדרואיד 8.0. אנדרואיד 8.0 משתמשת בממשק HAL כדי לשאול את הסטטוס של יציאות USB ולבצע החלפת תפקידי נתונים וכוח.

יישום

יש ליישם ממשק USB HAL חדש בכל מכשיר המופעל ב-Android 8.0. יישום ברירת המחדל צריך לטפל במכשירים טרום אנדרואיד 8.0. יישום ברירת המחדל מספיק אם המכשיר משתמש במחלקה dual_role_usb כדי לדווח על סטטוס יציאה מסוג C. ייתכן שיידרשו שינויים טריוויאליים בסקריפטים של USB ספציפיים למכשיר כדי להעביר את הבעלות על צמתי ה-typc-c למערכת.