ใช้ USB HAL

การเปิดตัว Android 8.0 จะย้ายการจัดการคำสั่ง USB ออกจากสคริปต์ init และไปไว้ใน daemon USB ดั้งเดิมเพื่อให้การกำหนดค่าและความน่าเชื่อถือของโค้ดดีขึ้น สำหรับฟังก์ชันการกำหนดค่า Gadget ระบบจะใช้สคริปต์ init (ทริกเกอร์พร็อพเพอร์ตี้) เพื่อดำเนินการ Gadget ที่เฉพาะเจาะจงกับอุปกรณ์

ในเวอร์ชันก่อนหน้า การกำหนดค่าที่เฉพาะเจาะจงกับอุปกรณ์เหล่านี้ทำได้ผ่านสคริปต์ init ที่เฉพาะเจาะจงกับอุปกรณ์ (โดยใช้ทริกเกอร์พร็อพเพอร์ตี้) การเปลี่ยนไปใช้การออกแบบ Hardware Abstraction Layer (HAL) จะทำให้การติดตั้งใช้งานมีความชัดเจนมากขึ้นและช่วยแก้ปัญหาต่อไปนี้

  1. การดำเนินการ เช่น การเขียนไปยังโหนด sysfs ของเคอร์เนลอาจล้มเหลว แต่จะไม่เผยแพร่กลับไปยังโค้ดเฟรมเวิร์กที่ตั้งค่าทริกเกอร์พร็อพเพอร์ตี้ ด้วยเหตุนี้ เฟรมเวิร์กจึงสันนิษฐานอย่างไม่ถูกต้องว่าการดำเนินการสำเร็จแล้ว แม้ว่าการดำเนินการจะล้มเหลวอย่างเงียบๆ
  2. สคริปต์ init มีการดำเนินการที่จำกัดจำนวนที่สามารถดำเนินการได้

การเปิดตัว Android 12 เพิ่มการรองรับ USB Gadget HAL สำหรับ Network Control Models (NCM) และการเรียก API ที่แสดงผลทั้งหมายเลขเวอร์ชัน HAL และความเร็ว USB ดูข้อมูลเพิ่มเติมเกี่ยวกับการเรียก API ที่พร้อมใช้งานผ่าน USB HAL ได้ที่ข้อมูลสรุปแพ็กเกจ the android.hardware.usb package summary

HAL และ Treble

ระบบใช้สคริปต์ init ที่เฉพาะเจาะจงกับอุปกรณ์เพื่อทดแทนเลเยอร์ HAL ในการดำเนินการ USB ที่เฉพาะเจาะจงกับอุปกรณ์ USB (ผ่าน ADB) เป็นอินเทอร์เฟซหลักสำหรับการแก้ไขข้อบกพร่องของระบบ การมี daemon ดั้งเดิมเพื่อดำเนินการกำหนดค่า USB จะช่วยลดการพึ่งพาโค้ดเฟรมเวิร์ก ดังนั้นแม้ว่าเฟรมเวิร์กจะขัดข้อง USB ก็ควรทำงานได้

ภายใต้โมเดล Treble ที่เปิดตัวใน Android 8.0 ด้วยเช่นกัน HAL ทั้งหมดจะแยกออกจากบริการของระบบ และต้องทำงานใน daemon ดั้งเดิมของตัวเอง ซึ่งจะช่วยลดข้อกำหนดในการมี daemon USB ที่เฉพาะเจาะจง เนื่องจากเลเยอร์ HAL ทำหน้าที่เป็น daemon USB ได้ด้วย

การติดตั้งใช้งาน HAL เริ่มต้นจะดูแลอุปกรณ์ทั้งหมดที่ใช้ Android เวอร์ชันก่อน 8.0 ดังนั้นจึงไม่มีงานที่เฉพาะเจาะจงกับอุปกรณ์สำหรับอุปกรณ์ที่ใช้ Android เวอร์ชันก่อน 8.0 Android 8.0 ใช้อินเทอร์เฟซ HAL เพื่อค้นหาสถานะของพอร์ต USB และเพื่อสลับบทบาทข้อมูลและบทบาทพลังงาน

การใช้งาน

ต้องมีการติดตั้งใช้งานอินเทอร์เฟซ USB HAL ใหม่ในอุปกรณ์ทุกเครื่องที่เปิดตัวใน Android 8.0 การติดตั้งใช้งานเริ่มต้นควรดูแลอุปกรณ์ที่ใช้ Android เวอร์ชันก่อน 8.0 การติดตั้งใช้งานเริ่มต้นก็เพียงพอแล้วหากอุปกรณ์ใช้คลาส dual_role_usb เพื่อรายงานสถานะพอร์ต Type-C อาจต้องมีการเปลี่ยนแปลงเล็กน้อยในสคริปต์ USB ที่เฉพาะเจาะจงกับอุปกรณ์เพื่อโอนสิทธิ์เป็นเจ้าของโหนด Type-C ไปยังระบบ