Android 的 HAL 技術 Android 的 HAL 技術, #1: 簡介與發展現況
jollen 發表於 October 8, 2009 2:05 AM
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 的觀念
...

>> 阅读全文

http://www.ibm.com/developerworks/cn/linux/l-cn-sysfs/?ca=drs-tp4608使用 /sys 文件系统访问 Linux 内核 sysfs 虚拟文件系统提供了一种比 proc 更为理想的访问内核数据的途径级别: 中级程 任全 (crquan@gmail.com), Linux 内核开发者、存储开发工程师, UIT(创新科存储技术有限公司)2009 年 1 月 08 日sysfs
是 Linux 内核中设计较新的一种虚拟的基于内存的文件系统,它的作用与 proc 有些类似,但除了与 proc
相同的具有查看和设定内核参数功能之外,还有为 Linux 统一设备模型作为管理之用。相比于 proc 文件系统,使用 sysfs
导出内核数据的方式更为统一,并且组织的方式更好,它的设计从 proc 中吸取了很多教训。本文就 sysfs 的挂载点 /sys 目录结构、其与
Linux 统一设备模型的关系、常见属性文件的用法等方面对 sysfs 作入门介绍,并且就内核编程方面,以具体的例子来展示如何添加 sysfs
支持。文档选项未显示需要 JavaScript
的文档选项
打印本页'');
//
打印本页
将此页作为电子邮件发送'');
//
将此页作为电子邮...

>> 阅读全文

http://www.ibm.com/developerworks/cn/linux/l-proc.html使用 /proc 文件系统来访问 Linux 内核的内容这个虚拟文件系统在内核空间和用户空间之间打开了一个通信窗口级别: 初级M. Tim Jones (mtj@mtjones.com), 资深首席软件工程师, Emulex2006 年 4 月 24 日 /proc 文件系统是一个虚拟文件系统,通过它可以使用一种新的方法在
Linux? 内核空间和用户空间之间进行通信。在 /proc
文件系统中,我们可以将对虚拟文件的读写作为与内核中实体进行通信的一种手段,但是与普通文件不同的是,这些虚拟文件的内容都是动态创建的。本文对
/proc 虚拟文件系统进行了介绍,并展示了它的用法。
最初开发 /proc 文件系统是为了提供有关系统中进程的信息。但是由于这个文件系统非常有用,因此内核中的很多元素也开始使用它来报告信息,或启用动态运行时配置。
/proc 文件系统包含了一些目录(用作组织信息的方式)和虚拟文件。虚拟文件可以向用户呈现内核中的一些信息,也可以用作一种从用户空间向内核发送信息的手段。实际上我们并不会同时需要实现这两点,但是本文将向您展示如何配置这个文件系统进行输入和输出。
>> 阅读全文

http://blog.donews.com/hackerstar/archive/2006/08/11/996142.aspx介绍 tmpfs
如果我必须一下子说清楚 tmpfs,我会说 tmpfs 就象虚拟磁盘(ramdisk),但不一样。象虚拟磁盘一样,tmpfs 可以使用您的 RAM,但它也可以使用您的交换分区来存储。而且传统的虚拟磁盘是个块设备,并需要一个 mkfs 之类的命令才能真正地使用它,tmpfs 是一个文件系统,而不是块设备;您只是安装它,它就可以使用了。总而言之,这让 tmpfs 成为我有机会遇到的最好的基于 RAM 的文件系统。
tmpfs 和 VM
让我们来看看 tmpfs 更有趣的一些特性吧。正如我前面提到的一样,tmpfs 既可以使用 RAM, 也可以使用交换
分区。刚开始这看起来可能有点武断,但请记住 tmpfs 也是我们知道的“虚拟内存文件系统”。而且,您可能也知道,Linux
内核的虚拟内存资源同时来源于您的 RAM 和交换分区。内核中的 VM
子系统将这些资源分配到系统中的其它部分,并负责在后台管理这些资源,通常是透明地将 RAM 页移动到交换分区或从交换分区到 RAM 页。
tmpfs 文件系统需要 VM 子系统的页面来存储文件。tmpfs 自己并不知道这些页面是在...

>> 阅读全文

http://www.android1.net/Topic.aspx?BoardID=11&TopicID=479在Android應用框架裡,應用層級的軟體大多是Java類別,而系統層級的軟體大多是C或 C++類別。Android使用JNI介面來達成這個目標。例如,在Android裡有個MediaPlayer.cpp類別,當它搭配上JNI介面之後,在VM上執行的MediaPlayer.java就可以透過JNI介面與MediaPlayer.cpp類別溝通了。
圖1-1
基於這樣的架構,我門就可以盡量將MediaPlayer.java裡的程式邏輯移入MediaPlayer.cpp類別裡,以便加快程式的執行速度。此外,以JNI介面包裝MediaPlayer.cpp類別,並且銜接相互輝映的MediaPlayer.java類別,可以讓眾多的Java應用程式透過MediaPlayer.java來使用MediaPlayer.cpp類別的服務。這是一種非常有用的包裝技巧,藉由包裝來創造更多的應用機會。
為了進一步創造更多的應用機會,可以替MediaPlayer.java類別加上AIDL介面,讓更多的Java應用程式能與MediaPlayer.java類別進行遠距的IPC溝通。如下圖所示:
圖1-2
上圖表示出JNI在Android裡扮演的角色,以及Android框架裡Java與C/C++類別融合的基本架構。上面的圖1-2是一個較為抽象的圖,凸顯JNI與AIDL的相互呼...

>> 阅读全文

from http://blog.csdn.net/saintswordsman/archive/2010/01/04/5130947.aspx欢迎阅读本文,你能关注本文,你知道你需要进程间通信、需要AIDL(以及Binder),那么可以默认你对这些概念已经有了一些了解,你(大致)
知道它们是什么,它们有什么用,所以为了节约大家的眼力和时间,在此我不复制粘贴网上泛滥的博客或者翻译冗长的android文档。
关于AIDL的介绍在文档:docs/guide/developing/tools/aidl.html
关于IBinder的介绍在文档:docs/reference/android/os/IBinder.html
以及Binder:docs/reference/android/os/Binder.html
在后文中,我将以我自己的理解向你介绍相关的概念。以我目前粗浅的经验,应用程序使用AIDL的地方,几乎都和Service有关,所以你也需要知道一些关于Service的知识。日后得闲我也会继续写一些关于Service的贴。
本文将以一个例子来和你分享使用AIDL的基础技能,这个例子里有:
1、一个类mAIDLActivity,继承Activity。里面有三个按钮,text分别为StartService,StopService,CallbackTest。
2、一个类mAIDLService,继承Service。为了充分展示ADIL的...

>> 阅读全文

from http://ytydyd.blog.sohu.com/139026338.html(一) 概述 android的binder机制提供一种进程间通信的方法,时不同一个进程可以以类似远程过程调用的形式调用另一个进程所提供的功能。binder机制在Java环境和C/C++环境都有提供。 android的代码中,与C/C++的binder包括一些类型和接口的定义和实现,相关的代码在下面这几个文件中: frameworks\base\include\utils\IInterface.h frameworks\base\include\utils\Binder.h frameworks\base\include\utils\BpBinder.h frameworks\base\include\utils\IBinder frameworks\base\include\utils\Parcel.h frameworks\base\include\utils\IPCThreadState.h frameworks\base\include\utils\ProcessState.h frameworks\base\libs\utils\Binder.cpp frameworks\base\libs\utils\BpBinder.cpp frameworks\base\libs\utils\IInterface.cpp frameworks\base\libs\utils\IPCThreadState.cpp frameworks\base\libs\utils\Parcel.cpp frameworks\base\libs\utils\ProcessState.cpp 为了了解这些类、接口之间的关系以及binder的实现机制,最好是结合一个例子来进行研究。我选择的例子是android自带的媒体播放器的实现。其媒体播放器的相...

>> 阅读全文


以MediaPlayer 服务为例在Android 平台里,上层应用程序的service 与底层的系统service 有很大的区别,只是许多人都将它们混在一起了。例如,在Android 里著名的MediaPlayer范例,许多人都知道其结构为:
其中有两个service:
1、应用程序开发者所写的myPlayerService.java 类别。这是属于一般所称的SDK service。
2、Android 已经提供的MediaPlayerService.cpp 类别。这是属于一般所称的系统service。
主要的系统service 都是在Android 系统启动时,就会先逐一登记到BD(Binder Driver)里,随时准备为SDK 应用程序进行服务。天字第一号的系统server 就是ServiceManager。当Android 系统启动时,就会优先将之登记到BD(Binder Driver)里,如下图:
让其它组件能透过IBinder 接口(可转型为IServiceManager 接口)而远距呼叫ServiceManager 的服务。于是陆续会有更多的系统service 呼叫ServiceManager的addService()函数而登记到BD 里成为可远距呼叫的系统service。例如,基于上述途径,ActivityManagerService 就会登记为可远距呼叫的系统service。再如,MediaPlayerService 也继续登记为基本的系统servic...

>> 阅读全文