پیاده‌سازی USB HAL

نسخه Android 8.0 مدیریت دستورات USB را از init نوشتارها به یک دیو USB بومی منتقل می‌کند تا پیکربندی و قابلیت اطمینان کد بهتری داشته باشد. برای پیکربندی عملکرد «ابزارک»، از init دستورگان (راه‌اندازهای دارایی) برای انجام عملیات ابزارک مختص دستگاه استفاده می‌شود.

در نسخه‌های قبلی، این پیکربندی‌های مختص دستگاه ازطریق اسکریپت‌های init مختص دستگاه (بااستفاده از راه‌اندازهای ویژگی) انجام می‌شد. انتقال به طراحی لایه انتزاع سخت‌افزار (HAL) منجر به پیاده‌سازی بسیار پاکیزه‌تری می‌شود که این مشکلات را حل می‌کند:

  1. عملیاتی مانند نوشتن در گره‌های sysfs هسته ممکن است ناموفق باشد اما به کد چارچوب‌هایی که محرک دارایی را تنظیم می‌کنند برنگردد. درنتیجه، چارچوب‌ها به‌اشتباه فرض می‌کنند که عملیات‌ها موفق بوده‌اند، حتی اگر عملیات‌ها به‌طور بی‌صدا ناموفق بوده باشند.
  2. تعداد عملیات‌هایی که init نوشتار می‌تواند اجرا کند محدود است.

نسخه Android 12 پشتیبانی USB Gadget HAL را برای مدل‌های کنترل شبکه (NCM) و فراخوانی‌های API که هم شماره نسخه HAL و هم سرعت USB را برمی‌گردانند اضافه می‌کند. برای اطلاعات بیشتر درباره فراخوانی‌های API دردسترس ازطریق USB HAL، به خلاصه بسته android.hardware.usb مراجعه کنید.

لایه انتزاع سخت‌افزار و Treble

از اسکریپت‌های init مختص دستگاه به‌عنوان جایگزینی برای لایه‌های HAL برای انجام عملیات USB مختص دستگاه استفاده می‌شد. USB (ازطریق ADB) میانای اصلی برای اشکال‌زدایی مشکلات سیستم است. داشتن یک شبح بومی برای انجام پیکربندی USB وابستگی به کد چارچوب را ازبین می‌برد، بنابراین حتی اگر چارچوب ازکار بیفتد، USB باید کار کند.

تحت مدل Treble که در Android 8.0 معرفی شد، همه HALها از خدمات سیستم جدا می‌شوند و باید در دیمون‌های بومی خودشان اجرا شوند. این امر نیاز به داشتن یک دیو 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 به سیستم لازم باشد.