ב-Android 11, כל הקוד של healthd
עובר ארגון מחדש
את libhealthloop
ואת libhealth2impl
, ואז שונתה כדי להטמיע את Health@2.1
HAL. שתי הספריות האלה מקושרות באופן סטטי על ידי health@2.0-impl-2.1
,
הטמעת ההעברה של Health 2.1. הספריות המקושרות באופן סטטי
לאפשר ל-health@2.0-impl-2.1
לבצע את אותן העבודה כמו healthd
, למשל
healthd_mainloop
וסקרים. באתחול, health@2.1-service
רושם
של הממשק IHealth
עד hwservicemanager
. בזמן השדרוג
מכשירים עם Android מגרסה 8.x או 9
תמונה של הספק ו-framework של Android 11
יכול להיות שתמונת הספק לא מספקת את השירות Health@2.1. אחורה
תאימות לתמונות ישנות של ספק
לוח הזמנים להוצאה משימוש.
כדי להבטיח תאימות לאחור:
healthd
מבצע רישום שלIHealth
ל-hwservicemanager
למרות שהוא מערכת דימון.IHealth
מתווסף למניפסט של המערכת, עם שם המכונה 'גיבוי'.- פלטפורמת ה-framework ו-
storaged
מתקשרים עםhealthd
באמצעותhwbinder
במקוםbinder
. - הקוד של framework ו-
storaged
משתנים כדי לאחזר את המכונה 'ברירת מחדל' אם זמין, ואז 'גיבוי'.- קוד הלקוח של C++ משתמש בלוגיקה שהוגדרה ב-
libhealthhalutils
. - קוד הלקוח של Java משתמש בלוגיקה שהוגדרה ב-
HealthServiceWrapper
.
- קוד הלקוח של C++ משתמש בלוגיקה שהוגדרה ב-
- אחרי שהגישה ל-IHealth/ברירת המחדל היא רחבה, ותמונות של ספקי Android 8.1 זמינות
הוצאו משימוש, אפשר לצאת משימוש ב-IHealth/backup וב-
healthd
. לקבלת מידע נוסף פרטים נוספים זמינים במאמר הוצאה משימוש של Health@1.0.
משתני build ספציפיים ללוח עבור תקינות
BOARD_PERIODIC_CHORES_INTERVAL_*
הם משתנים ספציפיים ללוח שמשמשים לפיתוח
healthd
. כחלק מחלוקת ה-build של המערכת/הספק, ערכים ספציפיים ללוח
לא ניתן להגדיר למודולים של המערכת. בעבר הערכים האלה בוטלו
בפונקציה healthd_board_init
שהוצאה משימוש.
ב-Health@2.1, ספקים יכולים לשנות
שני הערכים התקופתיים של מרווחי המטלות במבנה healthd_config
לפני
מועברים ל-constructor של סיווג ההטמעה בתחום הבריאות. הבריאות
סוג ההטמעה אמור לקבל בירושה
android::hardware::health::V2_1::implementation::Health
הטמעת שירות Health 2.1
מידע נוסף על הטמעת שירות Health 2.1 זמין בכתובת hardware/interfaces/health/2.1/README.md.
לקוחות בתחום הבריאות
Health@2.x כוללת את הלקוחות הבאים:
- מטען. השימוש בקוד
libbatterymonitor
ובקודhealthd_common
הוא מוקף ב-health@2.0-impl
. - לשחזור. הקישור אל
libbatterymonitor
קשורhealth@2.0-impl
. כל השיחות אלBatteryMonitor
יוחלפו על ידי שיחות אל סיווג ההטמעהHealth
. סוללה Manager.
BatteryManager.queryProperty(int id)
היה היחיד לקוח שלIBatteryPropertiesRegistrar.getProperty
. סופק על ידיIBatteryPropertiesRegistrar.getProperty
על ידיhealthd
ונקרא ישירות את/sys/class/power_supply
.מטעמי אבטחה, אסור לאפליקציות להפעיל HAL בתחום הבריאות ישירות. ב-Android מגרסה 9 ואילך, קלסר השירות
IBatteryPropertiesRegistrar
מסופק על ידיBatteryService
במקוםhealthd
.BatteryService
הוענקה גישה לשיחה ל-HAL בתחום הבריאות כדי לאחזר את המידע המבוקש.סוללה. ב-Android מגרסה 9 ואילך, האפליקציה
BatteryService
משתמשת בפונקציהHealthServiceWrapper
כדי לקבוע אם להשתמש ברירת המחדל למופע של שירות הבריאות מ-vendor
או להשתמש בגיבוי אירוע של שירותי בריאות מ-healthd
. לאחר מכןBatteryService
מקשיבים למשך אירועי בריאות דרךIHealth.registerCallback
.מאוחסן. ב-Android מגרסה 9 ואילך, האפליקציה
storaged
משתמשת בפונקציהlibhealthhalutils
כדי לקבוע אם להשתמש ברירת המחדל למופע של שירות הבריאות מ-vendor
או להשתמש בגיבוי אירוע של שירותי בריאות מ-healthd
.storaged
ואז המערכת מאזינה לאירועי בריאות דרךIHealth.registerCallback
ומאחזרת פרטי האחסון.
שינויים ב-SELinux
HAL Health@2.1 כולל את השינויים הבאים ב-SELinux בפלטפורמה:
- הוספה של
android.hardware.health@2.1-service
אלfile_contexts
.
במכשירים עם הטמעה משלהם, ייתכן שחלק מהשינויים ב-SELinux של הספק הנחוצים. דוגמה:
# device/<manufacturer>/<device>/sepolicy/vendor/hal_health_default.te
# Add device specific permissions to hal_health_default domain, especially
# if it links to board-specific libhealthd or implements storage APIs.
ממשקי ליבה
הדימון (daemon) של healthd
והטמעת ברירת המחדל
android.hardware.health@2.0-impl-2.1
לגשת לממשקי הליבה הבאים כדי
אחזור מידע על הסוללה:
/sys/class/power_supply/*/capacity_level
(נוספה ב-Health 2.1)/sys/class/power_supply/*/capacity
/sys/class/power_supply/*/charge_counter
/sys/class/power_supply/*/charge_full
/sys/class/power_supply/*/charge_full_design
(נוספה ב-Health 2.1)/sys/class/power_supply/*/current_avg
/sys/class/power_supply/*/current_max
/sys/class/power_supply/*/current_now
/sys/class/power_supply/*/cycle_count
/sys/class/power_supply/*/health
/sys/class/power_supply/*/online
/sys/class/power_supply/*/present
/sys/class/power_supply/*/status
/sys/class/power_supply/*/technology
/sys/class/power_supply/*/temp
/sys/class/power_supply/*/time_to_full_now
(נוספה ב-Health 2.1)/sys/class/power_supply/*/type
/sys/class/power_supply/*/voltage_max
/sys/class/power_supply/*/voltage_now
כל הטמעת HAL של בריאות ספציפית למכשיר שמשתמשת ב-libbatterymonitor
ניגש לממשקי הליבה האלה כברירת מחדל, אלא אם מבטלים אותו בהגדרות התקינות
וה-constructor של סיווג ההטמעה.
אם הקבצים האלה חסרים או שלא ניתן לגשת אליהם דרך healthd
או דרך
שירות ברירת המחדל (לדוגמה, הקובץ הוא קישור סימבולי לתיקייה ספציפית לספק).
שדוחה גישה בגלל מדיניות SELinux שאינה מוגדרת כראוי), ייתכן שהם לא
לא פועלות כראוי. לכן, ייתכן שהשינויים הנוספים ב-SELinux ספציפיים לספק
הכרחי, למרות שנעשה שימוש בהטמעת ברירת המחדל.
חלק מממשקי הליבה שמשמשים ב-Health 2.1, כמו
/sys/class/power_supply/*/capacity_level
והקבוצה
/sys/class/power_supply/*/time_to_full_now
, עשוי להיות אופציונלי. אבל, כדי
למנוע התנהגות שגויה של framework כתוצאה מחסרים ממשקי ליבה (kernel),
מומלץ לבחור בקפידה
CL 1398913
לפני הפיתוח של שירות Health HAL 2.1.
בדיקה
Android 11 כולל חדשות
בדיקות VTS
נכתב במיוחד עבור Health@2.1 HAL. אם במכשיר מוצהר
Health@2.1 HAL במניפסט של המכשיר צריך לעבור את בדיקות ה-VTS המתאימות.
הבדיקות נכתבות עבור מופע ברירת המחדל (כדי לוודא שהמכשיר
מממשת את ה-HAL בצורה נכונה) ואת המופע של הגיבוי (כדי לוודא ש-healthd
ממשיך לפעול כראוי לפני ההסרה).
דרישות לגבי מידע על הסוללה
חוק Health 2.0 HAL מציין כמה דרישות לממשק HAL, אבל בדיקות VTS הן רגועות יחסית באכיפה שלהן. ב-Android 11, נוספו בדיקות VTS חדשות כדי לאכוף את הדרישות הבאות במכשירים שמופעלים עם Android 11 ואילך:
- היחידות של סוללת סוללה חשמלית וזרם סוללה ממוצע חייבות להיות מיקרו-אמפרים (μA).
- הסימן של טעינה מיידית וממוצעת של הסוללה חייב להיות נכון.
ספציפית:
- הערך הנוכחי = 0 כשסטטוס הסוללה הוא
UNKNOWN
- נוכחי > 0 כשסטטוס הסוללה הוא
CHARGING
- הערך הנוכחי <= 0 כשסטטוס הסוללה הוא
NOT_CHARGING
- נוכחי < 0 כשסטטוס הסוללה הוא
DISCHARGING
- לא נאכף כשסטטוס הסוללה הוא
FULL
- הערך הנוכחי = 0 כשסטטוס הסוללה הוא
- סטטוס הסוללה חייב להיות נכון ביחס לטעינה או לא של מקור חשמל
מחובר. ספציפית:
- סטטוס הסוללה חייב להיות אחד מהערכים
CHARGING
,NOT_CHARGING
אוFULL
, אם ורק אם מחובר מקור חשמל. - סטטוס הסוללה חייב להיות
DISCHARGING
אם ורק אם מקור החשמל מנותק.
- סטטוס הסוללה חייב להיות אחד מהערכים
אם משתמשים ב-libbatterymonitor
בהטמעה ומעבירים ערכים
מממשקי ליבה, ודאו שצומתי ה-sysfs מדווחים על הערכים הנכונים:
- יש לוודא שרמת הטעינה של הסוללה מדווחת באמצעות הסימנים והיחידות הנכונים. הזה
כולל את צומתי ה-sysfs הבאים:
/sys/class/power_supply/*/current_avg
/sys/class/power_supply/*/current_max
/sys/class/power_supply/*/current_now
- ערכים חיוביים מציינים זרם נכנס לסוללה.
- הערכים צריכים להיות במיקרו-אמפים (μA).
- יש לוודא שמתח הסוללה מדווח במיקרו-וולט (μV). האיסור הזה כולל
צומתי sysfs הבאים:
/sys/class/power_supply/*/voltage_max
/sys/class/power_supply/*/voltage_now
- חשוב לשים לב שהטמעת ברירת המחדל של HAL מחלקת את
voltage_now
ב-1,000 ומדווח על ערכים במילי-וולט (mV). צפייה @1.0::HealthInfo.
פרטים נוספים זמינים במאמר סיווג ספק החשמל של Linux.