Android允许提供不同的硬件平台和驱动支持Android的运行。硬件抽象层(Hardware Abstraction Layer)提供了再Android平台软件栈和硬件设备之间的标准接口。另外,Android操作系统是开源的,可以帮助你快速的开发软件,让软硬件协同工作。
为了保证Android设备的高质量和对用户的统一用户体验,必须通过兼容测试包(Compatibility test suite). CTS能搞保证任何人开发的设备符合统一的标准,并且应用可以可靠的运行,并且有着良好的体验。
在你将Android移植到你的硬件设备之前,对android在更高的层次上如何工作有一个了解非常重要。因为驱动和HAL和Android系统的其他部分的源码有很多交互,因此理解这部分对你学习整个AOSP(Android Open Source Project)源码的其他部分十分重要。下面这张图说明了再系统层次Android是如何工作的。
图1.Android系统架构
这一层是大部分应用软件开发者需要关心的。这里需要明白对于开发者可用的应用编程接口(API),许多接口和下层的HAL接口提供的功能相同,所以这部分可以帮助了解如何实现驱动。
Binder进程间通信机制允许应用程序框架跨进程调用Android系统服务提供的功能。这基本上允许高层的框架API可以和Android系统服务进行交互。从应用框架的层次看,所有的通信对开发者是隐藏的,事情看起来“工作的非常好”。
应用框架层API提供的大部分功能需要和系统服务进行通信来访问底层的硬件。服务被人为的分为不同的功能模块,这些模块完成不同的功能,比如窗口管理器,搜索服务和通知管理器(Notification Manager).系统服务被分在两个组里:系统(system)和多媒体(media).system(系统)服务包括窗口和通知管理器等。多媒体服务包括所有播放和录制多媒体相关的服务。
HAL为Android系统调用底层驱动提供了一个标准的接口,同时屏蔽了底层驱动和硬件的具体实现。你必须为产品上的硬件实现相应的硬件抽象接口或驱动。Android并不强制要求驱动和HAL实现的标准接口,你可以根据你产品的实际状况作出调整。然而,你必须保证所有的HAL接口实现可以正确的和底层硬件交互。所有的HAL实现都被编译成为一个动态链接库。
开发Android设备驱动和开发标准的Linux设备驱动相同。Android使用了一个特殊版本的Linux,添加了一些设备驱动比如wakelock,一个内存管理系统,Binder进程间通信驱动等对嵌入式平台非常重要的功能。这些新添加的功能主要和系统功能相关。你可以使用任何版本的内核,只要支持特定的功能,例如binder驱动。然而,我们推荐使用最新版的AndroidKernel。
Android系统移植 http://source.android.com/devices/index.html,布布扣,bubuko.com
Android系统移植 http://source.android.com/devices/index.html
原文:http://blog.csdn.net/bizzareblizzard/article/details/36871105