ประเภท 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 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 ในขณะที่ส่วนอื่น ๆ จะกระจายไปทั่วฐานรหัส