码迷,mamicode.com
首页 > 移动开发 > 详细

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

时间:2016-07-05 18:53:16      阅读:172      评论:0      收藏:0      [点我收藏+]

标签:

硬件抽象层:HAL

Google为Android加入HAL主要有如下的目的:

1.统一硬件的调用接口。由于HAL有标准的调用接口,所以可以利用 HAL屏蔽Linux驱动复杂、不统一的接口;

2.解决了GPL版权问题。由于Linux内核基于GPL协议,而Android基于Apache Licence 2.0协议。因此Google玩了个“穿越”,将原本位于Linux驱动中的敏感代码向上移了一个层次。这样这些敏感代码就摆脱GPL协议的束缚,那些不想开源的Linux驱动作者也就没必要开源了。

3.针对一些特殊的要求。对于有些硬件,可能需要访问一些用户空间的资源,或在内核空间不方便完成的工作以及特殊需求。在这种情况下,可以利用位于用户空间HAL代码来辅助Linux驱动完成一些工作。

编写一款支持HAL的Linux驱动程序要比编写普通的 Linux 驱动程序复杂一些,但这些付出 是值得。因为加入HAL会使组成 Linux 驱动的一整套Library的各部分更独立,更容易维护。步骤1.编写Linux驱动

“编写Linux驱动”,从表明上看是废话,但如果要为Linux驱动添加HAL,而且想尽量保护敏 感数据。Linux驱动的代码就要尽量简洁,尽可能将业务逻辑放HAL Library中。

步骤2.编写HAL Library

HAL Library就是普通的Linux Library(*.so )文件。但这类库文件有一个接口。通过HAL_MODULE_INFO_SYM变量实现。Service Library通过在这个接口中定义的ID定位HAL Library的。

步骤3.编写 Service Library

尽管这步并不是必需的,但新的HAL架构要求我们这样做。Service Library 也是Linux Library。这一步比较灵活。Service Library可以是一般的Linux Library,也可以是JNI Library。实际上这一步除了用C/C++件实现的*.so库文件外,还应该包含Java编写的服务管理类 (ServiceManager)。ServiceManager会调用Service Library。而APK程序会调用ServiceManager类来访问Service Library。

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

标签:

原文地址:http://www.cnblogs.com/liuqiling/p/5644308.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!