ใช้ USB HAL

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

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

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

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

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 interface เพื่อค้นหาสถานะของพอร์ต USB และเพื่อสลับบทบาทของข้อมูลและบทบาทของแหล่งจ่ายไฟ

การใช้งาน

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