Android HAL简介

1、 HAL介绍

现有的HAL架构由patrick brady(Google)在2008 Google IO演讲中提出的,如下图:

Android的HAL是为了保护一些硬件提供商的知识产权而提出的,是为了避开Linux的GPL束缚。思路是把控制硬件的动作放到了Android HAL中,而Linux driver仅仅完成一些简单的数据交互动作,甚至把硬件寄存器空间直接映射到user space。而Android是基于Apache的License,因此硬件厂商可以只提供二进制文件,所以说Android知识一个开放的平台,而不是一个开源的平台。也许也正是因为Android不遵循GPL,所以Greg KH在2.6.33内核将Android驱动从Linux中删除。GPL和硬件厂商目前还是有着无法弥合的裂痕。Android想要把这个问题处理好也不容易。

总结下来,Android HAL存在的原因主要有:

1.并不是所有的硬件设备都有标准的Linux Kernel的接口;

2.Kernel driver涉及到GPL的版权。某些设备制造商并不愿意公开硬件驱动,所以才用HAL方式绕过GPL;

3.针对某些硬件,Android有一些特殊的需求。

2、 在Android源码里,HAL的代码主要位于以下目录

1.libhardware_legacy/ -旧架构、采取连接库模块的观念进行;

2.libhardware/ -新架构、调整为 HALstub的观念;

3.ril/ - Radio Interface Layer,包括3G,GSM等电话功能;

4.msm7k、qcom、ti与平台相关的

主要包括一下一些模块:GPS,vibrator,wifi,copybit,audio,camera,lights,ril,overlay等。

3、新旧HAL对比

HAL架构慢慢完善,新架构与旧架构相比,抽象程度不断提高,把Android Framework和Linux Kernel很好的隔离开。让android 不至于过度的依赖Linux Kernel,在开发Android Framework时不必考虑底层的硬件的细节。

旧HAL架构

旧HAL架构的作法,是比较传统的module模式,也就是将*.so文件当做sharedlibrary来使用,在runtime(JNI部分)以direct function call使用HAL module。通过直接函数调用的方式来操作驱动程序。

当然,应用程序也可以不需要通过JNI的方式进行(黑色箭头),直接以载入*.so库(dlopen)的方式来调用*.so里的符号(symbol)也是一种方式。

总之是没有经过封装,上层直接操作硬件。

新HAL架构

新HAL架构的作法,就有了stub的味道。HAL stub是一种代理人(proxy)的概念,stub虽然仍是以*.so库存在,但HAL已经将*.so库封装起来了。Stub向HAL提供操作函数,而runtime则是向HAL取得特定模块(stub)的operations,在callback这些操作函数。这种以indirectfunction call的架构,让HAL stub变成是一种包含关系,即HAL里包含了许许多多的stub(代理人)。Runtime只要说明类型,即module ID,就可以取得操作函数。

HAL的未来发展

新的HAL作法,倾向全面采用JNI的方式进行。也就是,在Android的架构中,修改Androidruntime(即core library),在取得HAL模块的operations后再做callback操作。将HAL模块完全放在HAL里面。

源地址:http://www.jollen.org/blog/2009/10/android-hal-status-report.html


更多相关文章

  1. 【工作记录】android手势事件操作记录
  2. Android(安卓)属性动画与硬件加速
  3. android中webView中对HTML的一些操作【更新代码】
  4. Android中的接口的使用举例
  5. Vsync垂直同步信号分发和SurfaceFlinger响应执行渲染流程分析(一)
  6. Android(安卓)网络架构 - 视频教程
  7. Android(安卓)GPRS的自动打开与关闭。
  8. 第一个Android实例——计算器 编辑
  9. Android(安卓)使用ORMLite打造万能泛型Dao简化数据持久化层

随机推荐

  1. Android应用程序的基本组件之Activity
  2. Android(安卓)ART 垃圾回收机制
  3. Android截屏分享
  4. unity3d连接Sqlite并打包发布Android
  5. 两分钟彻底让你明白Android中onIntercept
  6. android java代码的启动:app_process
  7. Android开发环境的搭建
  8. Android与js交互实例
  9. android的启动过程
  10. 【Android(安卓)开发】: Android(安卓)消