浅谈Android(安卓)

更新时间:2023-12-26 11:13:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

浅谈Android--嵌入式操作系统

Android(读音:[??ndr?id],中文俗称安卓)是一个以Linux为基础的半开源操作系统,主要用于移动设备,由Google成立的Open Handset Alliance(OHA,开放手持设备联盟)持续领导与开发中。

--题记.维基百科

说起嵌入式系统,曾经在保罗大叔的著作《黑客与画家》里看到多次,然后不明所以,就去查了嵌入式系统。如果说嵌入式系统给我的第一印象是硬件,那么是我还不知道嵌入式在我生活里已经出现了很多年了。

大到冰箱,自动存款机(ATM),小到电子手表,遥控器。在维基百科解答后,我对嵌入式直观的理解,是一种特定的植入硬件并极具针对性的计算机系统。

后来慢慢了解嵌入式的软件方面,就知道了嵌入式操作系统,而其中的佼佼者,就是如今已经超越ios,占据半壁江山的Android。

之所以会说Android,原因有二:一,因为Android如今炙手可热,在新一季度的日本手机软件营销额上,以Java等语言为Android系统开发的Apps,疯狂揽金,李开复断言在两年内,中国内地手机游戏软件市场,将会百花齐放;二,我虽并非研究Java也非致力于Android系统,但是Android系统的内核,却是我所熟悉的Linux内核。而我将自己的开发平台转移到Linux系统,并以Python,Perl以及Lisp语言作为未来的生存工具,所以,就让我们谈一谈Android。

题记中套用维基百科对于Android的介绍,主要的目的,就是为了澄清一件事实“认知”——Android并没有真正的中文名。

Google并没有为Android命名,只有为其版本取名,且翻译成中文:4.2.x Jelly Bean 果冻豆,4.0.x Ice Cream Sandwich 冰激凌三明治,3.x.x Honey

Comb 蜂巢,2.3.x Ginger Bread 姜饼。而“安卓”一词,也是我们自己对其中文简称,就像Facebook并没有为其在中国大陆市场取名一样。

介绍完人家的名字,现在介绍安卓的身世。

2003年10月,有“Android之父”之称的安迪·鲁宾(Andy Rubin)在美国加利福尼亚州帕洛阿尔托创建了Android科技公司(Android Inc.),并与利奇·米纳尔(Rich Miner)、尼克·席尔斯(Nick Sears)、克里斯·怀特(Chris White)共同发展这家公司。谈到创建Android科技公司的原因,鲁宾说:“聪明的移动设备能更好的意识到用户的爱好和要求。”尽管Android科技公司的创始人和员工过去都具有各自的科技成就,但是Android科技公司的经营只显露出它在智能手机软件的方面。

同年,鲁宾为Android科技公司花光了所有的钱。就在这时,史蒂夫·帕尔曼(Steve Perlman)递给了鲁宾一个信封,在里面装有1万美金的现金;帕尔曼并不是以投资的方式给鲁宾这笔钱,因为他拒绝了鲁宾给他的股份。

2005年8月17日,Google收购了Android科技公司,Android科技公司成为Google旗下的一部分。包括米奇·米纳尔、克里斯·怀特等所拥有的全资子公司,所有Android科技公司的员工都被并入Google。当时没有人知道Google为什么作出这项收购,有许多的猜测,后来证明Google正是借助此次收购正式进入移动领域。

在Google,鲁宾领导着一个负责开发基于Linux内核移动操作系统的团队,这个开发项目便是Android操作系统。Google的合作平台为Android提供了广阔的市场,Google给予各大硬件制造商、软件开发商一个灵活可靠的系统升级承诺,并保证将给予它们最新版本的操作系统。

2006年12月,《华尔街日报》和英国广播公司(BBC)报道了Google有可能进入移动领域的传闻,Google有可能推广移动领域下的各种Google服务,并且将推出一款名为Google电话的自有品牌智能手机。另有传闻指出,按照Google的作风,将有可能呈现出新的智能手机制造商和运营商模式。

2007年9月,Google提交了多项移动领域的专利申请。但并没有人知道,Google将会推出的是一款名为Android的智能手机操作系统。更多的猜测是,Google会推出一款像iPhone一样的自有品牌智能手机系列。

市场上第一款采用Google的Android操作系统的智能手机HTC T-Mobile G1,于2008年10月22日在美国上市,当时定价为179美元。

2007年11月5日,在Google的领导下,成立开放手持设备联盟(Open Handset Alliance),最早的一批成员包括Broadcom公司、HTC、Intel、LG、Marvell等公司。开放手持设备联盟的创建目的是为了创建一个更加开放自由的移动电话环境。而在开放手持设备联盟创建的同一日,联盟对外展示了他们的第一个产品:一部搭载了以Linux 2.6为内核基础的Android操作系统的智能手机。2008年12月9日,新一批成员加入开放手持设备联盟,包括ARM、华为、索尼等公司.

同时,一个负责持续发展Android操作系统的开源代码项目成立了AOSP(Android Open Source Project) 。除了开放手持设备联盟之外,Android还拥有全球各地开发者组成的开源社区来专门负责开发Android应用程序和第三方Android操作系统来延长和扩展Android的功能和性能。

Android操作系统使用开放免费代码许可证,一切代码都是公开免费的。Google对Android所使用的Linux内核依据Apache开源条款2.0中所规定的内

容进行了修改,包括添加智能手机网络和电话协议栈等智能手机所必需的功能,使它们能更好的在移动设备上运行,并且根据第二版GNU条款中所规定的内容对修改的Linux内核信息公布。Google也不断发布问卷和开放修改清单、更新情况和代码来让任何人看到并且提出他们的意见和评论,以便按照用户的要求改进Android操作系统。

Android操作系统是完全免费开源的,任何厂商都可以不经过Google和开放手持设备联盟的授权随意使用Android操作系统;但是制造商不能随意地在自己的产品上使用Google的标志和Google的应用程序,例如Google Play等。除非Google证明其生产的产品设备符合Google兼容性定义文件(CDD),这样才能在智能手机上预装Google Play Store、Gmail等应用程序,并且获得CDD的智能手机厂商也可以在其生产的智能手机上印上“With Google”的标志。

对于Android系统,我最关心的则是——Linux内核

Android操作系统的内核属于Linux内核的一个分支,具有典型的Linux调度和功能,除此之外,Google为了能让Linux在移动设备上良好的运行,对其进行了修改和扩充。Android去除了Linux中的本地X Window System,也不支持标准的GNU库,这使得Linux平台上的应用程序移植到Android平台上变得困难。2008年,Patrick Brady于Google I/O演讲“Anatomy & Physiology of an Android”,并提出的Android HAL架构图。HAL以*.so档的形式存在,可以把Android framework与Linux kernel隔开,这种中介层的方式使得Android能在移动设备上获得更高的运行效率。这种独特的系统结构被Linux内核开发者Greg Kroah-Hartman和其他内核维护者称赞。Google还在Android的内核中加入了自己开发制作的一个名为“wakelocks”的移动设备电源管理功能,该功能用于管

理移动设备的电池性能,但是该功能并没有被加入到Linux内核的主线开放和维护中,因为Linux内核维护者认为Google没有向他们展示这个功能的意图和代码。

2010年2月3日,由于Google在Android内核开发方面和Linux社区方面开发的不同步,Linux内核开发者Greg Kroah-Hartman将Android的驱动程序从Linux内核“状态树”(“staging tree”)上除去。2010年4月,Google宣布将派遣2名开发人员加入Linux内核社区,以便重返Linux内核。2010年9月,Linux内核开发者Rafael J. Wysocki添加了一个修复程序,使得Android的

“wakelocks”可以轻松地与主线Linux内核合并。2011年,Linus Torvalds说:“Android的内核和Linux的内核将最终回归到一起,但可能不会是4-5年。”

而Android作为能与ios系统PK的嵌入式操作系统,其拥有强大的特点则是它吸引人的关键。

当前的Android操作系统具有如下特点:显示布局,数据储存,网络,信息,语言,浏览器,支持Java,流媒体支持,硬件支持,多点触控,蓝牙,多任务处理,语音功能,无线共享功能,截图功能。

Android 系统架构

Android 是 Google 开发的基于 Linux 平台的开源手机操作系统,它是一个移动终端平台,包括了移动电话工作所需的全部软件,由操作系统、中间件、 UI (User

Interface)及应用程序组成。 开发人员使用 Java 语言,开发运行于 Dalvik 虚拟机上的应用程序,其运行效率比一般嵌入式 Linux 操作系统上的 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 管 理 器 (Activity Manager):用 来 管 理 应 用程序生命周期并提供常用的导航回退功能 。

(4)应用程序:Android 预装了一系列由 Java 语言

编 写 成 的 核 心 应 用 程 序 ,包 括 短 信 服 务 、电 话 、Email客户端、浏览器、Google 地图等。

Android 内核分析

2.1 内核在操作系统中的地位Android 基于 Linux 操作系统, 由硬件、 系统内核、系统服务和应用程序等四大部分组成。 其中,内核 (Kernel) 是 最 核 心 的 部 分 ,其 主 要 作 用 在 于 与 计 算机硬件进行交互, 实现对硬件的编程控制 和接口 操作,调度访问硬件资源,同时向应用 程序提供一个高级的执行环境和对硬件的虚拟接口。主要功能包括:

中断服务程序、进程调度程序、进程地址空间的内存管理、进程间通信。 内核与普通应用程序不同, 其拥有所有硬件设备的访问权限以及启动时即划分的受保护的内存空间。

2.2 Android 内核和 标 准 的 Linux 内 核 一 样 ,Android 内 核 主 要 实现内存管理、进程调度、进程间通信等功能。Android 内核是在标准 Linux 内核的基础上修改而成。 为了适应嵌入式硬件环境和移动应用程序的开发,Android 对标准 Linux 内核进行了一定的修改。 为了对比分析 Android 内

核,在 Ubuntu 操作系统上搭建

了 Android 内 核 的 编 译 开 发 平 台 ,通 过 repo ,下 载 最新的 Android 内核代码版本 cupcake(其中 Linux 内核版本为 2.6.27)。 从获得的内核源码树的 根目录结构看 ,Android 内 核 源 码 与 标 准 Linux 内 核 并 无 不 同 。Android 内核源码树根目录结构如表 1 所示。经过与标准 Linux 内核源代码进行详细对比,可以发现,Android 内核与标准 Linux 内核在文件系统、进程间通信机制、内存管理等方面存在不同。

1.文件系统

不同于桌面系统与服务器, 移动设备大多采用的不是硬盘而是采用 Flash 作为存储介质,因此,Android内核中增加了标准 Linux 内核中没有采纳的 YAFFS2文件系统。 YAFFS2 (Yet Another Flash File Sy-stem,2nd edition) 是专用于 Flash 的文件系统, 对 NAND-Flash 芯片有着良好的支持。 YAFFS2 是日志结构的文件系统,提供了损耗平衡和掉电保护,可以有效地避免意外断电对文件系统一致性和完整性的影响。 YAFFS2按层次结构设计, 分为文件管理接口、 内部实现层和NAND,简化了其本身与系统的接口设计,能更方便地集成到系统当中。 经过测试证明, YAFFS2 性能比支持NOR 型闪存的JFFS2 文件系统优秀。

2.进程间通信机制

Android 增加了一种进程间的通信机制 IPC Bin-der, 在内核源代码中, 驱动程序文件为coredroid/include/linux/binder.h和

coredroid/drivers/android/binder.c 。Binder 通过守护进程 Service Manager 管理系统中的服务,负责进程间的数据交换。各进程通过 Binder 访问同一块共

享内存,以达到数据通信的机制。从应用层的角度看, 进程通过访问数据守护进程获取用于数据交换的程序框架接口,调用并通过接口共享数据,而其他进程要访问数据,也只需与程序框架接口进行交互,方便了程序员开发需要交互数据的应用程序。

3.内存管理

在内存管理模块 ,Android内核采用了一种不用于标准 Linux 内核的低内存管理策略。 在标准 Linux内核当中,使用一种叫做 OOM (Out of Memory)的低内存管理策略;当内存不足时,系统检查所有的进程,并对进程进行限制 评分, 获得最高分的进程将被关 闭(内核进程除外)。Android 系统采用的则是一种叫作LMK(Low Memory Killer )的机制,这种 机制将进 程 按照重要性进行分级、分组。 内存不足时,将处于最低级别组的进程关闭。例如,在移动设备当中,UI 界面处于最高级别,所以该进程永远不会被中止,这样,在终端用户看来,系统是稳定运行的。在Andorid内核源码中,LMK的位置是coredroid/drivers/misc/lowme -morykiller.c。

与此同时,Android 新增加了一种内存共享的处理方式 Ashmem

(Anonymous Shared Memory,匿名共享内存)。通过 Ashmem,进程间可以匿名自由共享具名的内存块,这种共享方式在标准 Linux 当中不被支持。

Ashmem 分配和使用情况如下:

fd = ashmem_create_region(\if(fd < 0) return -1;

data = mmap(NULL, size, PROT_READ | PROT_WRITE,

MAP_SHARED, fd, 0); if(data == MAP_FAILED) goto out;

但出于安全原因 ,其他进程无法访问此名称(my_shm_region)区 域。文件描述符指向该共享内存区域,实际上是通过 IPC 绑定接口。

在Andorid内核源码中,Ashmem的位置是coredroid/mm/ashmem.c。 4.电源管理

由于 Android 主要用于移动设备,电源管理就显得尤为重要,因此,在 Android 内核当中,增加了一种新的电源管理策略。 目前,Android 采用的是一种较为简单的电源管理策略,通过开关屏幕、开关屏幕背光、开关键盘背光、开关按钮背光和调整屏幕亮度来实现电源管理,并没有实现休眠和待机功能。 有三种途径判断调整电源管理策略:RPC 调用、 电池状态改变和电源设置。 它通过广播 Intent 或直接调用 API 的方式来与其他模块进行联系。 电源管理策略同时还有自动关机机制,当电力低于最低可接受程度时 ,系统 将自动关机。 Android 的电源管理模块还会根据用户行为,自动调整屏幕亮度。

5.驱动及其他

相对于标准内核 ,Android内核还添加了字符输出设备、 图像显示设备、 键盘输入设备、RTC 设备、 USBDevice设备等相关设备驱动,增加了日志 (Logger) 系统,使应用程序可以访问日志消息。

经过分析,Android内核由标准Linux内核修改而来,因此继承了Linux内核的各种优点,保留了标准 Linux 内核的主体架构。 同时,Android 按照移动设备的需求,在文件系统、内存管理、进程间通信机制、电源管理等方面进行了修改,添

加相关的驱动程序和一些必要的新功能,但是与大多数精简的嵌入式 Linux操 作系统(例 如 uCLinux) 相比 ,Android很大程度上保留了标准 Linux 的基本架构,因此,Android 系统

应用范围更加广泛,拓展性更强。

参考文献:

《Android内核分析》——陈璟,陈平华,李文亮(广东工业大学计算机学院, 广州 510006 )

参考网站:

维基百科——Wikipedia

Android http://zh.wikipedia.org/wiki/Android

嵌入式系统 http://en.wikipedia.org/wiki/Embedded_system

嵌入式操作系统 http://en.wikipedia.org/wiki/Embedded_operating_system

加相关的驱动程序和一些必要的新功能,但是与大多数精简的嵌入式 Linux操 作系统(例 如 uCLinux) 相比 ,Android很大程度上保留了标准 Linux 的基本架构,因此,Android 系统

应用范围更加广泛,拓展性更强。

参考文献:

《Android内核分析》——陈璟,陈平华,李文亮(广东工业大学计算机学院, 广州 510006 )

参考网站:

维基百科——Wikipedia

Android http://zh.wikipedia.org/wiki/Android

嵌入式系统 http://en.wikipedia.org/wiki/Embedded_system

嵌入式操作系统 http://en.wikipedia.org/wiki/Embedded_operating_system

本文来源:https://www.bwwdw.com/article/jzzx.html

Top