• 第九章 硬件抽象层:HAL


    第九章 硬件抽象层:HAL

          HAL是建立在Linux驱动之上的一套程序库。是属于Linux内核之上的应用层。

         第一部分讲为什么要在Android中加入HAL,传统的Linux系统中Linux驱动一般有两种:访问硬件寄存器的代码和业务逻辑代码。而HAL是位于Android的系统运行库层,采用Android licence2.0协议,就不必开源了。加入Hal的目的:(1)统一硬件的调用接口。(2)解决了GPL版权问题。(3)针对一些特殊的要求。HAL架构Android SDK和应用程序(APK)、NDK部分、Service程序库(.so)、HAL程序库(.so)(将.so文件隐藏起来)、Linux驱动程序。

         第三部分写为LED驱动增加HAL, 编写支持HAL的Linux驱动程序的步骤:(1)编写Linux驱动。(2)编写HAL library(即普通的Linux library(*.so)文件)。(3)编写service library。

          编译和安装Led驱动sh build.sh。rwdev:命令行程序。<r|w>:读或写命令。〈dev_file〉:设备文件名。〈byte_count〉:写入或读取的字节数。<byte1>:写入的字节。HAL输入Android的一部分,在编译HAL模块之前需要Android源代码。Leds_hal.h头文件用于定义结果体、宏和引用一些系统的头文件。

          编写HAL模块的步骤:1.定义结构体和宏。2.编写HAL模块的open函数。3.定义hw_module_methods_t结构体变量。4.定义HAL_HODILE_INFO_SYM变量.5.编写HAL模块的close函数。6.编写控制LED的函数。

          编写调用HAL模块的Service。HAL模块库文件的存放路径:/sysrem/lib/hw和/vendor/lib/hw。HAL模块库文件的命名规则是ID.suffix.so。编写调用Service的java库。之后进行LED驱动的测试。

        在Android系统中使用Linux驱动的两种方式:1.直接与Linux驱动交互。2.通过HAL模块。HAL模块本质上就是通过Linux共享库(.so)与Linux驱动交互,然后应用程序在访问Linux共享库。

        这一章的内容不是太难,但是对于理解Android硬件抽象层由很大的帮助,通过本章的学习使我对Android有了更深的理解。

     博客园地址:http://www.cnblogs.com/j-wei

  • 相关阅读:
    4.iptables 网络防火墙
    iterator not dereferencable问题
    秒杀多线程系列中的题目
    说说僵尸和孤儿进程的那点儿事
    Linux的fork()写时复制原则(转)
    linux进程原语之fork()
    linux--多进程进行文件拷贝
    哈夫曼树与哈夫曼编码
    csp公共钥匙盒
    字典树
  • 原文地址:https://www.cnblogs.com/j-wei/p/5638277.html
Copyright © 2020-2023  润新知