HALs قديمة

يحدد HAL واجهة قياسية لموردي الأجهزة لتنفيذها، التي تمكّن نظام Android من تجنُّب عمليات تنفيذ برامج التشغيل ذات المستوى الأدنى. يتيح لك استخدام HAL تنفيذ الوظائف دون التأثير أو التعديل بنظام المستوى الأعلى. تصف هذه الصفحة البنية القديمة، والتي ليست أصبح مدعومًا بدءًا من نظام Android 8.0. على الإصدار 8.0 من نظام التشغيل Android والإصدارات الأحدث، يُرجى مراجعة نظرة عامة على HAL:

مكونات HAL

الشكل 1. مكونات HAL

يجب تنفيذ HAL (وبرنامج التشغيل) المقابل للرابط الأجهزة التي يوفرها منتجك. عادةً ما يتم تضمين عمليات تنفيذ HAL في وحدات المكتبة المشتركة (.so ملف)، ولكن نظرًا لعدم فرض Android بتفاعل قياسي بين تطبيق HAL وبرامج تشغيل الأجهزة، يمكنك فعل ما هو أفضل لموقفك. ومع ذلك، لتمكين نظام Android من للتفاعل بشكل صحيح مع أجهزتك، يجب الالتزام عقد محدد في كل واجهة من واجهات HAL الخاصة بالأجهزة.

لضمان أن تكون HALs لها هيكل يمكن التنبؤ به، فإن كل جهاز خاص تحتوي واجهة HAL على خصائص محددة في hardware/libhardware/include/hardware/hardware.h هذه الواجهة لنظام Android بتحميل الإصدارات الصحيحة من وحدات HAL في بطريقة متسقة. تتألف واجهة HAL من عنصرين: الوحدات والأجهزة.

وحدات HAL

تمثل الوحدة تنفيذ HAL المجمّع، والذي يتم تخزينه كـ المكتبة المشتركة (.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 مثال من طبقة تجريد الأجهزة (HAL) الصوتية لجهاز Nexus 9:

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) وتكون بشكل ديناميكي من خلال Android عندما يكون ذلك مناسبًا. يمكنك إنشاء وحداتك من خلال إنشاء Android.mk ملف لكل عملية من عمليات تنفيذ HAL والإشارة إلى ملفات المصدر. بشكل عام، يجب أن تكون مكتباتك المشتركة تسميتها بتنسيق محدد بحيث يمكن العثور عليها وتحميلها بشكل صحيح. التسمية يختلف قليلاً من وحدة إلى أخرى، ولكنه يتبع النمط العام من: <module_type>.<device_name>.

طبقة تجريد الأجهزة (HAL) قديمة

يشير مصطلح Legacy HAL على نطاق واسع إلى جميع HALs قبل الإصدار 8.0 من Android (التي تم إيقافها في Android 8). تشير رسالة الأشكال البيانية يتم تحديد الجزء الأكبر من واجهات نظام Android (الكاميرا والصوت وأدوات الاستشعار وما إلى ذلك) ضمن "الأجهزة/libhardware/include/الأجهزة" وتتوفّر فيها إصدارات تقريبية وواجهة تطبيق ثنائية (ABI) ثابتة تقريبًا. حاسمة تحتوي بعض الأنظمة الفرعية (بما فيها Wi-Fi وطبقة الواجهة اللاسلكية والبلوتوث) على أنظمة أخرى غير موحدة في "libhardware_legacy" أو تتخللها في قاعدة التعليمات البرمجية. لا يمكن إطلاقًا لقواعد HALs القديمة تقديم ضمانات الاستقرار الثابت.