การใช้ USB HAL

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

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

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

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

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

HAL และเสียงแหลม

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

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

การใช้งาน 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 เฉพาะอุปกรณ์เพื่อโอนความเป็นเจ้าของโหนด typc-c ไปยังระบบ