- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Android硬件抽象层HAL之深入剖析
作为一个搞android驱动或者说搞底层的人,我觉得对于hal那是必须要掌握的,而且必须达到一定深度,于是我总结了一下,将整个自己的分析思路写下来。
主要是看android源代码,根据源代码得到的思路。(看源代码比看什么著作书籍都管用)
android HAL是什么?为什么有它?
硬件抽象层是介于android内核kernel和上层之间的抽象出来的一层结构。他是对linux驱动的一个封装,对上层提供统一接口,上层应用不必知道下层硬件具体怎么实现工作的,它屏蔽了底层的实现细节。
它在整个android架构中的位置如下图所示:
传统的linux对硬件的操作基本上在内核空间的linux驱动程序中实现了,那么现在为什么那么多此一举把对硬件的操作分为两部分,hal和linux驱动呢?
而且hal属于用户空间,linux驱动属于内核空间。其实并不多余。那么为什么要高出这么个东西,理由是很多的:
1.谷歌搭好了hal的框架,为上层framework打通过jni调用hal提供了统一的api,硬件开发商或者移植人员只需要按照框架开发即可,无需话费精力在与上层的交互上的实现上,将精力放在hal层本身的实现上即可。
2.从商业角度,许多硬件厂商不愿意将自己硬件相关一些核心的东西开源出去,假如将对自己硬件的驱动程序全部放入内核空间驱动程序实现,那么必须遵循GPL协议,是必需开源的。有了HAL层之后,他们可以把一些核心的算法之类的东西的实现放在HAL层,而hal层位于用户空间,不属于linux内核,和android源码一样遵循的是appache协议,这个是可以开源或者不开的。
?
搞清楚了hal的存在意义,下面来根据hal层源码分析一下hal到底是怎么样个架构和实现原理,深入剖析一下。
android hal层的代码主要位于/hardware/libhardware下面我们从上往下走。
在hal层中,各类硬件的都是以硬件模块的形式描述的hal层中是用hw_module_t结构体来描述的,而每一类硬件模块中又有各个独立的硬件,hal中是用hw_device_t结构体来描述的。
上层app通过jni调用硬件时,首先得获取到hw_module_t结构体,也即是硬件模块,有了这个才能再对硬件进行操作。那么我们来看看看看这两个结构体定义是什么样子的。
它们的定义在/hardware/libhardware/include/hardware/hardware.h里面。
a.? hw_module_t表示硬件模块,它主要包含了一些硬件模块的信息,结构体的定义:
/**
* Every hardware module must have a data structure named HAL_MODULE_INFO_SYM
* and the fields of this data structure must begin with hw_module_t
* followed by module specific information.
*/
typedef struct hw_module_t {
/** tag must be initialized to HARDWARE_MODULE_TAG */
uint32_t tag; ?//tag,根据引文注释可以看到必须被初始化为HARDWARE_MODULE_TAG
/** major version number for the module */
uint16_t version_major;//主版本号
/** minor version number of the module */
uint16_t version_minor;//次版本号
/** Identifier of module */
const char *id;//模块id字符串
/** Name of this module */
const char *name;//模块名
/** Author/owner/implementor of the module */
const char *author;//作者
/** Modules methods */
struct hw_module_methods_t* methods;//硬件模块方法结构体
/** modules dso */
void* dso;//打开硬件模块的库时得到的句柄
/** padding to 128 bytes, reserved for future use */
uint32_t reser
您可能关注的文档
最近下载
- 人教版高中英语选择性必修第一册《UNIT 4 BODY LANGUAGE》大单元整体教学设计.docx
- 4.1 函数 2025-2026学年北师大版数学八年级上册.pptx VIP
- Unit 4 Amazing Plants and Animals 第5课时Project & Reflecting2025人教版英语八年级上册.docx
- 租地协议合同书(养殖场).docx VIP
- Unit 4 Amazing Plants and Animals Section B(1a-2d)课件 2025人教版英语八年级上册.ppt
- Unit 4 Amazing Plants and Animals Project & Reflecting 课件 2025人教版英语八年级上册.pptx
- Unit 4 Amazing Plants and Animals Section B 背默练课件 人教版英语八年级上册.ppt
- 初中英语新人教版八年级上册Unit 4 Amazing Plants and Animals 单元知识点(2025秋).doc VIP
- 医院保洁服务方案投标文件(技术方案).doc
- 《通风与空调工程施工质量验收规范》GB50243-2016.docx VIP
文档评论(0)