• Android深度探索心得<9>


    HAL硬件抽象层是建立在Linux驱动之上的一套程序库。这套程序库并不属于Linux内核,而是属于Linux内核层上的应用层。在传统的 Linux系统中Linux驱动一般有两种类型的代码。Google为Android加入HAL主要有以下目的:统一硬件的调用接口。由于HAL有标准的 调用接口,所以可以利用HAL屏蔽了Linux驱动复杂、不统一的接口;解决了GPL协议;针对一些特殊的要求。对于一些硬件,可能需要访问一些用户空间 的资源,或在内核空间不方便完成的工作以及特殊需求。在这种情况下,可以利用位于空间的HAL代码来辅助Linux完成一些工作。

    本章实现的LED驱动包含了Linux驱动、HAL模块、Service程序库、NDK程序和Java程序。

    编写HAL模块的步骤和原理如下:

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

    支持HAL的Linux驱动程序步骤如下:   

    1.编写Linux驱动;

    2.编写HAL Library;

    3.编写Service Library;

    HAL模块本质上就是通过Linux共享库(.so)与Linux驱动交互,然后应用程序再访问Linux共享库与Linux驱动交互,然后应用程序再访问Linux共享库。每一个HAL共享库指定一个ID,再利用这个ID配合一定的规则找到Linux共享库。

  • 相关阅读:
    [模板]KMP
    [BZOJ] 1833: [ZJOI2010]count 数字计数
    [BZOJ] 1563: [NOI2009]诗人小G
    [BZOJ] 2442: [Usaco2011 Open]修剪草坪
    [LOJ] #2360. 「NOIP2016」换教室
    9.18模拟赛
    [BZOJ] 2006: [NOI2010]超级钢琴
    [BZOJ] 1143: [CTSC2008]祭祀river
    [51Nod] 1218 最长递增子序列 V2
    [BZOJ] 3307: 雨天的尾巴
  • 原文地址:https://www.cnblogs.com/Renker/p/5641245.html
Copyright © 2020-2023  润新知