विरासती एचएएल

संग्रह की मदद से व्यवस्थित रहें अपनी प्राथमिकताओं के आधार पर, कॉन्टेंट को सेव करें और कैटगरी में बांटें.

एक एचएएल हार्डवेयर विक्रेताओं को लागू करने के लिए एक मानक इंटरफ़ेस को परिभाषित करता है, जो एंड्रॉइड को निचले स्तर के ड्राइवर कार्यान्वयन के बारे में अज्ञेयवादी होने में सक्षम बनाता है। एचएएल का उपयोग करने से आप उच्च स्तरीय प्रणाली को प्रभावित या संशोधित किए बिना कार्यक्षमता को लागू कर सकते हैं। यह पृष्ठ पुराने आर्किटेक्चर का वर्णन करता है, जो अब Android 8.0 के रूप में समर्थित नहीं है। Android 8.0 और उच्चतर के लिए, कृपया HAL प्रकार देखें।

एचएएल घटक

चित्र 1. एचएएल घटक

आपके उत्पाद द्वारा प्रदान किए जाने वाले विशिष्ट हार्डवेयर के लिए आपको संबंधित HAL (और ड्राइवर) को लागू करना होगा। एचएएल कार्यान्वयन आम तौर पर साझा लाइब्रेरी मॉड्यूल ( .so फ़ाइलें) में निर्मित होते हैं, लेकिन चूंकि एंड्रॉइड एचएएल कार्यान्वयन और डिवाइस ड्राइवरों के बीच एक मानक इंटरैक्शन को अनिवार्य नहीं करता है, इसलिए आप अपनी स्थिति के लिए सबसे अच्छा कर सकते हैं। हालांकि, एंड्रॉइड सिस्टम को आपके हार्डवेयर के साथ सही ढंग से इंटरैक्ट करने के लिए सक्षम करने के लिए, आपको प्रत्येक हार्डवेयर-विशिष्ट एचएएल इंटरफ़ेस में परिभाषित अनुबंध का पालन करना होगा

यह सुनिश्चित करने के लिए कि एचएएल की एक पूर्वानुमेय संरचना है, प्रत्येक हार्डवेयर-विशिष्ट एचएएल इंटरफ़ेस में hardware/libhardware/include/hardware/hardware.h में परिभाषित गुण हैं। यह इंटरफ़ेस एंड्रॉइड सिस्टम को आपके एचएएल मॉड्यूल के सही संस्करणों को लगातार तरीके से लोड करने की अनुमति देता है। एक एचएएल इंटरफ़ेस में दो घटक होते हैं: मॉड्यूल और डिवाइस।

एचएएल मॉड्यूल

एक मॉड्यूल आपके पैकेज्ड एचएएल कार्यान्वयन का प्रतिनिधित्व करता है, जिसे एक साझा पुस्तकालय ( .so file ) के रूप में संग्रहीत किया जाता है। hardware/libhardware/include/hardware/hardware.h हेडर फ़ाइल एक संरचना ( hw_module_t ) को परिभाषित करती है जो एक मॉड्यूल का प्रतिनिधित्व करती है और इसमें मॉड्यूल के संस्करण, नाम और लेखक जैसे मेटाडेटा शामिल होते हैं। एंड्रॉइड इस मेटाडेटा का उपयोग एचएएल मॉड्यूल को सही ढंग से खोजने और लोड करने के लिए करता है।

इसके अलावा, hw_module_t स्ट्रक्चर में किसी अन्य स्ट्रक्चर के लिए एक पॉइंटर होता है, hw_module_methods_t , जिसमें मॉड्यूल के लिए एक ओपन फंक्शन का पॉइंटर होता है। इस ओपन फ़ंक्शन का उपयोग हार्डवेयर के साथ संचार शुरू करने के लिए किया जाता है जिसके लिए एचएएल एक अमूर्त के रूप में कार्य कर रहा है। प्रत्येक हार्डवेयर-विशिष्ट एचएएल आमतौर पर हार्डवेयर के उस विशिष्ट टुकड़े के लिए अतिरिक्त जानकारी के साथ सामान्य hw_module_t संरचना का विस्तार करता है। उदाहरण के लिए, कैमरा एचएएल में, 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_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,
    },
};

एचएएल डिवाइस

एक उपकरण आपके उत्पाद के हार्डवेयर को सारगर्भित करता है। उदाहरण के लिए, एक ऑडियो मॉड्यूल में एक प्राथमिक ऑडियो डिवाइस, एक 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;

इन मानक गुणों के अलावा, प्रत्येक हार्डवेयर-विशिष्ट एचएएल इंटरफ़ेस अपनी अधिक विशेषताओं और आवश्यकताओं को परिभाषित कर सकता है। विवरण के लिए, एचएएल संदर्भ दस्तावेज़ीकरण के साथ-साथ प्रत्येक एचएएल के लिए अलग-अलग निर्देश देखें।

एचएएल मॉड्यूल का निर्माण

एचएएल कार्यान्वयन मॉड्यूल ( .so ) फाइलों में निर्मित होते हैं और उपयुक्त होने पर एंड्रॉइड द्वारा गतिशील रूप से जुड़े होते हैं। आप अपने प्रत्येक HAL कार्यान्वयन के लिए Android.mk फ़ाइलें बनाकर और अपनी स्रोत फ़ाइलों की ओर इशारा करके अपने मॉड्यूल बना सकते हैं। सामान्य तौर पर, आपके साझा पुस्तकालयों को एक विशिष्ट प्रारूप में नामित किया जाना चाहिए ताकि उन्हें ढूंढा जा सके और ठीक से लोड किया जा सके। नामकरण योजना मॉड्यूल से मॉड्यूल में थोड़ी भिन्न होती है, लेकिन इसके सामान्य पैटर्न का अनुसरण करती है: <module_type>.<device_name>