嵌入式系统的Android,Linux和实时开发

乍一看,Android似乎(还)是智能手机的另一个操作系统,加入了所有争夺霸主地位的其他操作系统,例如Symbian,Windows Mobile,WebOS和各种Linux。嵌入式物联网学习路线点击领取

但是,最好将Android视为可构建智能手机的软件平台,因为它是免费提供的且可高度配置。更准确地说,它是用于构建连接设备的软件平台。

Android是基于Linux的应用程序框架。我们将很快查看框架各层的细节。它以开放源代码的形式提供,但并不约束GPL约束用户。“开发人员无需公开使用Android开发的任何代码。

查看Android的另一种方法是从历史角度来看。在PC的早期,操作系统是DOS。由于操作系统提供的服务非常有限,因此为PC编写应用程序的程序员面临一些重大挑战。

例如,电子表格应用程序的开发人员将需要为用户可能希望部署的每台可能的打印机提供驱动程序。这是一项重大的开发和支持开销。

在适当的时候,Windows的发行和广泛接受(从版本3开始)非常有效地解决了这个问题。在许多方面,Android在Linux上的作用与Windows在DOS下的作用相同:它在应用程序和操作系统之间提供了一个中间层。

Android历史

由于Android似乎是当前讨论的热门话题,很难记住它是一个相当新的东西。它始于2005年Google收购Android Inc.时。他们成立了开放手机联盟,并于2007年发布了Android,第二款手机于次年问世。源代码是在那时发布的。

随着更多设备(主要是手机)的发布,Android现在已经达到2.1版并获得广泛支持。最新的(当然也是最受关注的)是Google自己的Nexus One设备。

Android体系结构

Android系统主要由五个软件层组成:1)Linux;2)图书馆;3)运行时;4)应用框架;5)应用

Linux 。确切地说,最底层是Linux OS本身的2.6.3x版本,带有115个补丁。这提供了进程和内存管理,安全性,网络连接以及一系列相关的设备驱动程序。

图书馆。 一组库位于操作系统的顶部。这包括Google的仿生版本libc,媒体和图形库以及轻量级数据库“ SQLite”。嵌入式物联网学习路线点击领取

运行时 。除了库,在OS之上还有Android运行时” Dalvik VM。严格来说,这不是Java虚拟机,但它可以实现此目的。它是专为Android设计的,基于寄存器以节省内存并最大化性能。Dalvik VM的单独实例用于执行每个Android应用程序。底层操作系统用于内存管理和多线程。

应用框架 。该层为应用程序提供了许多服务:视图,内容提供者和资源,通知和活动管理器。这些都是作为Java类实现的。任何应用程序都可以“发布”其功能以供其他应用程序使用。

应用程序 。Android通常会分发许多应用程序,其中可能包括电子邮件,SMS,日历,联系人和Web浏览器。所有应用程序都具有相同的状态:“提供的应用程序不是“特殊”的。

应用程序通常用Java编写,并使用标准Java工具进行处理,并使用转换器将其转换为Dalvik VM字节码。

应用程序开发

可从Google获得基于Eclipse的开发环境。可以与Android模拟器或真实设备(通过USB连接)结合使用。仅支持有限范围的基于ARM的设备。

编程模型 。一个Android应用程序由许多资源组成,这些资源被捆绑到一个档案(一个Android包)中。

程序通常用Java编写,并使用Dalvik VM运行。这使用了非标准的,内存有效的字节码。每个程序都在自己的Linux进程中运行,因此可以免受其他程序的攻击。

程序没有单个入口(例如main())。只是有许多组件可以根据需要实例化和运行。组件有四种类型:

*活动

*服务

*广播接收者

*内容提供者

一个活动 是执行特定的功能,并且具有用户界面的可执行的单元。一个应用程序可能包括许多活动,但是一个活动被指定为默认(入口点),当用户启动程序时,该活动即开始执行。

一个服务 是类似的活动,但它在后台没有用户界面和运行。

广播接收器 响应其他应用程序或OS发出的系统范围的消息。

内容提供商 将数据提供给其他应用程序。该数据可以保存在文件系统中,SQLite 数据库中或其他地方“关于数据存储,具有完全的灵活性。

Android应用程序以Android 清单文件中的结构化XML描述。它以AndroidManifest.xml的名称存储在应用程序文件系统的根目录中。这是一个例子:

嵌入式系统的Android,Linux和实时开发_第1张图片

意图

意图是一个异步消息,请求执行特定的操作。目的可以激活活动,服务或广播接收器。对于活动和服务,意图既指定必需的操作,又指定必需数据的位置。

应用程序具有意图过滤器,它们定义了应用程序组件可以处理的意图类型。这些都包含在清单文件中。这是一个例子:

嵌入式系统的Android,Linux和实时开发_第2张图片

Android部署

当前Android的发行版偏向于手机设计者的需求。Google选择了这个市场,他们相应地配置了他们的产品。

因此,将Android重新定位到另一种设备是一个巨大的挑战。但是,操作系统的设计足够灵活,足以应对这些挑战。

在Mentor Graphics,我们的目标是为希望在移动电话之外的行业领域中开发基于Android的设备的客户提供支持。我们预计会有许多Android“版本”的发布,每个版本都针对特定的垂直市场,并具有针对特定市场的组件和优化。这样的市场可能包括白色家电,医疗,汽车和电信。

在最高级别上,由于某些市场上普遍存在其他处理器,因此需要将Android移植到不基于嵌入式嵌入式ARM的设备上。尽管移植到新CPU不太困难,但要确保整个Android软件堆栈的最佳运行还需要大量工作。Android系统的每个部分都需要特别注意:

在Linux内核 必须移植,与像司机必要的电路板支持的部件。此外,还需要特定于行业的驱动程序。

这些库 需要进行优化,尤其是必须对其进行配置以充分利用任何可用的硬件加速(例如图形)。还需要各种特定于产品和行业的中间件。

移植后,必须非常仔细地为特定CPU优化Dalvik VM,因为这决定了应用程序代码执行的效率。

该应用程序框架 ,需要类似的面向行业的优化库。

对于应用程序 开发,需要一个环境,该环境支持跨实际和仿真的各种硬件目标进行代码开发和调试。

Android和实时系统

Android与Linux一样不是实时的。可以采取一些步骤来确定这种操作系统,但是这种方法存在严重的局限性。它可能具有低于所需的性能,并且驱动程序等可能与实时应用程序的需求不兼容。

更好的解决方案是使用真实的实时操作系统来执行系统的实时活动,而Android(或Linux)提供其他功能。因此,每种类型的OS都可以最佳使用:

RTOS

*实时性强

*在数据平面上最优

*认证的软件堆栈

非实时操作系统(Android / Linux)

*用户应用程序框架

*大量中间件产品(生态系统)

*用户界面

可以通过多种方式来促进运行多个操作系统。可以使用系统管理程序来实现虚拟化,该系统管理程序以受控的方式在操作系统之间划分CPU时间,从而为处理器提供每个明显的总体控制权。这种方法很复杂并且可能有性能限制,但是如果部署了旧版硬件,可能会很有吸引力。

多个CPU(一个芯片上的内核或一个板上的芯片)的使用对系统设计人员越来越有吸引力,因为这可以优化功耗。

这提供了机会,可以在每个CPU上简单地运行适合所需功能的不同OS。因此,一个或多个CPU可能正在运行Android / Linux,而一个或多个其他CPU可能正在运行RTOS。

结论

Android是一种颠覆性技术,是为手机引入的,但潜力更大。

广泛部署Android面临许多挑战,但是Mentor Graphics等公司致力于支持选择Android / Linux来实现嵌入式开发工程师。

随着对高功能性和低功耗需求的协调,多核与多种操作系统的结合使用将变得越来越普遍。

你可能感兴趣的:(1024程序员节)