از 27 مارس 2025، توصیه می کنیم از android-latest-release
به جای aosp-main
برای ساختن و کمک به AOSP استفاده کنید. برای اطلاعات بیشتر، به تغییرات AOSP مراجعه کنید.
USB HAL را پیاده سازی کنید
با مجموعهها، منظم بمانید
ذخیره و طبقهبندی محتوا براساس اولویتهای شما.
نسخه اندروید 8.0 برای پیکربندی بهتر و قابلیت اطمینان کد، مدیریت دستورات USB را از اسکریپتهای init
و به یک شبح USB بومی منتقل میکند. برای پیکربندی عملکرد Gadget، از اسکریپت های init
(محرک های ویژگی) برای انجام عملیات ابزار خاص دستگاه استفاده می شود.
در نسخههای قبلی، این پیکربندیهای خاص دستگاه از طریق اسکریپتهای init
مخصوص دستگاه (با استفاده از محرکهای ویژگی) به دست میآمدند. حرکت به طراحی لایه انتزاعی سخت افزاری (HAL) منجر به اجرای بسیار تمیزتر می شود که این مشکلات را حل می کند:
- عملیاتی مانند نوشتن در نودهای sysfs هسته ممکن است شکست بخورد اما به کد فریمورکهایی که تریگر ویژگی را تنظیم میکند منتشر نشوند. در نتیجه، فریمورکها به اشتباه فرض میکنند که عملیاتها موفق بودهاند، حتی اگر در سکوت شکست خورده باشند.
- اسکریپت های
init
دارای تعداد محدودی عملیات هستند که می توانند اجرا شوند.
نسخه Android 12 پشتیبانی از گجت USB HAL را برای مدلهای کنترل شبکه (NCM) و تماسهای API اضافه میکند که هم شماره نسخه HAL و هم سرعت USB را برمیگرداند. برای اطلاعات بیشتر در مورد تماسهای API موجود از طریق USB HAL، به خلاصه بسته android.hardware.usb
مراجعه کنید.
HAL و Treble
اسکریپت های init
دستگاه خاص به عنوان جایگزینی برای لایه های HAL برای انجام عملیات USB خاص دستگاه استفاده شد. USB (از طریق ADB) یک رابط اصلی برای اشکال زدایی مشکلات سیستم است. داشتن یک شبح بومی برای انجام پیکربندی USB، وابستگی به کد فریمورک را از بین می برد، بنابراین حتی اگر فریم ورک خراب شود، USB باید در حال اجرا باشد.
تحت مدل Treble که در اندروید 8.0 نیز معرفی شده است، همه HAL ها از سرویس های سیستم جدا هستند و باید در دیمون های بومی خود اجرا شوند. این امر نیاز به داشتن یک شبح USB انحصاری را از بین می برد زیرا لایه HAL به خوبی به عنوان یک شبح USB دو برابر می شود.
اجرای پیشفرض HAL از تمام دستگاههای پیش از اندروید 8.0 مراقبت میکند. بنابراین، برای دستگاههای پیش از اندروید 8.0 هیچ کار خاص دستگاه وجود نخواهد داشت. Android 8.0 از رابط HAL برای پرس و جو از وضعیت پورتهای USB و انجام مبادله نقش داده و قدرت استفاده میکند.
پیاده سازی
رابط USB HAL جدید باید بر روی هر دستگاهی که در Android 8.0 راه اندازی می شود پیاده سازی شود. پیاده سازی پیش فرض باید از دستگاه های پیش از اندروید 8.0 مراقبت کند. اگر دستگاه از کلاس dual_role_usb
برای گزارش وضعیت پورت type-c استفاده کند، اجرای پیشفرض کافی است. ممکن است برای انتقال مالکیت گرههای typc-c به سیستم، تغییرات جزئی در اسکریپتهای USB خاص دستگاه مورد نیاز باشد.
محتوا و نمونه کدها در این صفحه مشمول پروانههای توصیفشده در پروانه محتوا هستند. جاوا و OpenJDK علامتهای تجاری یا علامتهای تجاری ثبتشده Oracle و/یا وابستههای آن هستند.
تاریخ آخرین بهروزرسانی 2025-07-29 بهوقت ساعت هماهنگ جهانی.
[[["درک آسان","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-29 بهوقت ساعت هماهنگ جهانی."],[],[],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."]]