题记:
要知道,既然要学一样东西,那么你就得了解它的大致工作状态,虽然不要求说你可以很清晰的描绘出它的结构,工作原理,但是大概的了解是很有必要的。
先看图:
Linux设备驱动层:
在Android中,对硬件的驱动分为两层,也就是用户空间(User Space)和内核空间(Kernel Space)。Linux内核驱动放在内核空间中,HAL层放在用户空间。为什么要分成两层呢?其实是为了厂家的利益,要知道Linux是开源的,协议是GNU License,在产品发布时,放在Linux下的源码是要公布出去的,而Android 是 Apache License开源协议,发布产品无需发布源代码,所以内核驱动层只提供简单的访问硬件逻辑,例如读写硬件寄存器的通道,至于从硬件中读到了什么值或者写了什么值到硬件中的逻辑,都放在硬件抽象层中去了。
HAL层:
意思是Hardware Abstract Layer,直译过来就是硬件抽象层,从字面上理解大概他就是硬件虚拟接口,我们百度一下可以看得到它的解释是:硬件抽象层是位于操作系统 内核与硬件电路之间的接口层,其目的在于将硬件抽象化。它隐藏了特定平台的硬件接口细节,为 操作系统提供虚拟硬件平台,使其具有硬件无关性,可在多种平台上进行移植。 从软硬件测试的角度来看,软硬件的测试工作都可> 分别基于硬件抽象层来完成,使得软硬件测试工作的并行进行成为可能。
Libraries & Runtime
这层是建立Java的运行环境和封装一些C、C++的程序库。
这层有Dalvik虚拟机,其依赖于Linux 内核提供基本功能,如线程和底层内存管理,每一个Android应用程序是Dalvik虚拟机中的实例,运行在他们自己的进程中。Dalvik虚拟机设计成,在一个设备可以高效地运行多个虚拟机。Dalvik虚拟机可执行文件格式是.dex,dex格式是专为Dalvik设计的一种压缩格式,适合内存和处理器速度有限的系统
Application Framework
这层是最常接触到的一层,提供四大组件和一些服务、插件给我们使用,这层是纯java编写。所有应用程序都在这层实现,从一个Activity的启动到管理它的生命周期,View视图等.