硬件抽象层:HAL

本节我们研究硬件抽象层:HALHAL,它是建立在Linux驱动之上的一套程序库。刚开始介绍了为什么要在Android中加入HAL,目的有三个,一,统一硬件的调用接口。二,解决了GPL版权问题。三,针对一些特殊的要求。可以利用位于用户空间的HAL代码来辅助Linux驱动完成一些工作。HAL主要有以下目的:统一硬件的调用接口。由于HAL有标准的调用接口,所以可以利用HAL屏蔽了Linux驱动复杂、不统一的接口;解决了GPL协议;针对一些特殊的要求。对于一些硬件,可能需要访问一些用户空间的资源,或在内核空间不方便完成的工作以及特殊需求。在这种情况下,可以利用位于空间的HAL代码来辅助Linux完成一些工作。

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

编写HAL模块的步骤和原理如下。
第一步:定义结构体和宏   编写HAL模块需要使用到3个非常重要的结构体,在第一步需要定义两个新的结构体。
第二步:编写HAL模块的open函数    open函数是HAL模块的入口点。本例中使用的是led_device_open函数。该函数主要做如下三个工作。初始化hw_device_t的子结构体。 打开设备文件。 初始化寄存器。
第三步:定义hw_module_methhods_t 结构体变量
第四步:定义HAL_MODULE_INFO_SYM函数
第五步:编写HAL模块的close 函数  当HAL模块被卸载后会调用close函数
第六步:编写控制LED的函数

时间: 2024-11-08 14:57:11

硬件抽象层:HAL的相关文章

第9章:硬件抽象层HAL

1.HAL ( Hardware Abstraction Layer,硬件抽象层) 是建立在Linux驱动之上的一套翻字库.这套程序库并不属于 Linux 内核, 而是属于 Linux 内核层之上的应用层. 2.编写一款支持 HAL 的 Linux 驱动程序的步骤 编写一款支持 HAL 的 Linux 驱动程序要比编写普通的 Linux 驱动程序复杂一些,加入HAL 会使组成 Linux 驱动的一整套 Library 的各部分更独立,更容易维护. 第 1 步:编写 Linux 驱动 “编写 Li

Android硬件抽象层(HAL)深入剖析(一)【转】

作为一个搞android驱动或者说搞底层的人,我觉得对于hal那是必须要掌握的,而且必须达到一定深度,于是我总结了一下,将整个自己的分析思路写下来. 主要是看android源代码,根据源代码得到的思路.(看源代码比看什么著作书籍都管用) android HAL是什么?为什么有它? 硬件抽象层是介于android内核kernel和上层之间的抽象出来的一层结构.他是对linux驱动的一个封装,对上层提供统一接口,上层应用不必知道下层硬件具体怎么实现工作的,它屏蔽了底层的实现细节. 它在整个andro

硬件抽象层——HAL

(一)为什么要在android中加入HAL Linux系统中Linux驱动有两种类型的代码:访问硬件寄存器的代码——调用的Linux内核的标准函数进行的标准操作  业务逻辑代码——有些企业或个人并不想将源代码公开 Google为了满足这些不想开源的Linux驱动作者的要求,在android层次结构中的系统运行库增加了一个HAL,注意HAL并不是Linux内核的一部分. 主要目的:统一硬件的调用接口 解决了GPL版权问题  针对一些特殊的要求 (二)Android HAL架构 调用HAL模块的代码

Android硬件抽象层(HAL)深入剖析(二)

上一篇我们分析了android HAL层的主要的两个结构体hw_module_t(硬件模块)和hw_device_t(硬件设备)的成员,下面我们来具体看看上层app到底是怎么实现操作硬件的? 我们知道,一些硬件厂商不愿意将自己的一些核心代码开放出去,所以将这些代码放到HAL层,但是怎么保证它不开放呢?HAL层代码不是也让大家知道下载吗?其实硬件厂商的HAL核心代码是以共享库的形式出现的,每次在需要的时候,hal会自动加载调用相关共享库.那么是怎么加载找到某一硬件设备对应的共享库的呢?这也是我们这

第九章 硬件抽象层:HAL

1.在传统的Linux系统中Linux驱动一般有两种类型的代码:访问硬件寄存器的代码和业务逻辑代码. 2.android的层次结构:应用层,应用框架层,系统运行库层,linux内核层 3.为android加入HAL的目的: (1)统一硬件的调用接口.由于HAL有标准的调用接口,所以可以利用 HAL屏蔽Linux驱动复杂,不统一的接口. (2)解决GPL版权问题.由于 Linux 内核基于GP协议,而Android基于Apache Licence2.0协议 (3)针对一些特殊的要求.对于有些硬件,

硬件抽象层HAL

Google为Android加入HAL的主要目的 1.  统一硬件的调用接口.由于HAL有标准的调用接口,所以可以利用HAL屏蔽Linux驱动复杂.不统一的接口. 2.  解决了GPL版权问题.由于Linux内核基于GPL协议,而Android基于Apache Licence 2.0协议.因此Google将原本位于Linux驱动中国的敏感代码向上移了一个层次.这样这些敏感代码就摆脱了GPL协议的束缚,那些不想开源的Linux驱动作者就没必要开源了. 3.  针对一些特殊的要求.对于有些硬件,可能

第九章:硬件抽象层:HAL

硬件抽象层是位于操作系统内核与硬件电路之间的接口层,其目的在于将硬件抽象化.它隐藏了特定平台的硬件接口细节,为操作系统提供虚拟硬件平台,使其具有硬件无关性,可在多种平台上进行移植. 从软硬件测试的角度来看,软硬件的测试工作都可分别基于硬件抽象层来完成,使得软硬件测试工作的并行进行成为可能.硬 件抽象层是一个编程层,允许计算机操作系统在逻辑层而不是硬件层与硬件设备交互.Windows 2000就是支持硬件抽象层的操作系统之一.操作系统核心或者硬件驱动程序都可以调用硬件抽象层.无论哪种情况,调用程序

Android深度探索HAL与驱动开发-——第9章

第九章:   只要讲的是硬件抽象层HAL,HAL是建立在Linux驱动上的一套程序库.HAL不是Linux内核的一部分而是位于Android的系统运行库层.首先讲的是要加入HAL的好处.包括:统一硬件的调用借口.解决GPL版权问题.针对一些特殊的要求.HAL架构的基本原理是在Android系统中使用程序库调用位于内核空间的Linux驱动,然后Android应用程序可通过NDK程序访问HAL中的程序库,或直接在Android应用程序中访问HAL中的程序库.android HAL的源代码存储的位置并

hal

HAL,Hardware Abstraction Layer,硬件抽象层.Windows NT内核的操作系统一个目标是使操作系统可跨平台移植. 概况 理想情况下,当一种新机器问世时,他应该可以仅仅使用新机器的编译器来重新编译这个操作系统,就让他首次运行.但是,现实中并不能这样做.虽然上层的操作系统能够完全移植(因为它们的处理大多是内部数据结构),但底层处理的是设备寄存器.中断.DMA和其他的硬件特性,这些都是因机器而不同的.即使大部分底层代码是用C语言编写的,它也不能仅仅从X86上拿出来放到Al