您的位置:笔笔发 技术资料 嵌入式操作系统 Android 正文
内容搜索
笔笔发:技术产业信息平台----成就有识之士创业梦想的殿堂
热门内容
推荐内容
Android HAL实例解析

本文章共24236字,分16页,当前第1页,快速翻页:
 

华清远见讲师  刘洪涛
一、概述
    本文希望通分析台湾的Jollen的mokoid 工程代,和在s5pc100平台上实现过程种遇到的问题,解析Andorid HAL的开发方法。     
二、HAL介绍
    有HAL架构由Patrick Brady (Google) 在2008 Google  I/O演中提出的,如下
 

0_1291703940H3TJ.png 
 
    Android的HAL是了保一些硬件提供商的知识产权而提出的,是了避linux的GPL束。思路是把控制硬件的作都放到了Android HAL中,而linux driver仅仅完成一些简单的数据交互作用,甚至把硬件寄存器空直接映射到user space。而Android是基于Aparch的license,因此硬件厂商可以只提供二制代,所以Android只是一个放的平台,并不是一个源的平台。也许也正是因Android不遵从GPL,所以Greg Kroah-Hartman才在2.6.33内核将Andorid驱动从linux中除。GPL和硬件厂商目前是有着无法弥合的裂痕。Android想要把问题处理好也是不容易的。
    总结下来,Android HAL存在的原因主要有:
    1. 并不是所有的硬件设备都有准的linux kernel的接口
    2. KERNEL DRIVER及到GPL的版。某些设备制造商并不原因公硬件驱动,所以才去用HAL方    绕过GPL。
    3. 针对某些硬件,An有一些特殊的需求
三、HAL内容
1、HAL 主要的储存于以下目录:
(注意:HAL在其它目录下也可以正常编译)
l  libhardware_legacy/ - 旧的架构、采取
l  libhardware/ - 新架构、 HAL stub 的
l  ril/ - Radio Interface Layer
l  msm7k  QUAL平台相
    主要包含以下一些模:Gps、Vibrator、Wifi、Copybit、Audio、Camera、Lights、Ril、Overlay等。
2、两种 HAL 架构比较
    目前存在两HAL架构,位于libhardware_legacy目下的“旧HAL架构”和位于libhardware目下的“新HAL架构”。两框架如下所示。

0_1291703940H3TJ.png 
3.1   旧HAL架构   
 

0_1291704381b1FK.png 
                   
                        3.2  HAL架构
      libhardware_legacy 是将 *.so 文件当作shared library来使用,在runtime(JNI 部份)以 direct function call 使用 HAL module。通直接函数用的方式,来操作驱动程序。当然,用程序也可以不需要通 JNI 的方式行,直接加 *.so (dlopen)的做法用*.so 里的符号(symbol)也是一方式。而言之是没有经过封装,上可以直接操作硬件。
    在的libhardware 架构,就有stub的味道了。HAL stub 是一代理人(proxy)的概念,stub 然仍是以 *.so的形式存在,但HAL已将 *.so 档藏起来了。Stub 向 HAL提供操作函数(operations),而 runtime 是向 HAL 取得特定模(stub)的 operations,再 callback 些操作函数。这种以 indirect function call 的架构,HAL stub 成是一包含系,即 HAL 里包含了许许多多的 stub(代理人)。Runtime 只要型,即 module ID,就可以取得操作函数。
 

 
点这里复制本页地址发送给您QQ/MSN上的好友
相关文章

进一步分析Android HAL
让你定制的Launcher成为系统中唯一的Launch
创建android sdk(包含emulator)
视频电话中camera部分数据流分析
编译自己的本地库介绍
Ubuntu 10.10编译Android froyo可能需要注意
使用NDK编译.so文件心得
OMAP3530上移植android2.2的笔记
Android平台中Wifi的初始化
Android permission 访问权限大全
实例解析linux内核I2C体系结构(1)
RT73 wifi无线网卡驱动移植过程
面对不断升级的内核,如何学习linux设备驱动
USB gadget设备驱动解析(1)——功能体验
Linux USB gadget设备驱动解析(2)---驱动
USB gadget设备驱动解析(3)——驱动结构分
Linux USB gadget设备驱动解析(4)--编写一
linux-2.6.26内核中ARM中断实现详解(1)
linux-2.6.26内核中ARM中断实现详解(2)
在Android中使用OpenCv

相关评论


本文章所属分类:首页 技术资料 嵌入式操作系统 Android


反馈意见和建议