第九章

---恢复内容开始---

    HAL是属于Linux内核层上的应用层,增加HAL的主要目的是除了尽量避免应用程序直接访问Linux驱动外,还有一个重要的原因,就是保护“私人财产” 。

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

    第一步编写Linux驱动:linux源代码尽量简洁,尽可能将业务的逻辑放到HAL Library。

    第二步编写Hal library:Hal Linrary 是普通的Linux Library(*。so)文件。但是在类库文件由一个接口。通过HAL_MODULE_INFO_SYM 变量实现。Service Library 就是通过这个接口定义的ID定位Hal Library的。

    第三步编写Service Library :但是这一步并不是必须的,service Library也是Linux library。

                HAL硬件抽象层是建立在Linux驱动之上的一套程序库。这套程序库并不属于Linux内核,而是属于Linux内核层上的应用层。在传统的 Linux系统中Linux驱动一般有两种类型的代码。GoogleAndroid加入HAL主要有以下目的:统一硬件的调用接口。由于HAL有标准的 调用接口,所以可以利用HAL屏蔽了Linux驱动复杂、不统一的接口;解决了GPL协议;针对一些特殊的要求。对于一些硬件,可能需要访问一些用户空间 的资源,或在内核空间不方便完成的工作以及特殊需求。在这种情况下,可以利用位于空间的HAL代码来辅助Linux完成一些工作。在Android系统中使用Linux驱动有两种方式,一种是通过传统的方式直接与Linux驱动交互。例如,直接读写设备文件的数据。另一种是Android特有的,就是通过HAL模块。HAL模块本质上就是通过Linux共享库与Linux驱动交互,然后应用程序再访问linux共享库,早期的HAL模块由应用程序直接访问linux共享库的方式调用。而高版本的Android系统为HAL增加了Stub,换句话说,就是为了每一个HAL共享库指定一个ID,再利用这个ID配合一定的规则找到Linux共享库,这样Linux共享库更换文件名,移动位置都很方便,Google也建议使用stub的方式编写HAL模块。Android_.H现二的源代码存储的位置并不固定, 一般会存储在<Android源代码目录>/hardware 目录中。其中<Android 源代码目录>/hardware/libhardware legacy 目录用来存HAL 架构的源代码文件。新HAL 架构的源代码在<Android 源代码目录>/hardware/libhardware目录中,当然,这些源代码文件也可以放在<Android 源代码目录>/hardware 或其他的目录。最终编译生成的.so 文件主要放在Android 系统的/system/lib/hw 目录。

编写HAL模块的步骤和原理如下:定义结构体和宏;编写HAL模块的open函数;定义hw_module_methods_t结构体变量;定义HAL_MODULE_INFO_SYM变量;编写HAL模块的close函数;编写控制LED的函数;支持HALLinux驱动程序步骤如下:   编写Linux驱动;编写HAL Library;编写Service Library.

---恢复内容结束---

转载于:https://www.cnblogs.com/jingqianfei/p/5637770.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值