Google 致力于为黑人社区推动种族平等。查看具体举措
Trang này được dịch bởi Cloud Translation API.
Switch to English

HAL kế thừa

HAL xác định giao diện tiêu chuẩn cho các nhà cung cấp phần cứng để triển khai, điều này cho phép Android không có khả năng triển khai trình điều khiển cấp thấp hơn. Sử dụng HAL cho phép bạn triển khai chức năng mà không ảnh hưởng hoặc sửa đổi hệ thống cấp cao hơn. Trang này mô tả kiến ​​trúc cũ hơn, không còn được hỗ trợ trên Android 8.0. Đối với Android 8.0 trở lên, vui lòng xem Loại HAL .

Hình 1. Các thành phần HAL

Bạn phải triển khai HAL (và trình điều khiển) tương ứng cho phần cứng cụ thể mà sản phẩm của bạn cung cấp. Việc triển khai HAL thường được tích hợp vào các mô-đun thư viện chia sẻ (tệp .so ), nhưng vì Android không bắt buộc tương tác tiêu chuẩn giữa triển khai HAL và trình điều khiển thiết bị, bạn có thể làm những gì tốt nhất cho tình huống của mình. Tuy nhiên, để cho phép hệ thống Android tương tác chính xác với phần cứng của bạn, bạn phải tuân theo hợp đồng được xác định trong từng giao diện HAL dành riêng cho phần cứng.

Để đảm bảo rằng HAL có cấu trúc có thể dự đoán được, mỗi giao diện HAL dành riêng cho phần cứng có các thuộc tính được xác định trong hardware/libhardware/include/hardware/hardware.h Giao diện này cho phép hệ thống Android tải các phiên bản chính xác của mô-đun HAL của bạn một cách nhất quán. Giao diện HAL bao gồm hai thành phần: mô-đun và thiết bị.

Mô-đun HAL

Mô-đun đại diện cho việc triển khai HAL được đóng gói của bạn, được lưu trữ dưới dạng thư viện chia sẻ ( .so file ). Tệp tiêu đề hardware/libhardware/include/hardware/hardware.h hw_module_t xác định cấu trúc ( hw_module_t ) đại diện cho một mô-đun và chứa siêu dữ liệu như phiên bản, tên và tác giả của mô-đun. Android sử dụng siêu dữ liệu này để tìm và tải đúng mô-đun HAL.

Ngoài ra, cấu trúc hw_module_t chứa một con trỏ đến một cấu trúc khác, hw_module_methods_t , chứa một con trỏ đến một hàm mở cho mô-đun. Hàm mở này được sử dụng để bắt đầu giao tiếp với phần cứng mà HAL đang phục vụ như một phần trừu tượng. Mỗi HAL dành riêng cho phần cứng thường mở rộng cấu trúc hw_module_t chung với thông tin bổ sung cho phần cứng cụ thể đó. Ví dụ: trong HAL máy ảnh, cấu trúc camera_module_t chứa cấu trúc hw_module_t cùng với các con trỏ chức năng dành riêng cho máy ảnh khác:

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;

Khi bạn triển khai HAL và tạo cấu trúc mô-đun, bạn phải đặt tên nó là HAL_MODULE_INFO_SYM . Ví dụ từ âm thanh HAL của 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,
    },
};

Thiết bị HAL

Một thiết bị tóm tắt phần cứng của sản phẩm của bạn. Ví dụ: mô-đun âm thanh có thể chứa thiết bị âm thanh chính, thiết bị âm thanh USB hoặc thiết bị âm thanh Bluetooth A2DP.

Một thiết bị được đại diện bởi cấu trúc hw_device_t . Tương tự như một mô-đun, mỗi loại thiết bị xác định một phiên bản chi tiết của hw_device_t chung chứa các con trỏ chức năng cho các tính năng cụ thể của phần cứng. Ví dụ: kiểu cấu trúc audio_hw_device_t chứa các con trỏ hàm đến các hoạt động của thiết bị âm thanh:

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;

Ngoài các thuộc tính tiêu chuẩn này, mỗi giao diện HAL dành riêng cho phần cứng có thể xác định thêm các tính năng và yêu cầu của riêng nó. Để biết chi tiết, hãy xem tài liệu tham khảo HAL cũng như các hướng dẫn riêng cho từng HAL.

Xây dựng mô-đun HAL

Việc triển khai HAL được tích hợp trong các tệp mô-đun ( .so ) và được Android liên kết động khi thích hợp. Bạn có thể xây dựng mô-đun của mình bằng cách tạo tệp Android.mk cho từng triển khai HAL và trỏ đến tệp nguồn của bạn. Nói chung, các thư viện được chia sẻ của bạn phải được đặt tên theo một định dạng cụ thể để chúng có thể được tìm thấy và tải đúng cách. Lược đồ đặt tên hơi khác nhau giữa các mô-đun, nhưng tuân theo mẫu chung là: <module_type>.<device_name> .