Google berkomitmen untuk mendorong terwujudnya keadilan ras bagi komunitas Kulit Hitam. Lihat caranya.
Halaman ini diterjemahkan oleh Cloud Translation API.
Switch to English

HAL warisan

A HAL mendefinisikan antarmuka standar untuk diterapkan oleh vendor perangkat keras, yang memungkinkan Android menjadi agnostik tentang implementasi driver tingkat yang lebih rendah. Menggunakan HAL memungkinkan Anda untuk mengimplementasikan fungsionalitas tanpa mempengaruhi atau memodifikasi sistem tingkat yang lebih tinggi. Halaman ini menjelaskan arsitektur lama, yang tidak lagi didukung mulai Android 8.0. Untuk Android 8.0 dan lebih tinggi, silakan lihat Jenis HAL .

Gambar 1. Komponen HAL

Anda harus menerapkan HAL (dan driver) yang sesuai untuk perangkat keras tertentu yang disediakan produk Anda. Implementasi HAL biasanya dibangun ke dalam modul pustaka bersama (file .so ), tetapi karena Android tidak mengamanatkan interaksi standar antara implementasi HAL dan driver perangkat, Anda dapat melakukan yang terbaik untuk situasi Anda. Namun, untuk mengaktifkan sistem Android agar dapat berinteraksi dengan benar dengan perangkat keras Anda, Anda harus mematuhi kontrak yang ditentukan di setiap antarmuka HAL khusus perangkat keras.

Untuk menjamin bahwa HAL memiliki struktur yang dapat diprediksi, setiap antarmuka HAL khusus perangkat keras memiliki properti yang ditentukan di hardware/libhardware/include/hardware/hardware.h . Antarmuka ini memungkinkan sistem Android memuat versi yang benar dari modul HAL Anda dengan cara yang konsisten. Antarmuka HAL terdiri dari dua komponen: modul dan perangkat.

Modul HAL

Sebuah modul mewakili implementasi HAL terpaket Anda, yang disimpan sebagai perpustakaan bersama ( .so file ). File header hardware/libhardware/include/hardware/hardware.h mendefinisikan sebuah struct ( hw_module_t ) yang mewakili sebuah modul dan berisi metadata seperti versi, nama, dan pembuat modul. Android menggunakan metadata ini untuk menemukan dan memuat modul HAL dengan benar.

Selain itu, struct hw_module_t berisi penunjuk ke struct lain, hw_module_methods_t , yang berisi penunjuk ke fungsi terbuka untuk modul. Fungsi terbuka ini digunakan untuk memulai komunikasi dengan perangkat keras yang HAL-nya berfungsi sebagai abstraksi. Setiap HAL khusus perangkat keras biasanya memperluas struct hw_module_t generik dengan informasi tambahan untuk perangkat keras tertentu itu. Misalnya, di kamera HAL, struct camera_module_t berisi struct hw_module_t bersama dengan pointer fungsi khusus kamera lainnya:

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;

Ketika Anda menerapkan HAL dan membuat modul struct, Anda harus HAL_MODULE_INFO_SYM . Contoh dari audio 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,
    },
};
.dll

Perangkat HAL

Perangkat mengabstraksi perangkat keras produk Anda. Misalnya, modul audio dapat berisi perangkat audio utama, perangkat audio USB, atau perangkat audio Bluetooth A2DP.

Perangkat diwakili oleh struct hw_device_t . Mirip dengan modul, setiap jenis perangkat menentukan versi mendetail dari hw_device_t umum yang berisi penunjuk fungsi untuk fitur khusus perangkat keras. Misalnya, audio_hw_device_t struct audio_hw_device_t berisi penunjuk fungsi ke operasi perangkat audio:

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;

Selain properti standar ini, setiap antarmuka HAL khusus perangkat keras dapat menentukan lebih banyak fitur dan persyaratannya sendiri. Untuk detailnya, lihat dokumentasi referensi HAL serta instruksi individu untuk setiap HAL.

Membangun modul HAL

Implementasi HAL dibangun ke dalam file modul ( .so ) dan ditautkan secara dinamis oleh Android jika diperlukan. Anda bisa membangun modul Anda dengan membuat file Android.mk untuk setiap implementasi HAL dan menunjuk ke file sumber Anda. Secara umum, perpustakaan bersama Anda harus diberi nama dalam format tertentu sehingga dapat ditemukan dan dimuat dengan benar. Skema penamaan sedikit berbeda dari modul ke modul, tetapi mengikuti pola umum: <module_type>.<device_name> .