现在的位置: 首页 > 综合 > 正文

Andriod内核分析

2013年10月06日 ⁄ 综合 ⁄ 共 3792字 ⁄ 字号 评论关闭

摘要:
介绍Android移动平台系统架构.通过对An droid源代码的分析. 将其与标准Linux内核(2.6.27)源代码相比较,详细解析An droid内核的功能更新,分析讨论An droid内核与标准Linux内核之间的不同以及An droid在移动平台上的优势.并对An droid在各种内核之间做出一个定位,介绍Ubuntu环境下An droid内核的获得与编译

 

引言
随着嵌入式技术的发展.智能手机的运行速度和所集成的功能获得了极大提升 借着这股东风.Google主导的开放手机联盟OHA (0Den Handset Alliance)顺势在2008年推出了Android移动终端平台 Android是一个开放、自由的移动终端平台.它的发布.打破了诺基亚Symbian操作系统和微软WindOWs Mobile操作系统在智能手机平台上的垄断地位.同时.其平台化的优势也大大丰富各种手持式设备软件的功能。

1 Android系统架构

Android是Googk开发的基于Linux平台的开源手机操作系统.它是一个移动终端平台.包括了移动电话丁作所需的全部软件,由操作系统、中间件、UI(UserInterface)及应用程序组成。开发人员使用Java语言,开发运行于Dalvik虚拟机上的应用程序.其运行效率比一般嵌入式“nux操作系统上的J2ME程序高Android系统架构自底向上由以下4个层次组
成:基于Linux的内核模块、运行时库与其他库、应用程序框架、应用程序
(1)基于Linux的内核模块
Android内核基于Linux 2.6.提供安全、内存管理、进程管理、网络组、驱动模型等核心服务。同所有Linux内核一样.Android内核是介于硬件层和软件组之间的一个抽象层次

(2)运行时库与各种程序库
运行时库实质是一款Java重新设计的虚拟机Dalvik.它包含J2SE所提供的绝大部分功能 每个Android应用都运行在自己的进程上.Dalvik虚拟机为它分配自有的实例 Dalvik使一台设备能运行多个虚拟机程序但消耗较少的资源 在android中.编译器将Java源文件转为class文件,内置的dx工具又将class文件转化为Dex文件.Dex文件是在Dalvik虚拟机上运行程序的标准格式.
各种程序库 :包含一套C/C++库.Android的各式组件都可使用 这些功能通过组件间接提供给开发者。这些库包括图形框架、媒体功能库、Webkit、及SQLite数据库,等等
(3)应用程序框架
提供应用程序开发所需要的各种API 在开发过程中.开发人员通过充分使用应用框架提供的API,对各种组件、服务进行重用.从而开发出精简、高效的应用程序。主要包括以下几种核心组件:
UI组件:包括List、Layout、Textbox、Utton、Check.box等.用以构建应用程序与用户的交互界面.
内容提供器(Content Provider):实现标准的方法接口。让其他应用保存或读取其提供的数据.例如外部程序通过Content Provider访问联系人数据.
资源管理器(Resource Manager):管理对非代码的访问,例如本地图像、布局文件、本地化字符串等.
消息管理器(Notification Manager):让程序将警示信息显示在状态栏上.例如平台接收到短信息、电子邮件、未接电话时在状态栏上的提示.
Activity管理器fActiv Manager):用来管理应用程序生命周期并提供常用的导航回退功能闭。
(4)应用程序
Android预装了一系列由Java语言编写成的核心应用程序,包括短信服务、电话、Email客户端、浏览器、Google地图等。

2 Android内核分析

2.1 内核在操作系统中的地位
Android基于Linux操作系统,由硬件、系统内核、系统服务和应用程序等四大部分嗍组成。其中,内核(Kerne1)是最核心的部分.其主要作用在于与计算机硬件进行交互.实现对硬件的编程控制和接口操作.调度访问硬件资源.同时向应用程序提供一个高级的执行环境和对硬件的虚拟接口 。主要功能包括:中断服务程序、进程调度程序、进程地址空间的内存管理、进程间通信。内核与普通应用程序不同.其拥有所有硬件设备的访问权限以及启动时即划分的受保护的内存空间.

2.2 Android内核
和标准的Linux内核一样.Android内核主要实现内存管理、进程调度、进程间通信等功能。
Android内核是在标准Linux内核的基础上修改而成 为了适应嵌入式硬件环境和移动应用程序的开发.Android对标准Linux内核进行了一定的修改。为了对比分析Android内核.在Ubuntu操作系统上搭建了Android内核的编译开发平台,通过repo,下载最新的Android内核代码版本cupcake(其中Linux内核版本为2.6.27) 从获得的内核源码树的根目录结构
看.Android内核源码与标准LinUX内核并无不同。

经过与标准Linux内核源代码进行详细对比.可以发现,Android内核与标准Linux内核在文件系统、进程间通信机制、内存管理等方面存在不同。
① 文件系统
不同于桌面系统与服务器。移动设备大多采用的不是硬盘而是采用Flash作为存储介质.因此.Android内核中增加了标准Linux(内核中没有采纳的YAFFS2文件系统 YAFFS2(Yet Another Flash File Sy-steIn.2nd edition)是专用于Flash的文件系统.对NAND.Flash芯片有着良好的支持 YAFFS2是日志结构的文件系统.提供了损耗平衡和掉电保护.可以有效地避免意外断电对文件系统一致性和完整性的影响 YAFFS2按层次结构设计,分为文件管理接口、内部实现层和NAND.简化了其本身与系统的接EI设计.能更方便地集成到系统当中。经过测试证明.YAFFS2性能比支持NOR型闪存的JFFS2文件系统优秀171。
② 进程间通信机制
Android增加了一种进程问的通信机制IPC Bin—der,在内核源代码中.驱动程序文件为COredroid/inelude/linux/binder.h和coredroid/drivers/android/binder.
c。Binder通过守护进程Service Manager管理系统中的服务.负责进程问的数据交换。各进程通过Binder访问同一块共享内存.以达到数据通信的机制 从应用层的角度看.进程通过访问数据守护进程获取用于数据交换的程序框架接口.调用并通过接口共享数据.而其他进程要访问数据.也只需与程序框架接口进行交互.方便了程序员开发需要交互数据的应用程序
③ 内存管理
在内存管理模块.Android内核采用了一种不用于标准Linux内核的低内存管理策略 在标准Linux内核当中,使用一种叫做OOM(Out of Memory)的低内存管理策略;当内存不足时,系统检查所有的进程。并对进程进行限制评分.获得最高分的进程将被关闭(内核进程除外)。Android系统采用的则是一种叫作LMK(Low Memory Killer)的机制.这种机制将进程按照重要性进行分级、分组 内存不足时.将处于最低级别组的进程关闭。例如.在移动设备当中。UI界面处于最高级别,所以该进程永远不会被中止,这样,在终
端用户看来.系统是稳定运行的 在Andorid内核源码中.LMK 的位置是coredroid/drivers/mise/lowme—morykiller.c。
与此同时.Android新增加了一种内存共享的处理方式Ashmem(Anonymous Shared Memory.匿名共享内存)。通过Ashmem,进程间可以匿名自由共享具名的内存块,这种共享方式在标准Linux当中不被支持。
④ 电源管理
由于Android主要用于移动设备.电源管理就显得尤为重要.因此.在Android内核当中。增加了一种新的电源管理策略 目前.Android采用的是一种较为简单的电源管理策略,通过开关屏幕、开关屏幕背光、开关键盘背光、开关按钮背光和调整屏幕亮度来实现电源管理.并没有实现休眠和待机功能。有三种途径判断调整电源管理策略:RPC调用、电池状态改变和电源设置 它通过广播Intent或直接调用API的方式来与其他模块进行联系 电源管理策略同时还有自动关机机制.当电力低于最低可接受程度时.系统将自动关机 Android的电源管理模块还会根据用户行为,自动调整屏幕亮度.
⑤ 驱动及其他
相对于标准内核.Android内核还添加了字符输出设备、图像显示设备、键盘输入设备、RTC设备、USBDevice设备等相关设备驱动.增加了日志(Logger)系统,使应用程序可以访问日志消息

3 结语

经过分析.Android内核由标准Linux内核修改而来.因此继承了Linux内核的各种优点.保留了标准Linux内核的主体架构。同时.Android按照移动设备的需求,在文件系统、内存管理、进程间通信机制、电源管理等方面进行了修改.添加相关的驱动程序和一些必要的新功能.但是与大多数精简的嵌入式Linux操作系统(例如uCLinux)相比.Android很大程度上保留了标准Linux的基本架构.因此.Android系统应用范围更加广泛.拓展性更强。

抱歉!评论已关闭.