Android深度探索与HAL驱动开发(卷1)-- 第九章随笔

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android深度探索与HAL驱动开发(卷1)-- 第九章随笔相关的知识,希望对你有一定的参考价值。

第9章 硬件抽象层:HAL

Hal(Hardware Abstract Layer,硬件抽象层)是建立在Linux驱动之上的一套程序库。这套程序库并不属于Linux内核,而是属于Linux内核层之上的应用层。

 

编写支持HAL的Linux驱动程序的步骤:

第一步:编写Linux驱动

第二步:编写HAL Library

第三步:编写 Service Library

 

编写HAL 模块的步骤和原理如下:

第一步:定义结构体和宏

第二步:编写HAL模块的open函数

第三步:定义hw_module_methods_t结构体变量

第四步:定义HAL_MODULE_INFO_SYM变量

第五步:编写HAL模块的close函数

第六步:编写控制LED的函数

 

总结:在android系统中使用Linux驱动有两种方式:

一种是通过传统的方式直接与Linux驱动交互。例如,直接读写设备文件的数据

另一种方式是Android特有的,就是通过HAL模块。HAL模块本质上就是通过Linux共享库(.so)与Linux驱动交互,然后应用程序再访问Linux共享库。早期的HAL模块由应用程序直接按访问Linux共享库的方式调用。而高版本的Android系统为HAL增加了Stub。换句话说,就是为每一个HAL共享库指定一个ID,再利用这个ID配合一定的规则找到Linux共享库。这样Linux共享库更换文件名,移动位置都很方便(因为HAL共享库的路径和文件名都不是定死的),Google也建议使用Stub的方式编写HAL模块。

 

以上是关于Android深度探索与HAL驱动开发(卷1)-- 第九章随笔的主要内容,如果未能解决你的问题,请参考以下文章

Android深度探索(卷1)HAL与驱动开发学习笔记

Android深度探索(卷1)HAL与驱动开发阅读心得9

《Android深度探索》(卷1)HAL与驱动开发读后感

Android深度探索(卷1)HAL与驱动开发第九章总结

读《Android深度探索(卷1)HAL与驱动开发》的一些思考09

Android深度探索(卷1)HAL与驱动开发第六章总结