ตั้งแต่วันที่ 27 มีนาคม 2025 เป็นต้นไป เราขอแนะนำให้ใช้ android-latest-release
แทน aosp-main
เพื่อสร้างและมีส่วนร่วมใน AOSP โปรดดูข้อมูลเพิ่มเติมที่หัวข้อการเปลี่ยนแปลงใน AOSP
ใช้ USB HAL
จัดทุกอย่างให้เป็นระเบียบอยู่เสมอด้วยคอลเล็กชัน
บันทึกและจัดหมวดหมู่เนื้อหาตามค่ากำหนดของคุณ
เวอร์ชัน Android 8.0 ย้ายการจัดการคำสั่ง USB ออกจากสคริปต์ไปไว้ในเดรัม USB ดั้งเดิมเพื่อให้การกำหนดค่าและความน่าเชื่อถือของโค้ดดีขึ้นinit
สําหรับการกําหนดค่าฟังก์ชันของแก็ดเจ็ต ระบบจะใช้init
สคริปต์ (ทริกเกอร์พร็อพเพอร์ตี้) เพื่อดําเนินการกับแก็ดเจ็ตเฉพาะอุปกรณ์
ในรุ่นก่อนหน้า การกําหนดค่าเฉพาะอุปกรณ์เหล่านี้ทำได้ผ่านสคริปต์ init
เฉพาะอุปกรณ์ (โดยใช้ทริกเกอร์พร็อพเพอร์ตี้) การเปลี่ยนไปใช้การออกแบบเลเยอร์การแยกแยะฮาร์ดแวร์ (HAL) ส่งผลให้การติดตั้งใช้งานมีความเรียบร้อยมากขึ้นและแก้ปัญหาต่อไปนี้ได้
- การดำเนินการต่างๆ เช่น การเขียนไปยังโหนด sysfs ของเคอร์เนลอาจไม่สำเร็จ แต่จะไม่นำไปใช้กับโค้ดเฟรมเวิร์กที่กำหนดทริกเกอร์พร็อพเพอร์ตี้ ด้วยเหตุนี้ เฟรมเวิร์กจึงเข้าใจผิดว่าการดำเนินการสําเร็จ แม้ว่าจะดำเนินการไม่สําเร็จโดยที่ผู้ใช้ไม่รู้ตัว
- สคริปต์
init
ดําเนินการได้จํานวนจำกัด
เวอร์ชัน Android 12 เพิ่มการรองรับ HAL ของอุปกรณ์ต่อพ่วง USB สำหรับรูปแบบการควบคุมเครือข่าย (NCM) และการเรียก API ที่แสดงทั้งหมายเลขเวอร์ชัน HAL และความเร็ว USB ดูข้อมูลเพิ่มเติมเกี่ยวกับการเรียก API ที่พร้อมใช้งานผ่าน HAL ของ USB ได้ที่ข้อมูลสรุปแพ็กเกจ android.hardware.usb
HAL และ Treble
มีการใช้สคริปต์ init
สำหรับอุปกรณ์เฉพาะแทนเลเยอร์ HAL เพื่อดำเนินการ USB สำหรับอุปกรณ์เฉพาะ USB (ผ่าน ADB) เป็นอินเทอร์เฟซหลักสำหรับการแก้ไขข้อบกพร่องของระบบ การมี Daemon เนทีฟที่จะทำการกําหนดค่า USB จะช่วยขจัดข้อจํากัดในการพึ่งพาโค้ดเฟรมเวิร์ก ดังนั้น USB จะยังคงทํางานได้แม้ว่าเฟรมเวิร์กจะขัดข้องก็ตาม
ภายใต้รูปแบบ Treble ที่เปิดตัวใน Android 8.0 ด้วยเช่นกัน HAL ทั้งหมดจะแยกออกจากบริการของระบบและต้องทำงานใน Daemon ของตัวเอง ซึ่งทำให้ไม่ต้องมีเดรัม USB โดยเฉพาะเนื่องจากเลเยอร์ HAL ทำหน้าที่เป็นเดรัม USB ได้อย่างดี
การใช้งาน HAL เริ่มต้นจะดูแลอุปกรณ์ทั้งหมดก่อน Android 8.0 ดังนั้น อุปกรณ์ก่อน Android 8.0 จึงไม่ต้องดำเนินการใดๆ ที่เจาะจงอุปกรณ์ Android 8.0 ใช้อินเทอร์เฟซ HAL เพื่อค้นหาสถานะของพอร์ต USB และเพื่อสลับบทบาทของข้อมูลและบทบาทของพลังงาน
การใช้งาน
ต้องใช้อินเทอร์เฟซ HAL ของ USB ใหม่ในอุปกรณ์ทุกเครื่องที่เปิดตัวใน Android 8.0
การใช้งานเริ่มต้นควรรองรับอุปกรณ์รุ่นก่อน Android 8.0 การใช้งานเริ่มต้นก็เพียงพอแล้วหากอุปกรณ์ใช้คลาส dual_role_usb
เพื่อรายงานสถานะพอร์ต Type-C คุณอาจต้องทำการเปลี่ยนแปลงเล็กน้อยในสคริปต์ USB สำหรับอุปกรณ์โดยเฉพาะเพื่อโอนการเป็นเจ้าของโหนด Typc-C ไปยังระบบ
ตัวอย่างเนื้อหาและโค้ดในหน้าเว็บนี้ขึ้นอยู่กับใบอนุญาตที่อธิบายไว้ในใบอนุญาตการใช้เนื้อหา Java และ OpenJDK เป็นเครื่องหมายการค้าหรือเครื่องหมายการค้าจดทะเบียนของ Oracle และ/หรือบริษัทในเครือ
อัปเดตล่าสุด 2025-07-27 UTC
[[["เข้าใจง่าย","easyToUnderstand","thumb-up"],["แก้ปัญหาของฉันได้","solvedMyProblem","thumb-up"],["อื่นๆ","otherUp","thumb-up"]],[["ไม่มีข้อมูลที่ฉันต้องการ","missingTheInformationINeed","thumb-down"],["ซับซ้อนเกินไป/มีหลายขั้นตอนมากเกินไป","tooComplicatedTooManySteps","thumb-down"],["ล้าสมัย","outOfDate","thumb-down"],["ปัญหาเกี่ยวกับการแปล","translationIssue","thumb-down"],["ตัวอย่าง/ปัญหาเกี่ยวกับโค้ด","samplesCodeIssue","thumb-down"],["อื่นๆ","otherDown","thumb-down"]],["อัปเดตล่าสุด 2025-07-27 UTC"],[],[],null,["# Implement USB HAL\n\nThe Android 8.0 release moves handling of USB commands out of `init`\nscripts and into a native USB daemon for better configuration and code\nreliability. For the Gadget function configuration, `init` scripts\n(property triggers) are used to perform device-specific gadget operations.\n\nIn previous releases, these device-specific configurations were achieved through\ndevice-specific `init` scripts (using property triggers). Moving to a\nHardware Abstraction Layer (HAL) design results in a much cleaner implementation\nthat solves these problems:\n\n1. Operations such as writes to the kernel sysfs nodes could fail but not be propagated back to the frameworks code that sets the property trigger. As a result, frameworks incorrectly assumes the operations have succeeded even though they have silently failed.\n2. `init` scripts have a limited number of operations that could be executed.\n\nThe Android 12 release adds USB Gadget HAL support for Network Control\nModels (NCM) and API calls that return both the HAL version number and USB speed. For more\ninformation on the API calls available through the USB HAL, see\n[the `android.hardware.usb` package summary](https://developer.android.com/reference/android/hardware/usb/package-summary).\n\nHAL and Treble\n--------------\n\n\nThe device-specific `init` scripts were used as a substitution for\nHAL layers to perform device-specific USB operations. USB (through ADB) is a\nprimary interface for debugging system issues. Having a native daemon to perform\nUSB configuration eliminates the dependency on the framework code so even if the\nframework crashes USB should be running.\n\n\nUnder the\n[Treble](https://android-developers.googleblog.com/2017/05/here-comes-treble-modular-base-for.html)\nmodel also introduced in Android 8.0, all of the HALs are isolated from System\nservices and are required to run in their own native daemons. This eliminates\nthe requirement to have an exclusive USB daemon as the HAL layer nicely doubles\nas a USB daemon.\n\n\nThe default HAL implementation takes care of all pre-Android 8.0 devices. Therefore, there\nwouldn't be any device-specific work for the pre-Android 8.0 devices. Android 8.0 uses the HAL\ninterface to query the status of USB ports and to perform data role and power\nrole swaps.\n\nImplementation\n--------------\n\n\nNew USB HAL interface needs to be implemented on every device launching on Android 8.0.\nThe default implementation should take care of pre-Android 8.0 devices. The default\nimplementation is sufficient if the device uses the `dual_role_usb` class to report\ntype-c port status. Trivial changes might be required in device-specific USB scripts\nto transfer ownership of the typc-c nodes to system."]]