Android系统的底层建立在Linux系统之上,该平台由那4层组成

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android系统的底层建立在Linux系统之上,该平台由那4层组成相关的知识,希望对你有一定的参考价值。

android采用分层的架构,分为四层,从高层到底层分为应用程序层,应用程序框架层,系统运行库层和Linux核心层
1,Android应用程序层
应用是用Java语言编写的运行在虚拟机上的程序,即图中最上层的蓝色部分,其实,Google最开始时就在Android系统中捆绑了一些核心应用,比如e-mail客户端、SMS短消息程序、日历、地图、浏览器、联系人管理程序,等等。
2,应用程序框架层
这一层即是编写Google发布的核心应用时所使用的API框架,开发人员同样可以使用这些框架来开发自己的应用,这样便简化了程序开发的架构设计,但是必须遵守其框架的开发原则
3,系统运行库层
当我们使用Android 应用框架时,Android系统会通过一些C/C++库来支持对我们使用的各个组件,使其能更好地为开发者服务
4,Linux核心层
Android 的核心系统服务基于Linux2.6内核,如安全性、内存管理、进程管理、网络协议栈和驱动模型等都依赖于Linux2.6内核。Linux内核同时也作为硬件和软件栈之间的抽象层
参考技术A

1,Android应用程序层;

2,应用程序框架层;

3,系统运行库层;

4,Linux核心层。

应用是用Java语言编写的运行在虚拟机上的程序,即图中最上层的蓝色部分,其实,Google最开始时就在Android系统中捆绑了一些核心应用,比如e-mail客户端、SMS短消息程序、日历、地图、浏览器、联系人管理程序,等等。

第二层即是编写Google发布的核心应用时所使用的API框架,开发人员同样可以使用这些框架来开发自己的应用,这样便简化了程序开发的架构设计,但是必须遵守其框架的开发原则。

我们使用Android 应用框架时,Android系统会通过一些C/C++库来支持对我们使用的各个组件,使其能更好地为开发者服务。

Android 的核心系统服务基于Linux2.6内核,如安全性、内存管理、进程管理、网络协议栈和驱动模型等都依赖于Linux2.6内核。Linux内核同时也作为硬件和软件栈之间的抽象层。

参考技术B Android应用程序层, 应用程序框架层, 系统运行库层, Linux核心层

第九章

HAL ( Hardware Abstraction Layer,硬件抽象层,〉是建立在Linux 驱动之上的一套程序库。这套程序库并不属于Linux 内核, 而是属于Linux 内核层之上的应用层。Google 为Android 增加HAL 的主要目的除了尽量避免应用程序直接访问Linux 驱动外,还有一个重要原因,那就是保护“私人财产”。

在传统的、Linux.系统中Linux驱动一般有两种类型的代码:访问硬件寄存器的代码和业务逻辑代码。对于访问硬件寄存器的代码,并没有什么秘密可言,因为这都是调用的Linux 内核的标准函数〈如ioread32 、iowrite32 等)进行的标准操作. 而Linux 驱动的业务逻辑部分对击有些企业或个人并不想将源代码公开。

Google 为了满足这些不想开源的Linux 驱动作者的要求工在android层次结构中的系统运行库层增加了一个HAL。

Google 为android加入HAL主要有如下的目的:

统一硬件的调用接口。由于HAL 有标准的调用接口,所以可以利用HAL:屏蔽Linux 驱动复杂,不统一的接口。

解决了GPL(版权问题。由于Linux 内核基于GPL协议,而Android 基于Apache Licence 2 .0 协议.因此Google 玩了个“穿越”将原本位于Linux驱动中的敏感代码向上移了一个层次。这样这些敏感代码就摆脱了GPL 协议的束缚,那些不想开源的Linux驱动作者也就没必要开源了。

针对一些特殊的要求。对于有些硬件,可能需要访问→些用户空间的资源,或在内核空间不方便完成的工作以及特殊需求。在这种情况下,可以利用位于用户空间的HAL 代码来辅助Linux驱动完成一些工作。

编写一款支持HAL 的Linux 驱动程序的步骤

第1 步编写Linux 驱动

第2 步:编写HAL Library

第3 步:编写Service Library

编写HAL 模块的步骤和原理如下。

第l步:定义结构体和宏

编写HAL 模块需要使用到3 个非常重要的结构体( hw_module_t 、hw_device_t 和 hw _ module_ methodle _t),在第l 步需要定义两个新的结构体,这两个结构体的第l 个变量的数据类型必须是hw_module_t 和bw_device_t。除此之外, 还需要为HAL 模块定义一个ID. 实际上在这l步就是编写leds hal.h 头文件的代码。

第2 步L 编写HAL 模块的open 函数

 open 函数是HAL 模块的入口点。该函数主要做如下3 项工作

初始化hw device t 的子结构体。

打开设备文件。

初始化寄存器。

第3 步:定义hw_module_methods_ t 结构体变量

第4 步: 定义HAL_MODULE_INFO_SYM 变量

第5 步:编写HAL 模块的close 函数

第6 步 :编写控制LED 的函数

android.系统中使用Linux 驱动有两种方式。一种是通过传统的方式直接与Linux 驱动交互。另外一种是Android特有的,就是通过HAL模块。HAL模块本质上就是通过Linux 共享库(.so)与Linux驱动交互,然后应用程序再访问Linux.共享库。早期的HAL模块由应用程序直接按访问Linux共享库的方式调用。而高版本的Android 系统为HAL增加了Stub ;换句话说还就是为每一个HAL共享库指定一个ID,再利用这个ID 配合一定的规则找到Linux共享库,这样Linux 共享库更换文件名,移动位置都很方便(因为HAL 共享库的路径和文件名都不是定死的), Google 也建议使用Stub 的方式编写HAL 模块。

 

 

 

以上是关于Android系统的底层建立在Linux系统之上,该平台由那4层组成的主要内容,如果未能解决你的问题,请参考以下文章

逻辑卷LVM

第九章 硬件抽象层:HAL

硬件抽象层

第九章心得

第九章

Android深度探索HAL读书笔记9