Google is committed to advancing racial equity for Black communities. See how.
این صفحه به‌وسیله ‏Cloud Translation API‏ ترجمه شده است.
Switch to English

میراث HAL ها

A HAL یک رابط استاندارد برای فروشندگان سخت افزار برای پیاده سازی تعریف می کند ، که Android را قادر می سازد در مورد پیاده سازی درایورهای سطح پایین اطلاعاتی داشته باشد. استفاده از HAL به شما امکان می دهد عملکرد را بدون تأثیر یا تغییر در سیستم سطح بالاتر پیاده سازی کنید. این صفحه معماری قدیمی را توصیف می کند ، که از Android 8.0 دیگر پشتیبانی نمی شود. برای Android 8.0 و بالاتر ، لطفاً به انواع HAL مراجعه کنید.

شکل 1. اجزای HAL

شما باید HAL (و درایور) مربوطه را برای سخت افزار خاصی که محصول شما ارائه می دهد پیاده سازی کنید. پیاده سازی های HAL معمولاً در ماژول های کتابخانه مشترک (پرونده های .so ) .so شده اند ، اما چون Android تعامل استاندارد بین پیاده سازی HAL و درایورهای دستگاه را الزامی نمی کند ، شما می توانید بهترین کار را برای شرایط خود انجام دهید. اما ، برای اینکه سیستم Android بتواند به درستی با سخت افزار شما تعامل داشته باشد ، باید قرارداد تعریف شده در هر رابط HAL مخصوص سخت افزار را رعایت کنید.

برای اطمینان از اینکه ساختار HAL دارای ساختار قابل پیش بینی است ، هر رابط HAL مخصوص سخت افزار دارای خصوصیاتی است که در hardware/libhardware/include/hardware/hardware.h . این رابط به سیستم Android اجازه می دهد نسخه های صحیح ماژول های HAL شما را به روشی ثابت بارگیری کند. یک رابط HAL از دو جز components تشکیل شده است: ماژول ها و دستگاه ها.

ماژول های HAL

یک ماژول پیاده سازی HAL بسته بندی شده شما را نشان می دهد ، که به عنوان کتابخانه مشترک ( .so file ) .so file . پرونده سرآیند hardware/libhardware/include/hardware/hardware.h یک ساختار ( hw_module_t ) را تعریف می کند که یک ماژول را نشان می دهد و شامل فراداده هایی مانند نسخه ، نام و نویسنده ماژول است. Android از این فراداده برای یافتن و بارگیری صحیح ماژول HAL استفاده می کند.

علاوه بر این ، ساختار hw_module_t حاوی یک اشاره گر به یک ساختار دیگر ، hw_module_methods_t که حاوی اشاره گر برای عملکرد باز ماژول است. این عملکرد باز برای شروع ارتباط با سخت افزاری که HAL به عنوان انتزاع برای آن استفاده می شود ، استفاده می شود. هر HAL مخصوص سخت افزار معمولاً ساختار عمومی hw_module_t با اطلاعات اضافی برای آن سخت افزار خاص گسترش می دهد. به عنوان مثال ، در دوربین HAL ، camera_module_t ساختار شامل ساختار hw_module_t همراه سایر نشانگرهای عملکرد خاص دوربین است:

typedef struct camera_module {
    hw_module_t common;
    int (*get_number_of_cameras)(void);
    int (*get_camera_info)(int camera_id, struct camera_info *info);
} camera_module_t;

وقتی HAL را پیاده سازی و ساختار ماژول را ایجاد کردید ، باید نام آن را HAL_MODULE_INFO_SYM . نمونه ای از Nexus 9 HAL صوتی:

struct audio_module HAL_MODULE_INFO_SYM = {
    .common = {
        .tag = HARDWARE_MODULE_TAG,
        .module_api_version = AUDIO_MODULE_API_VERSION_0_1,
        .hal_api_version = HARDWARE_HAL_API_VERSION,
        .id = AUDIO_HARDWARE_MODULE_ID,
        .name = "NVIDIA Tegra Audio HAL",
        .author = "The Android Open Source Project",
        .methods = &hal_module_methods,
    },
};

دستگاه های HAL

دستگاهی سخت افزار محصول شما را خلاصه می کند. به عنوان مثال ، یک ماژول صوتی می تواند شامل یک دستگاه صوتی اولیه ، یک دستگاه صوتی USB یا یک دستگاه صوتی بلوتوث A2DP باشد.

دستگاهی با ساختار hw_device_t . مشابه هر ماژول ، هر نوع دستگاه نسخه مفصلی از نسخه عمومی hw_device_t را تعریف می کند که حاوی نشانگرهای عملکرد برای ویژگی های خاص سخت افزار است. به عنوان مثال ، نوع audio_hw_device_t شامل نشانگرهای عملکرد عملکرد دستگاه صوتی است:

struct audio_hw_device {
    struct hw_device_t common;

    /**
     * used by audio flinger to enumerate what devices are supported by
     * each audio_hw_device implementation.
     *
     * Return value is a bitmask of 1 or more values of audio_devices_t
     */
    uint32_t (*get_supported_devices)(const struct audio_hw_device *dev);
  ...
};
typedef struct audio_hw_device audio_hw_device_t;

علاوه بر این خصوصیات استاندارد ، هر رابط HAL مخصوص سخت افزار می تواند ویژگی ها و نیازهای بیشتری را برای خود تعریف کند. برای جزئیات ، به اسناد مرجع HAL و همچنین دستورالعمل های جداگانه برای هر HAL مراجعه کنید.

ساخت ماژول های HAL

پیاده سازی های HAL در پرونده های ماژول ( .so ) .so شده اند و در صورت لزوم توسط Android به صورت پویا مرتبط می شوند. شما می توانید با ایجاد فایل های Android.mk برای هر یک از پیاده سازی های HAL و با اشاره به فایل های منبع ، ماژول های خود را بسازید. به طور کلی ، کتابخانه های مشترک شما باید در قالب خاصی نامگذاری شوند تا بتوانند به درستی پیدا و بارگیری شوند. طرح نامگذاری از ماژول به ماژول کمی متفاوت است ، اما از الگوی کلی پیروی می کند: <module_type>.<device_name> .