首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

HAL 硬件抽象层介绍

和你一起终身学习,这里是程序员Android

本篇文章主要介绍Android开发中的部分知识点,通过阅读本篇文章,您将收获以下内容:

和你一起终身学习,这里是程序员 Android

本篇文章主要介绍 开发中的部分知识点,通过阅读本篇文章,您将收获以下内容:

一、HAL 概述

二、HAL 模块介绍

三、HAL 设备介绍

四、构建HAL模块

一、HAL 概述

HAL定义了供硬件供应商实施的标准接口,该接口使Android无需考虑底层驱动程序的实现。使用HAL可使您实现功能而不会影响或修改更高级别的系统。本页介绍了较旧的架构,该架构从Android 8.0开始不再受支持。对于Android 8.0及更高版本,请参见 HAL类型。

图 1. HAL 组件

您必须为产品提供的特定硬件实现相应的HAL(和驱动程序)。HAL实现通常内置于共享库模块(.so文件)中,但是由于Android并未强制HAL实现与设备驱动程序之间进行标准交互,因此您可以根据自己的情况采取最佳措施。但是,为了使Android系统能够与您的硬件正确交互,您必须遵守每个特定于硬件的HAL接口中定义的合同。

为了确保HAL具有可预测的结构,每个特定于硬件的HAL接口都具有在中定义的属性 。此界面允许Android系统以一致的方式加载正确的HAL模块版本。HAL接口包含两个组件:模块和设备。

二、HAL 模块介绍

模块代表打包的HAL实现,存储为共享库(.so file)。该 头文件定义一个结构(hw_module_t),其表示一个模块,并包含元数据,如版本,名称,以及该模块的作者。Android使用此元数据来正确查找和加载HAL模块。

另外,该hw_module_t结构包含指向另一个结构的指针,该结构包含指向hw_module_methods_t模块的打开函数的指针。此开放功能用于启动与HAL用作其抽象的硬件的通信。每个特定于硬件的HAL通常hw_module_t 使用该特定硬件的附加信息来扩展通用结构。例如,在摄像机HAL中,该camera_module_t结构包含一个 hw_module_t结构以及其他摄像机特定的函数指针:

实现HAL并创建模块struct时,必须将其命名为 。Nexus 9音频HAL中的示例:

三、HAL 设备介绍

设备会抽象您产品的硬件。例如,音频模块可以包含主要音频设备,USB音频设备或Bluetooth A2DP音频设备。

设备由该hw_device_t结构表示。类似于模块,每种类型的设备都定义了泛型的详细版本, hw_device_t其中包含针对硬件特定功能的功能指针。例如,audio_hw_device_t结构类型包含指向音频设备操作的函数指针:

除了这些标准属性,每个特定于硬件的HAL接口都可以定义更多自己的功能和要求。有关详细信息,请参见HAL参考文档以及每个HAL的单独说明。

四、构建HAL模块

HAL实现内置于模块(.so)文件中,并在适当时由Android动态链接。您可以通过Android.mk为每个HAL实现创建文件并指向源文件来构建模块。通常,必须以特定格式命名共享库,以便可以找到并正确加载它们。各个模块的命名方案略有不同,但遵循以下一般模式:。

友情推荐

至此,本篇已结束,如有不对的地方,欢迎您的建议与指正。同时期待您的关注,感谢您的阅读,谢谢!

分享到朋友圈吧,方便您使用时快速查找!

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20191115A02XI600?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券