ประเภท HAL

ใน 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 HIDL ห่อธรรมดาหรือ มรดก HAL HAL เหล่านี้จะห่อหุ้ม HAL ที่มีอยู่ และสามารถให้บริการ HAL ในโหมดการผูกมัดและกระบวนการเดียวกัน (พาสทรู) อุปกรณ์ที่อัปเกรดเป็น Android 8.0 สามารถใช้ HAL แบบส่งผ่านได้

ข้อกำหนดโหมด HAL

อุปกรณ์ ทะลุผ่าน ผูกมัด
เปิดตัวด้วย Android 8.0 HAL ที่ระบุไว้ใน HALs Passthrough จะต้องส่งผ่าน HAL อื่นๆ ทั้งหมดจะถูกผูกมัด (รวมถึง HAL ที่เป็นส่วนขยายของผู้จำหน่าย)
อัปเกรดเป็น Android 8.0 HAL ที่ระบุไว้ใน HALs Passthrough จะต้องส่งผ่าน HAL ที่ระบุไว้ใน HALs Binderized จะต้อง binderized
HAL อื่น ๆ ทั้งหมดที่อิมเมจผู้ขายให้มาสามารถอยู่ในโหมดพาสทรูหรือโหมดผูกมัด ในอุปกรณ์ที่รองรับเสียงแหลมอย่างสมบูรณ์ สิ่งเหล่านี้จะต้องถูกผูกมัด

ผูกมัด 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 ต่อไปนี้ซึ่งมักจะอยู่ในโหมด binderized: 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 กระบวนการเดียวกัน

HAL ของกระบวนการเดียวกัน (SP-HAL) จะเปิดขึ้นในกระบวนการเดียวกับที่ใช้เสมอ พวกเขารวมถึง HALs ทั้งหมดที่ไม่ได้แสดงใน HIDL เช่นเดียวกับบางอย่างที่ไม่ binderized การเป็นสมาชิกในชุด SP-HAL นั้นควบคุมโดย Google เท่านั้นโดยไม่มีข้อยกเว้น

SP-HAL ได้แก่

  • openGL
  • Vulkan
  • android.hidl.memory@1.0 (โดยระบบ Android, passthrough เสมอ)
  • android.hardware.graphics.mapper@1.0
  • android.hardware.renderscript@1.0

HAL แบบธรรมดาและแบบเดิม

HAL แบบธรรมดา (เลิกใช้ใน Android 8.0) เป็นอินเทอร์เฟซที่สอดคล้องกับอินเทอร์เฟซไบนารีของแอปพลิเคชันที่ระบุชื่อและเวอร์ชัน (ABI) เป็นกลุ่มของ Android อินเตอร์เฟซระบบ ( กล้อง , เสียง , เซ็นเซอร์ , ฯลฯ ) ในรูปแบบของ HALs ทั่วไปซึ่งจะมีการกำหนดภายใต้ ฮาร์ดแวร์ / libhardware / รวม / ฮาร์ดแวร์

HAL แบบเดิม (เลิกใช้งานใน Android 8.0 แล้วด้วย) เป็นอินเทอร์เฟซที่มีมาก่อน HAL แบบเดิม ระบบย่อยที่สำคัญสองสามระบบ (Wi-Fi, Radio Interface Layer และ Bluetooth) เป็น HAL รุ่นเก่า แม้ว่าจะไม่มีวิธีการที่เหมือนกันหรือเป็นมาตรฐานในการอธิบาย HAL แบบเดิม แต่สิ่งใดก็ตามที่เกิดก่อน Android 8.0 ที่ไม่ใช่ HAL แบบเดิมจะเป็น HAL แบบเดิม ส่วนของ HALs มรดกบางส่วนที่มีอยู่ใน libhardware_legacy ในขณะที่ส่วนอื่น ๆ จะกระจายทั่วทั้ง codebase