הטמעת USB HAL

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

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

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

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

‫HAL ו-Treble

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

במסגרת מודל Treble שהוצג גם ב-Android 8.0, כל ה-HAL מבודדים משירותי המערכת וצריכים לפעול בדמונים המקוריים שלהם. כך לא נדרש דמון USB בלעדי, כי שכבת ה-HAL משמשת גם כדמון USB.

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

הטמעה

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