zoukankan      html  css  js  c++  java
  • 硬件抽象层

      HAL是建立在Linux驱动之上的一套程序。这套程序库并不属于Linux内核,而是属于Linux内核层之上的应用层。增加HAL的主要目的除了尽量避免应用程序直接访问Linux驱动外,还有一个重要原因,就是保护“私人财产”。那么它又是怎么保护的呢?

      HAL所在的位置是Android的系统运行库层,在应用框架层和Linux内核层之间,而Android采用了Apache Licence2.0协议发布,Apache Licence2.0协议并未要求使用基于Apache Licence2.0协议的源代码的软件也必须开源。由于HAL属于Android的一部分,自然也不必开源了。当然加入HAL还有其他目的:统一硬件的调用接口;针对一些特殊的要求。

      HAL的架构由最开始到现在有了很大的变化,原始的架构暂且不说,新版本的Android系统将HAL架构修改成了如图所示样子。

          

      从上图可以看出,调用HAL模块的代码并不需要直接装载.so文件,而只需通过一个ID来定位相应的.so文件。

      AndroidHAL的源代码存储的位置并不固定,一般会存储在Android源代码目录/hardware目录中,其中Android源代码目录/hardware/libhardware_legacy目录用来存储臼HAL架构的源代码文件。新HAL架构的源代码在Android源代码目录/hardwarelibhardware目录中。当然也可以放在Android源代码目录/hardware或其他目录中。最终编译生成的.so文件主要放在Android系统的/system/lib/hw目录,同样可以放其他目录。

      通过上面的介绍对HAL已经有了大概的了解,那么该怎么编写一款支持HAL的Linux驱动程序呢?

      1、编写Linux驱动,如果要为Linux驱动添加HAL,而且想尽量保护敏感数据,Linux驱动的代码要尽量简洁,尽可能将业务逻辑放到HAL Library中。

      2、编写HAL Library,这其实就是普通的Linux Library文件,但这类库文件有一个接口。通过HAL_MODULE_INFO_SYM变量实现。Service Library就是通过在这个接口中定义的ID定位HAL Libary的。

      3、编写Service Library,这一步其实并不是必须的,但是心的HAL架构要求我们这样做。Service Library也是Linxu Library。这一步比较灵活。Service Library可以是一般的Linux Library,也可以是JNI Library。

      以上就是一个支持HAL的Linux驱动程序编写的步骤。

  • 相关阅读:
    JS BOM对象 History对象 Location对象
    JS 字符串对象 数组对象 函数对象 函数作用域
    JS 引入方式 基本数据类型 运算符 控制语句 循环 异常
    Pycharm Html CSS JS 快捷方式创建元素
    CSS 内外边距 float positio属性
    CSS 颜色 字体 背景 文本 边框 列表 display属性
    【Android】RxJava的使用(三)转换——map、flatMap
    【Android】RxJava的使用(二)Action
    【Android】RxJava的使用(一)基本用法
    【Android】Retrofit 2.0 的使用
  • 原文地址:https://www.cnblogs.com/ww3344/p/5616983.html
Copyright © 2011-2022 走看看