ใน Android 8.0 ขึ้นไป เลเยอร์ระดับล่างจะถูกเขียนใหม่เพื่อใช้สถาปัตยกรรมโมดูลาร์แบบใหม่ อุปกรณ์ที่ใช้ Android 8.0 ขึ้นไปต้องรองรับ HAL ที่เขียนด้วย HIDL โดยมีข้อยกเว้นบางประการตามรายการด้านล่าง HAL เหล่านี้สามารถผูกมัดหรือทะลุผ่านได้ ใน Android 11 รองรับ HAL ที่เขียนด้วย AIDL ด้วย AIDL HAL ทั้งหมดถูกผูกมัด
- HAL ที่ผูกมัด HAL แสดงในภาษาคำจำกัดความของอินเทอร์เฟซ HAL (HIDL) หรือภาษาคำจำกัดความอินเทอร์เฟซของ Android (AIDL) HAL เหล่านี้จะแทนที่ HAL ทั้งแบบเดิมและแบบเดิมที่ใช้ใน Android เวอร์ชันก่อนหน้า ใน Binderized HAL นั้น เฟรมเวิร์กของ Android และ HAL จะสื่อสารระหว่างกันโดยใช้การเรียก Binder inter-process Communication (IPC) อุปกรณ์ทั้งหมดที่เปิดตัวด้วย Android 8.0 หรือใหม่กว่าต้องรองรับ HAL ที่ผูกมัดเท่านั้น
- ผ่าน HAL HAL แบบเดิม หรือแบบเดิมที่หุ้มด้วย HIDL HAL เหล่านี้จะห่อหุ้ม HAL ที่มีอยู่และสามารถให้บริการ HAL ในโหมดการผูกมัดและกระบวนการเดียวกัน (ผ่าน) อุปกรณ์ที่อัปเกรดเป็น Android 8.0 สามารถใช้ HAL แบบส่งผ่านได้
ข้อกำหนดโหมด HAL
อุปกรณ์ | ทะลุผ่าน | ผูกมัด |
---|---|---|
เปิดตัวด้วย Android 8.0 | HAL ที่ระบุไว้ใน Passthrough HAL จะต้องเป็นแบบ passthrough | HAL อื่นๆ ทั้งหมดจะถูกผูกมัด (รวมถึง HAL ที่เป็นส่วนขยายของผู้จำหน่าย) |
อัปเกรดเป็น Android 8.0 | HAL ที่ระบุไว้ใน Passthrough HAL จะต้องเป็นแบบ passthrough | HAL ที่ระบุไว้ใน Binderized HALs จะต้องถูกผูกมัด |
HAL อื่น ๆ ทั้งหมดที่อิมเมจผู้ขายให้มาสามารถอยู่ในโหมดส่งผ่าน OR binderized ในอุปกรณ์ที่รองรับเสียงแหลมอย่างสมบูรณ์ สิ่งเหล่านี้จะต้องถูกผูกมัด |
ผูกมัด HALs
Android กำหนดให้มีการรวม HALS ต่อไปนี้ในอุปกรณ์ Android ทั้งหมด ไม่ว่าจะเป็นอุปกรณ์เปิดตัวหรืออุปกรณ์อัปเกรด:
-
android.hardware.biometrics.fingerprint@2.1
แทนที่fingerprintd
ซึ่งไม่มีใน Android 8.0 แล้ว -
android.hardware.configstore@1.0
ใหม่ใน Android 8.0 -
android.hardware.dumpstate@1.0
อินเทอร์เฟซดั้งเดิมของ HAL นี้ไม่สามารถชิมได้และมีการเปลี่ยนแปลง ด้วยเหตุนี้dumpstate_board
จึงต้องดำเนินการอีกครั้งบนอุปกรณ์ที่กำหนด (นี่คือ HAL ทางเลือก) -
android.hardware.graphics.allocator@2.0
จำเป็นต้องผูกมัดใน Android 8.0 ดังนั้นตัวอธิบายไฟล์จึงไม่จำเป็นต้องแชร์ระหว่างกระบวนการที่เชื่อถือได้และไม่น่าเชื่อถือ -
android.hardware.radio@1.0
. แทนที่อินเทอร์เฟซที่จัดเตรียมโดยrild
ซึ่งอยู่ในกระบวนการของตัวเอง -
android.hardware.usb@1.0
. ใหม่ใน Android 8.0 -
android.hardware.wifi@1.0
. ใหม่ใน Android 8.0 แทนที่ไลบรารี Wi-Fi HAL รุ่นเก่าที่โหลดลงในsystem_server
-
android.hardware.wifi.supplicant@1.0
อินเทอร์เฟซ HIDL เหนือกระบวนการwpa_supplicant
ที่มีอยู่
หมายเหตุ : Android มีอินเทอร์เฟซ HIDL ต่อไปนี้ซึ่งจะอยู่ในโหมดผูกมัดเสมอ: android.frameworks.*
, android.system.*
และ android.hidl.*
(ยกเว้น android.hidl.memory@1.0
ตามที่อธิบายไว้ด้านล่าง)
ผ่าน HALs
Android กำหนดให้ HAL ต่อไปนี้อยู่ในโหมดส่งผ่านบนอุปกรณ์ Android ทั้งหมด ไม่ว่าจะเป็นอุปกรณ์เปิดตัวหรืออุปกรณ์อัปเกรด:
-
android.hardware.graphics.mapper@1.0
แมปหน่วยความจำเข้ากับกระบวนการที่มันอาศัยอยู่ -
android.hardware.renderscript@1.0
ผ่านรายการในกระบวนการเดียวกัน (เทียบเท่ากับopenGL
)
HAL ทั้งหมดที่ไม่ได้ระบุไว้ข้างต้นจะต้องถูกผูกมัดสำหรับอุปกรณ์เปิดตัว
HALs กระบวนการเดียวกัน
Same-Process HALs (SP-HALs) จะเปิดในกระบวนการเดียวกับที่ใช้เสมอ สิ่งเหล่านี้รวมถึง HAL ทั้งหมดที่ไม่ได้แสดงใน HIDL รวมทั้งบางส่วนที่ ไม่ ถูกผูกมัด การเป็นสมาชิกในชุด SP-HAL นั้นควบคุมโดย Google เท่านั้นโดยไม่มีข้อยกเว้น
SP-HAL ได้แก่
-
openGL
-
Vulkan
-
android.hidl.memory@1.0
(จัดทำโดยระบบ Android ผ่านเสมอ) -
android.hardware.graphics.mapper@1.0
-
android.hardware.renderscript@1.0
HALs แบบธรรมดาและแบบเดิม
HAL แบบธรรมดา (เลิกใช้ใน Android 8.0) เป็นอินเทอร์เฟซที่สอดคล้องกับอินเทอร์เฟซไบนารีของแอปพลิเคชันที่ระบุชื่อและเวอร์ชัน (ABI) อินเทอร์เฟซระบบ Android จำนวนมาก ( กล้อง , เสียง , เซ็นเซอร์ ฯลฯ ) อยู่ในรูปแบบของ HAL ทั่วไป ซึ่งกำหนดไว้ภายใต้ hardware/libhardware/include/hardware
HAL รุ่นเก่า (เลิกใช้งานใน Android 8.0 แล้วด้วย) เป็นอินเทอร์เฟซที่มีมาก่อน HAL แบบเดิม ระบบย่อยที่สำคัญสองสามระบบ (Wi-Fi, Radio Interface Layer และ Bluetooth) เป็น HAL รุ่นเก่า แม้ว่าจะไม่มีวิธีที่เหมือนกันหรือเป็นมาตรฐานในการอธิบาย HAL แบบเดิม แต่สิ่งใดก็ตามที่เกิดก่อน Android 8.0 ที่ไม่ใช่ HAL แบบธรรมดาก็คือ HAL แบบเดิม บางส่วนของ HALs รุ่นเก่ามีอยู่ใน libhardware_legacy ในขณะที่ส่วนอื่น ๆ จะกระจายไปทั่วฐานรหัส