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'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>
).