ภาพรวมของ Hardware Abstraction Layer (HAL)

จัดทุกอย่างให้เป็นระเบียบอยู่เสมอด้วยคอลเล็กชัน บันทึกและจัดหมวดหมู่เนื้อหาตามค่ากำหนดของคุณ

ใน Android 8.0 และสูงกว่า เลเยอร์ระดับล่างจะถูกเขียนใหม่เพื่อใช้สถาปัตยกรรมโมดูลาร์แบบใหม่ที่มากขึ้น อุปกรณ์ที่ใช้ Android 8.0 ขึ้นไปต้องรองรับ HAL ที่เขียนด้วย HIDL โดยมีข้อยกเว้นบางประการตามรายการด้านล่าง HAL เหล่านี้สามารถจับตัวเป็นก้อนหรือส่งผ่านได้ ใน Android 11 รองรับ HAL ที่เขียนด้วย AIDL AIDL HAL ทั้งหมดถูกผูกมัด

  • Binderized HAL HAL แสดงในภาษานิยามอินเทอร์เฟซ HAL (HIDL) หรือภาษานิยามอินเทอร์เฟซ Android (AIDL) HAL เหล่านี้จะแทนที่ทั้ง HAL แบบธรรมดาและแบบดั้งเดิมที่ใช้ใน Android เวอร์ชันก่อนหน้า ใน Binderized HAL เฟรมเวิร์ก Android และ HAL จะสื่อสารกันโดยใช้การเรียก Binder Inter-Process Communication (IPC) อุปกรณ์ทั้งหมดที่เปิดตัวด้วย Android 8.0 หรือใหม่กว่าจะต้องรองรับ Binderized 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 HALs ที่ระบุไว้ใน Binderized HAL จะต้องถูกผูกมัด
HAL อื่นๆ ทั้งหมดที่มีให้โดยอิมเมจของผู้ขายสามารถอยู่ในโหมดพาสทรูหรือโหมดไบเดอร์ไดซ์ ในอุปกรณ์ที่รองรับเสียงแหลมอย่างสมบูรณ์ สิ่งเหล่านี้ทั้งหมดจะต้องได้รับการผูกมัด

Binderized HAL

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 ตามที่อธิบายด้านล่าง)

ผ่าน HAL

Android กำหนดให้ HAL ต่อไปนี้อยู่ในโหมดส่งผ่านบนอุปกรณ์ Android ทั้งหมด ไม่ว่าจะเป็นอุปกรณ์เปิดตัวหรืออุปกรณ์อัปเกรด:

  • android.hardware.graphics.mapper@1.0 แม็พหน่วยความจำเข้ากับกระบวนการที่มันอาศัยอยู่
  • android.hardware.renderscript@1.0 ผ่านรายการในกระบวนการเดียวกัน (เทียบเท่ากับ openGL )

HAL ทั้งหมดที่ไม่ได้อยู่ในรายการด้านบนจะต้องเข้าเล่มสำหรับอุปกรณ์เปิดใช้

HAL กระบวนการเดียวกัน

Same-Process HAL (SP-HAL) จะเปิดขึ้นเสมอในกระบวนการเดียวกันที่ใช้ ซึ่งรวมถึง 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

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

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

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