1.HAL(Handerware Abstraction Layer,硬件抽象层)是建立在linux程序上的一套程序库,这套程序库并不属于内核,而是属于内核之上的应用层。

2.要在Android中加入HAL的原因:在linux驱动中一般有两种类型的代码:访问硬件寄存器的代码和业务逻辑代码。对于访问硬件寄存器的代码而言,并没有秘密,这都是调用linux内核的标准函数进行的标准操作。

3.Google为android加入HAL其主要目的在于:

统一硬件的调用接口;

解决了GPL版权问题;

针对一些特殊要求。

4.andriod HAL架构

在Andriod系统中使用程序库,条用位于内核空间的Linux驱动,然后Andriod应用程序。

HAL的基本原理是在android系统中使用程序库调用内核空间的linux驱动。

5. 为LED增加HAL:将所有业务逻辑从LED驱动移植到HAL模块,而LED驱动模块只保留读写寄存器的工程能。加入HAL会使组成linux驱动的一整套library更加独立,更加容易维护。

6.编写一款支持HAL的LINUX程序驱动程序的步骤:

1>Linux驱动程序;

2>编写HAL Library;

3>编写Service Library。

7.编写HAL模块的步骤和原理:

1>定义结构体和宏

3个重要的结构体hw_module_t、hw_device_t、hw_module_methods_t

 2>编写HAL模块的open函数

Open函数是HAL模块的入口点。初始化hw_device_t的子结构体;打开设备文件;初 始化寄存器

3>定义hw_module_methods_t结构体变量

HAL模块需要hw_module_methods_t结构体的open函数指针变量指定open入口函 数

4>定义HAL_MODULE_INFO_SYM变量

id表示HAL模块中Android系统中的标识。通过id找到并装载HAL模块。

methods变量需要指向第3步定义的hw_module_methods_t结构体的地址,当调用者通过id找到并装载HAL模块后,就会通过methods变量找到hw_module_methods_t结构体,并调用hw_module_methods_t.open函数。

5>编写HAL模块的close函数

当HAL模块被卸载后会调用close函数

6>编写控制LED的函数

根据设备类型和功能的不同,编写相应的函数

转载于:https://www.cnblogs.com/bigcrazy/p/5651713.html

第九章 硬件抽象层:HAL 心得笔记相关推荐

  1. 《C++Primer》第九章-顺序容器-学习笔记(1)-顺序容器定义与操作

    <C++Primer>第九章-顺序容器-学习笔记(1) 文章目录 <C++Primer>第九章-顺序容器-学习笔记(1) 摘要 顺序容器的定义 容器元素的初始化 将一个容器初始 ...

  2. 第九章 时序数据-学习笔记+练习题

    第九章 时序数据 # 导入需要的模块 import numpy as np import pandas as pd import matplotlib.pyplot as plt %matplotli ...

  3. 第九章 硬件抽象层:HAL

    为什么要在Android中加入HAL Goggle为Android 加入HAL主要有如下目的: 统一硬件的调用接口.由于HAL有标准的调用接口,所以可以利用HAL屏蔽Linux驱动复杂.不统一的接口. ...

  4. 计算机系统导论第九章,计算机系统导论 -- 读书笔记 -- 第三章 程序的机器级表示 (持续更新)...

    计算机系统导论 -- 读书笔记 -- 第三章 程序的机器级表示 (持续更新) 第三章 程序的机器级表示 3.1 历史观点 3.2 程序编码 1. 命令行 (1)编译 Linux> gcc -Og ...

  5. 专升本高数——第九章 无穷级数【学习笔记】

    参考相关公式请进入:专升本高数--常用公式总结大全[补充扩展] https://blog.csdn.net/liu17234050/article/details/104439092 全部知识点请进入 ...

  6. vim实用技巧-笔记(第九章)

    vim实用技巧-笔记(第九章) 前言 我记得很早以前我就说过了,我是一个菜鸟,我写博客的主要目的不是为了别人,更多的是为了记录自己的成长过程.如果阁下认为我的行为是在划水的话,那我也不妨大方地承认. ...

  7. 《Go语言圣经》学习笔记 第九章 基于共享变量的并发

    <Go语言圣经>学习笔记 第九章 基于共享变量的并发 目录 竞争条件 sync.Mutex互斥锁 syn.RWMutex读写锁 内存同步 syn.Once初始化 竞争条件检测 示例:并发的 ...

  8. 高等数学笔记-苏德矿-第九章-重积分(Ⅱ)-三重积分

    高等数学笔记-苏德矿 第九章-重积分(Ⅱ)-三重积分 第三节 三重积分的概念和性质 一.三重积分的典例 01 一些基本概念 (1) 立体的体密度 (2) 求立体V的质量 设有界闭区域立体 VVV 的密 ...

  9. 高等数学笔记-乐经良老师-第九章-重积分

    高等数学笔记-乐经良老师 第九章 重积分 第一节 二重积分的概念和性质 一.典型例子 01 平面薄板的质量 平面薄板位于 x y xy xy 平面区域 D D D,其面密度为 μ ( x , y ) ...

最新文章

  1. mysql 客户无感知迁移_亿级账户数据迁移,不用数据库工具还能怎么搞?
  2. 潘石屹 python 知乎_如何看待地产大佬潘石屹微博宣布学习python这件事?对我们有什么启发?...
  3. 剑指offer:旋转数组的最小数字
  4. 使用Mybatis的Generator可能导致的一个错误
  5. mysql 外键和事务_Mysql (五)事务和外键
  6. 开发一个大型后台管理系统,真的需要用前后端分离的技术方案吗?
  7. react16-reactDom.render流程分析
  8. TCP/IP三次握手四次挥手
  9. 雨流计数法的matlab实现,采用三点法与四点法
  10. 三峡大学学生选课系统_201014119_赵敏_三峡大学学生选课系统.doc
  11. 文件md5怎么会变化
  12. java求面积_Java计算几何图形的面积
  13. noi国家集训队论文分类
  14. java 二十四节气源码
  15. OSG OIT 顺序无关透明绘制(PPLL_OIT, WB_OIT) 实现及注意事项
  16. Blender基础:从程序员的角度理解顶点组(Vertex Group)和权重(Weight)
  17. Linux查看进程运行的完整路径方法
  18. git基础之切换分支
  19. 罗伯塔·威廉姆斯(roberta williams)是世界上第一位图形计算机游戏设计师,但她以...
  20. mk突变点检测_气候突变检测

热门文章

  1. 学会感恩会使你回报的更多!
  2. oracle rac安装
  3. 【VIOLA】宁可食无肉,不可居无竹
  4. Nginx SSL 配置
  5. 东芝再曝财务造假丑闻 日企百年老店怎么了?
  6. c语言:【顺序表】静态顺序表的初始化、打印、尾插、尾删
  7. 诺基亚主导Windows Phone手机市场 前景仍然堪忧
  8. 写在南加州留学生遇难之后
  9. 一起谈.NET技术,ASP.NET Eval如何进行数据绑定
  10. 解析三层架构(1)---为什么要分层?