Eski HAL'ler

HAL, donanım tedarikçilerinin uygulaması için standart bir arayüz tanımlar, Bu da Android'in daha düşük düzeydeki sürücü uygulamaları konusunda bağımsız olmasını sağlar. HAL kullanmak, işlevleri etkilemeden veya değiştirmeden uygulamanıza olanak tanır. üst seviye sistemi. Bu sayfada, artık Android 8.0 itibarıyla destekleniyor. Android 8.0 ve sonraki sürümler için lütfen bkz. HAL'ye Genel Bakış.

HAL bileşenleri

Şekil 1. HAL bileşenleri

HAL'yi (ve sürücüyü) kullanmanız gerekir. donanım ve donanım yazılımı. HAL uygulamaları genellikle paylaşılan kitaplık modülleri (.so dosya) ancak Android'in zorunlu kılmadığı HAL uygulaması ile cihaz sürücüleri arasında standart bir etkileşimi kullanıyorsanız, ve durumunuza en uygun olanı yapın. Ancak Android sisteminin etkileşimde bulunduğunuzda şu politikalara uymanız gerekir: her donanıma özel HAL arayüzünde tanımlanan sözleşmedir.

HAL'lerin tahmin edilebilir bir yapıya sahip olmasını sağlamak için her donanıma özel HAL arayüzünde şurada tanımlanmış özellikler bulunur: hardware/libhardware/include/hardware/hardware.h Bu arayüz Android sisteminin, HAL modüllerinizin doğru sürümlerini yapmanızı sağlar. HAL arayüzü iki bileşenden oluşur: modüller ve cihazlar.

HAL modülleri

Modüller, paylaşılan kitaplık (.so file). İlgili içeriği oluşturmak için kullanılan hardware/libhardware/include/hardware/hardware.h başlık dosyası bir modülü temsil eden bir struct (hw_module_t) tanımlar ve modülün sürümü, adı ve yazarı gibi meta verileri içerir. Android HAL modülünü doğru şekilde bulup yüklemek için bu meta verileri kullanır.

Ek olarak, hw_module_t struct'ta başka bir yapı, hw_module_methods_t içerir. Bu istem, açık bir fonksiyondur. Bu açık işlev, SSCS'nin donanımla kurulan iletişimle ortaya çıkar. Her donanıma özgü HAL, genellikle genel hw_module_t donanım parçasına ait ek bilgilerle yapılandırılmıştır. Örneğin, Örneğin, kamera HAL'sindeki camera_module_t struct'ı, Kameraya özel diğer işlevlerle birlikte hw_module_t struct işaretçiler:

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 uygulayıp modül struct'ını oluşturduğunuzda HAL_MODULE_INFO_SYM Nexus 9 ses HAL'sinden örnek:

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 cihazları

Bir cihaz, ürününüzün donanımını soyutlar. Örneğin, modül; birincil ses cihazı, USB ses cihazı veya Bluetooth A2DP ses cihazı.

Bir cihaz, hw_device_t yapısıyla temsil edilir. Benzer modülünün bir parçası olarak, her cihaz türü, genel modelin Belirli özellikler için işlev işaretçileri içeren hw_device_t donanımla ilgili. Örneğin, audio_hw_device_t struct türü ses cihazı işlemlerine ilişkin işlev işaretçileri içerir:

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;

Bu standart özelliklere ek olarak, her donanıma özgü HAL arayüz, kendi özellik ve gereksinimlerinin çoğunu tanımlayabilir. Ayrıntılı bilgi için HAL referans belgelerini ve her bir HAL için ayrı ayrı uygulamanız gerekir.

HAL modülleri oluşturma

HAL uygulamaları, modül (.so) dosyalarında yerleşiktir ve Android tarafından dinamik olarak bağlanır. Modüllerinizi HAL uygulamalarınızın her biri için Android.mk dosyası oluşturuluyor ve kaynak dosyalarınızı gösterir. Genel olarak, paylaşılan kitaplıklarınızın düzgün şekilde bulunabilmesi ve yüklenebilmesi için belirli bir biçimde adlandırılmıştır. Adlandırma şema modülden modüle biraz farklılık gösterse de genel model (<module_type>.<device_name>).

Eski HAL

Eski HAL terimi, genel olarak Android 8.0'dan önceki tüm HAL'leri (Android 8'de kullanımdan kaldırılmıştır) ifade eder. İlgili içeriği oluşturmak için kullanılan Android sistem arayüzlerinin çoğu (kamera, ses, sensörler vb.) "donanım/libhardware/dahil/donanım" olmalıdır ve kabaca sürüm oluşturma ile yaklaşık olarak kararlı bir ABI'ya sahip olmalıdır. CEVAP Bazı alt sistemlerde (Kablosuz, Radyo Arayüz Katmanı ve Bluetooth dahil) standart dışı başka sistemlerle "libhardware_legacy" içindeki arayüzleri veya kod tabanı boyunca karışık şekilde işler. Eski HAL'ler hiçbir zaman sağladığı güçlü kararlılık garantileridir.