好文档 - 专业文书写作范文服务资料分享网站

实例解析Android HAL的开发方法 - 华清远见

天下 分享 时间: 加入收藏 我要投稿 点赞

实例解析Android HAL的开发方法

本篇文章为大家带来的是,通过分析台湾的Jollen的mokoid 工程代码,和在s5pc100平台上实现过程种遇到的问题,解析Andorid HAL的开发方法。我相信,看完本篇文章,对你的学习非常有帮助。因为本篇文章来自华清远见,最具权威!

一、我们需要做个HAL介绍,现有HAL架构由Patrick Brady (Google) 在2008 Google I/O演讲中提出的,如下图。

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在其它目录下也可以正常编译)

● libhardware_legacy/ - 旧的架构、采取链接库模块的观念进行 ● libhardware/ - 新架构、调整为 HAL stub 的观念 ● ril/ - Radio Interface Layer ● msm7k QUAL平台相关

主要包含以下一些模块:Gps、Vibrator、Wifi、Copybit、Audio、Camera、Lights、Ril、Overlay等。

2、两种 HAL 架构比较

目前存在两种HAL架构,位于libhardware_legacy目录下的“旧HAL架构”和位于libhardware目录下的“新HAL架构”。两种框架如下图所示。

图3.1 旧HAL架构 图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,就可以取得操作函数。对于目前的HAL,可以认为Android定义了HAL层结构框架,通过几个接口访问硬件从而统一了调用方式。 下面结合实例来分析HAL编程方法。 四、mokoid 工程代码下载与结构分析 1、mokid项目概述

modkoid工程提供了一个LedTest示例程序,是台湾的Jollen用于培训的。对于理解android层次结构、Hal编程方法都非常有意义。 2、下载方法

#svn checkout http://mokoid.googlecode.com/svn/trunk/mokoid-read-only 3、结构分析

Android的HAL的实现需要通过JNI(Java Native Interface),JNI简单来说就是java程序可以调用C/C++写的动态链接库,这样的话,HAL可以使用C/C++语言编写,效率更高。在Android下访问HAL大致有以下两种方式:

(1)Android的app可以直接通过service调用.so格式的jni

实例解析Android HAL的开发方法 - 华清远见

实例解析AndroidHAL的开发方法本篇文章为大家带来的是,通过分析台湾的Jollen的mokoid工程代码,和在s5pc100平台上实现过程种遇到的问题,解析AndoridHAL的开发方法。我相信,看完本篇文章,对你的学习非常有帮助。因为本篇文章来自华清远见,最具权威!一、我们需要做个HAL介绍,现有HAL架构由PatrickBrady(
推荐度:
点击下载文档文档为doc格式
4lwis7aa5v9pugm7qnnb9acj39qpyw00el7
领取福利

微信扫码领取福利

微信扫码分享