اعتبارًا من 27 آذار (مارس) 2025، ننصحك باستخدام android-latest-release
بدلاً من aosp-main
لإنشاء AOSP والمساهمة فيه. لمزيد من المعلومات، يُرجى الاطّلاع على التغييرات في AOSP.
تنفيذ وحدة HAL لـ USB
تنظيم صفحاتك في مجموعات
يمكنك حفظ المحتوى وتصنيفه حسب إعداداتك المفضّلة.
ينقل إصدار Android 8.0 معالجة أوامر USB من init
النصوص البرمجية إلى برنامج تشغيل USB أصلي لتحسين الإعدادات وملف برمجي
موثوق. لضبط وظيفة التطبيق المصغّر، يتم استخدام init
النصوص البرمجية
(عوامل تشغيل الموقع) لتنفيذ عمليات التطبيق المصغّر الخاصة بالأجهزة.
في الإصدارات السابقة، تمّ إجراء هذه الإعدادات الخاصة بالأجهزة من خلال
النصوص البرمجية init
الخاصة بالأجهزة (باستخدام عوامل تشغيل الموقع). يؤدي الانتقال إلى تصميم
Hardware Abstraction Layer (HAL) إلى تنفيذ أنظف بكثير
يحلّ هذه المشاكل:
- قد تفشل عمليات مثل عمليات الكتابة إلى عقد sysfs الخاصة بالنواة، ولكن لن تتم
نشرها مرة أخرى إلى رمز الإطارات الأساسية الذي يضبط عامل تشغيل السمة. ونتيجةً لذلك،تفترض الإطارات بشكلٍ خاطئ أنّ العمليات قد نجحت على الرغم من أنّها قد تعذّرت بصمت.
- تحتوي نصوص
init
البرمجية على عدد محدود من العمليات التي يمكن
تنفيذها.
يضيف إصدار Android 12 إمكانية استخدام HAL لأجهزة USB المصمّمة للتحكم في الشبكة (NCM) وطلبات بيانات واجهة برمجة التطبيقات التي تعرض رقم إصدار HAL وسرعة USB. لمزيد من
المعلومات حول طلبات بيانات واجهة برمجة التطبيقات المتاحة من خلال وحدة HAL الخاصة بمنفذ USB، يُرجى الاطّلاع على
ملخّص حزمة android.hardware.usb
.
HAL وTreble
تم استخدام النصوص البرمجية init
الخاصة بالجهاز كبديل لطبقات ملف HAL لتنفيذ عمليات USB الخاصة بالجهاز. يُعدّ USB (من خلال ADB)
الواجهة الأساسية لتصحيح أخطاء النظام. إنّ توفُّر برنامج خفي أصلي لتنفيذ عملية ضبط USB يزيل الاعتماد على رمز إطار العمل، لذا حتى إذا تعطّل إطار العمل، من المفترض أن يكون منفذ USB قيد التشغيل.
بموجب نموذج
Treble
الذي تم طرحه أيضًا في الإصدار 8.0 من Android، يتم عزل جميع واجهات HAL عن خدمات System
ويُشترط تشغيلها في برامج الخدمة الأساسية الخاصة بها. ويؤدي ذلك إلى عدم الحاجة إلى استخدام برنامج تشغيل USB حصري، لأنّ طبقة HAL تؤدي دور برنامج تشغيل USB أيضًا.
تتعامل عملية تنفيذ HAL التلقائية مع جميع الأجهزة التي تعمل بإصدار أقدم من Android 8.0. وبالتالي، لن يتم تنفيذ أي إجراءات خاصة بالأجهزة التي تعمل بإصدار أقدم من Android 8.0. يستخدم نظام التشغيل Android 8.0 واجهة HAL
لاستعلام عن حالة منافذ USB ولإجراء عمليات تبديل دور البيانات ودور
الطاقة.
التنفيذ
يجب تنفيذ واجهة USB HAL الجديدة على كل جهاز يعمل بنظام التشغيل Android 8.0.
من المفترض أن يتعامل التنفيذ التلقائي مع الأجهزة التي تعمل بإصدار أقدم من Android 8.0. يكون التنفيذ التلقائي
مناسبًا إذا كان الجهاز يستخدم فئة dual_role_usb
للإبلاغ عن
حالة منفذ النوع-c. قد تكون هناك تغييرات بسيطة مطلوبة في النصوص البرمجية الخاصة بواجهة USB الخاصة بالجهاز
لنقل ملكية عقد typc-c إلى النظام.
يخضع كل من المحتوى وعيّنات التعليمات البرمجية في هذه الصفحة للتراخيص الموضحّة في ترخيص استخدام المحتوى. إنّ Java وOpenJDK هما علامتان تجاريتان مسجَّلتان لشركة Oracle و/أو الشركات التابعة لها.
تاريخ التعديل الأخير: 2025-07-27 (حسب التوقيت العالمي المتفَّق عليه)
[[["يسهُل فهم المحتوى.","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 (حسب التوقيت العالمي المتفَّق عليه)"],[],[],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."]]