באנדרואיד 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
ו-polling. ב-init, health@2.1-service
רושם יישום של הממשק IHealth
ל- hwservicemanager
. בעת שדרוג מכשירים עם תמונת ספק Android 8.x או 9 ומסגרת Android 11, ייתכן שתמונת הספק לא תספק את השירות health@2.1. תאימות לאחור עם תמונות ישנות של ספקים נאכפת על ידי לוח הזמנים של הוצאה משימוש .
כדי להבטיח תאימות לאחור:
-
healthd
רושם אתIHealth
ל-hwservicemanager
למרות היותו דמון מערכת.IHealth
מתווסף למניפסט המערכת, עם שם המופע "גיבוי". - המסגרת
storaged
מתקשרים עםhealthd
באמצעותhwbinder
במקוםbinder
. - הקוד למסגרת
storaged
משתנה כדי להביא את המופע "ברירת מחדל" אם זמין, ואז "גיבוי".- קוד לקוח C++ משתמש בלוגיקה המוגדרת ב-
libhealthhalutils
. - קוד לקוח Java משתמש בלוגיקה שהוגדרה ב-
HealthServiceWrapper
.
- קוד לקוח C++ משתמש בלוגיקה המוגדרת ב-
- לאחר ש-IHealth/ברירת מחדל זמין באופן נרחב ותמונות של ספקי אנדרואיד 8.1 הוצאו משימוש, ניתן לבטל את IHealth/גיבוי ו-
healthd
. לפרטים נוספים, ראה הוצאה משימוש בריאות@1.0 .
משתני בנייה ספציפיים ללוח עבור healthd
BOARD_PERIODIC_CHORES_INTERVAL_*
הם משתנים ספציפיים ללוח המשמשים לבניית healthd
. כחלק מפיצול בניית מערכת/ספק, לא ניתן להגדיר ערכים ספציפיים ללוח עבור מודולי מערכת. פעם ערכים אלה נדחו בפונקציה שהוצאה משימוש healthd_board_init
.
ב-health@2.1, הספקים יכולים לעקוף את שני ערכי מרווחי המטלות התקופתיים במבנה healthd_config
לפני שהם עוברים לבנאי מחלקות יישום הבריאות. מחלקת יישום הבריאות צריכה לרשת android::hardware::health::V2_1::implementation::Health
.
יישום שירות הבריאות 2.1
למידע על הטמעת שירות Health 2.1, ראה חומרה/ממשקים/health/2.1/README.md .
לקוחות בריאות
ל- health@2.x יש את הלקוחות הבאים:
- מטען . השימוש ב-
libbatterymonitor
ובקודhealthd_common
עטוף ב-health@2.0-impl
. - התאוששות . הקישור ל-
libbatterymonitor
עטוף ב-health@2.0-impl
. כל הקריאות ל-BatteryMonitor
מוחלפות בקריאות למחלקת יישוםHealth
. BatteryManager .
BatteryManager.queryProperty(int id)
היה הלקוח היחיד שלIBatteryPropertiesRegistrar.getProperty
.IBatteryPropertiesRegistrar.getProperty
סופק על ידיhealthd
וקרא ישירות את/sys/class/power_supply
.כשיקול אבטחה, אפליקציות אינן מורשות להתקשר ישירות ל-HAL בריאות. באנדרואיד 9 ומעלה, שירות הקלסר
IBatteryPropertiesRegistrar
מסופק על ידיBatteryService
במקוםhealthd
.BatteryService
מאציל את השיחה ל-HAL בריאות כדי לאחזר את המידע המבוקש.שירות סוללות . באנדרואיד 9 ומעלה,
BatteryService
משתמשHealthServiceWrapper
כדי לקבוע אם להשתמש במופע ברירת המחדל של שירותי הבריאותvendor
או להשתמש במופע הגיבוי של שירותי הבריאות מ-healthd
.BatteryService
מאזין לאירועי בריאות דרךIHealth.registerCallback
.מאוחסן . באנדרואיד 9 ואילך,
storaged
משתמשlibhealthhalutils
כדי לקבוע אם להשתמש במופע ברירת המחדל של שירותי הבריאותvendor
או להשתמש במופע הגיבוי של שירותי הבריאות מ-healthd
.storaged
ואז מאזין לאירועי בריאות דרךIHealth.registerCallback
ומחזיר מידע אחסון.
שינויים ב-SELinux
Health@2.1 HAL כולל את השינויים הבאים של 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.
ממשקי ליבה
הדמון 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
ניגש לממשקי הליבה האלה כברירת מחדל, אלא אם כן נדרוס בבנאי מחלקות יישום הבריאות.
אם קבצים אלה חסרים או שאינם נגישים מ- healthd
או משירות ברירת המחדל (למשל, הקובץ הוא קישור סימול לתיקיה ספציפית לספק שמונעת גישה בגלל מדיניות SELinux שגויה), ייתכן שהם לא יפעלו כראוי. לפיכך, ייתכן שיהיה צורך בשינויים נוספים ב-SELinux הספציפיים לספק, למרות שמשתמשים ביישום ברירת המחדל.
ממשקי ליבה מסוימים המשמשים ב-Health 2.1, כגון /sys/class/power_supply/*/capacity_level
ו- /sys/class/power_supply/*/time_to_full_now
, עשויים להיות אופציונליים. עם זאת, כדי למנוע התנהגויות מסגרת שגויות הנובעות מממשקי ליבה חסרים, מומלץ לבחור CL 1398913 לפני בניית שירות HAL 2.1 בריאות.
בדיקה
אנדרואיד 11 כולל בדיקות VTS חדשות שנכתבו במיוחד עבור health@2.1 HAL. אם מכשיר מצהיר על health@2.1 HAL במניפסט המכשיר, עליו לעבור את בדיקות ה-VTS המתאימות. בדיקות נכתבות הן עבור מופע ברירת המחדל (כדי להבטיח שהמכשיר מיישם את ה-HAL בצורה נכונה) והן עבור מופע הגיבוי (כדי להבטיח כי healthd
ממשיך לתפקד כהלכה לפני הסרתו).
דרישות מידע על הסוללה
Health 2.0 HAL מציין סט דרישות על ממשק HAL, אך בדיקות ה-VTS המקבילות רגועות יחסית באכיפתן. באנדרואיד 11, בדיקות VTS חדשות מתווספות כדי לאכוף את הדרישות הבאות במכשירים המופעלים עם אנדרואיד 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
ב-1000 ומדווח על ערכים במיליוולט (mV). ראה @1.0::HealthInfo .
-
לפרטים, ראה מחלקת ספק כוח לינוקס .