WEB开发网
开发学院手机开发Android 开发 Android HAL 阅读

Android HAL

 2010-04-21 06:36:00 来源:WEB开发网   
核心提示:HAL 介绍Android 的 HAL (硬件抽像层)是 Google 因应厂商「希望不公开源码」的要求下,所推出的新观念,Android HAL,其架构如下图,虽然 HAL 现在的「抽象程度」还不足,当然,应用程序也可以不需要透过 JNI 的方式进行,现阶段实作还不是全面符合 HAL 的架构规划,不过也确实给了我们很

HAL 介绍

Android 的 HAL (硬件抽像层)是 Google 因应厂商「希望不公开源码」的要求下,所推出的新观念,其架构如下图。虽然 HAL 现在的「抽象程度」还不足,现阶段实作还不是全面符合 HAL 的架构规划,不过也确实给了我们很好的思考空间。

图 1 : Android HAL 架构规划

这是 Patrick Brady (Google) 在 2008 Google I/O 所发表的演讲「 Anatomy & Physiology of an Android 」中,所提出的 Android HAL 架构图。从这张架构图我们知道, HAL 的目的是为了把 Android framework 与 Linux kernel 完整「隔开」。让 Android 不至过度依赖 Linux kernel ,有点像是「 kernel independent 」的意思,让 Android framework 的开发能在不考虑驱动程序的前提下进行发展。

Android 原始码里, HAL 主要的实作储存于以下目录:

1. libhardware_legacy/ - 过去的实作、采取链接库模块的观念进行

2. libhardware/ - 新版的实作、调整为 HAL stub 的观念

3. ril/ - Radio Interface Layer

在 HAL 的架构实作成熟前(即图 1 的规划),我们先就目前 HAL 现况做一个简单的分析。另外,目前 Android 的 HAL 实作,仍旧散布在不同的地方,例如 Camera 、 WiFi 等,因此上述的目录并不包含所有的 HAL 程序代码。

HAL 的过去

图 2 : Android HAL / libhardware_legacy

过去的 libhardware_legacy 作法,比较是传统的「 module 」方式,也就是将 *.so 档案当做「 shared library 」来使用,在 runtime ( JNI 部份)以 direct function call 使用 HAL module 。透过直接函数呼叫的方式,来操作驱动程序。

当然,应用程序也可以不需要透过 JNI 的方式进行,直接以加载 *.so ?( dlopen )的做法呼叫 *.so 里的符号( symbol )也是一种方式。

HAL 的现实状况

图 3 : Android HAL / libhardware

1 2 3 4 5 6  下一页

Tags:Android HAL

编辑录入:coldstar [复制链接] [打 印]
赞助商链接