第9章 硬件抽象层:HAL
HAL(硬件抽象层)是建立在Linux驱动之上的一套程序库。这套程序库并不属于Linux内核,而是属于Linux内核层之上的应用层。在传统的Linux系统中Linux驱动一般有两种类型的代码:访问硬件寄存器的代码和业务逻辑代码。
编写一款支持HAL的Linux驱动程序的步骤:
第1步:编写Linux驱动
第2步:编写HAL Library
第3步:编写Service Library
在编写Linux驱动以及与驱动相关的程序的过程中应分为段测试每一部分程序,测试当然要从Linux驱动开始,每编写完一部分,应使用相应的方法进行测试,以便将当前编写的程序的Bug降到最低。任何被系统自动调用的程序都会有一个标准的接口,这个接口相当于一个约定的规则,不管任何程序,只要遵循这个规则,就可以成功被调用。既然HAL模块也可以被Android系统自动调用,那个自然也拥有类似main或init函数的接口,只不过这个接口不是函数,而是一个固定名称的结构体变量HAL_MODULE_INFO_SYM。也就是说HAL程序都必须有一个HAL_MODULE_INFO_SYM变量。
编写HAL模块的步骤
第1步:定义结构体和宏
第2步:编写HAL模块的open函数
第3步:定义hw_module_methods_t结构体变量
第4步:定义HAL_MODULS_INFO_SYN变量
第5步:编写HAL模块的close函数
第6步;编写控制LED的函数
第9章 硬件抽象层:HAL的更多相关文章
- 第九章 硬件抽象层:HAL
这一章介绍HAL,全称为Hardware Abstract Layer,即硬件抽象层,它是建立在Linux驱动之上的一套程序库,程序库并不属于Linux内核,而是属于Linux内核层之上的应用层.为A ...
- Android架构分析之使用自定义硬件抽象层(HAL)模块
作者:刘昊昱 博客:http://blog.csdn.net/liuhaoyutz Android版本:2.3.7_r1 Linux内核版本:android-goldfish-2.6.29 在上一篇博 ...
- 硬件抽象层:HAL
本节我们研究硬件抽象层:HALHAL,它是建立在Linux驱动之上的一套程序库.刚开始介绍了为什么要在Android中加入HAL,目的有三个,一,统一硬件的调用接口.二,解决了GPL版权问题.三,针对 ...
- 第9章 初识HAL固件库
本章参考资料:<STM32F76xxx参考手册>.<STM32F7xx规格书>.<Cortex-M3权威指南>, STM32 HAL库帮助文档:<STM32F ...
- Android硬件抽象层(HAL)深入剖析(一)【转】
作为一个搞android驱动或者说搞底层的人,我觉得对于hal那是必须要掌握的,而且必须达到一定深度,于是我总结了一下,将整个自己的分析思路写下来. 主要是看android源代码,根据源代码得到的思路 ...
- 硬件抽象层——HAL
(一)为什么要在android中加入HAL Linux系统中Linux驱动有两种类型的代码:访问硬件寄存器的代码——调用的Linux内核的标准函数进行的标准操作 业务逻辑代码——有些企业或个人并不想 ...
- Android硬件抽象层(HAL)深入剖析(三)【转】
前面分析了android HAL层是如何搜索硬件模块的动态共享库的,其实就是在"system/lib/hw/"或者"/vendor/lib/hw/"这两个路径下 ...
- Android硬件抽象层(HAL)深入剖析(二)【转】
上一篇我们分析了android HAL层的主要的两个结构体hw_module_t(硬件模块)和hw_device_t(硬件设备)的成员,下面我们来具体看看上层app到底是怎么实现操作硬件的? 我们知道 ...
- Android硬件抽象层(HAL)深入剖析(二)
上一篇我们分析了android HAL层的主要的两个结构体hw_module_t(硬件模块)和hw_device_t(硬件设备)的成员,下面我们来具体看看上层app到底是怎么实现操作硬件的? 我们知道 ...
随机推荐
- mysql通用包安装
mysql 版本: mysql-5.7.16-linux-glibc2.5-x86_64.tar.gz 解压后的初始化: mysqld --defaults-file=/etc/my.cnf --us ...
- 常见HTML的!DOCTYPE声明
HTML或者XHTML版本 !DOCTYPE声明 HTML 2.0 <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN"> HTM ...
- javascript版快速排序和冒泡排序
var sort = (function () { //快速排序 var quickSort = { partition: function (array, low, high) { if (low ...
- SAP SD 销售凭证如何设置字段必填
在实际业务中,我们经常遇到需要设置某些字段是必输的.那么在SAP中创建销售订单时如何控制必填字段呢?请看操作手册 第一步:设置屏幕增强 T-CODE:shd0 上截图 1----输入需要控制的事物代码 ...
- PDF 补丁丁 0.5.0.2273 测试版发布:修复崩溃问题,可自定义工具栏文本
新的测试版修复了编辑器在打开文件后再打开文件会崩溃的严重错误,以及一些小问题. 在一些小细节上作了调整,例如可自定义常用工具栏的文本等等. 由于之前测试版本的错误比较严重,推荐网友下载新的测试版.
- @@identity的使用
-- ============================================= -- Author: Qiuhua,Huang -- Create date: 08/09/2012 ...
- Mysql Innodb 引擎优化-内存、日志、IO、其他相关参数
介绍: InnoDB给MySQL提供了具有提交,回滚和崩溃恢复能力的事务安全(ACID兼容)存储引擎.InnoDB锁定在行级并且也在SELECT语句提供一个Oracle风格一致的非锁定读.这些特色增加 ...
- AndroidTouch事件总结
1.自定义的控件几乎都要用到触摸事件,不交互怎么响应,相关的事件处理函数由dispatchTouchEvent.onInterceptTouchEvent.onTouchEvent,处理这些事件的由v ...
- 关于sysprocesses表各字段的作用
sysprocesses 表中保存关于运行在 Microsoft® SQL Server™ 上的进程的信息.这些进程可以是客户端进程或系统进程.sysprocesses 只存储在 master 数据库 ...
- Codeforces Round #371 (Div. 1)
A: 题目大意: 在一个multiset中要求支持3种操作: 1.增加一个数 2.删去一个数 3.给出一个01序列,问multiset中有多少这样的数,把它的十进制表示中的奇数改成1,偶数改成0后和给 ...