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

GoogleAndroid加入HAL主要有如下的目的

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

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

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

编写一款支持HAL Linux 动程序的步骤

1 步 编写Linux 驱动

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

2 步:编写HAL

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

3 步:编写Service Library

尽管这步并不是必需的,但新的HAL 架构要求我们这样做。Service Library 也是Linux Library 。这一步比较灵活。Service Library 可以是一般的Linux Library,也可以是JNI Library

原文地址:https://www.cnblogs.com/limomo/p/5608199.html