嵌入式系统实验Cortex A8处理平台实验以及Android平台实验实验讲义.docx
- 文档编号:26141193
- 上传时间:2023-06-17
- 格式:DOCX
- 页数:58
- 大小:8.65MB
嵌入式系统实验Cortex A8处理平台实验以及Android平台实验实验讲义.docx
《嵌入式系统实验Cortex A8处理平台实验以及Android平台实验实验讲义.docx》由会员分享,可在线阅读,更多相关《嵌入式系统实验Cortex A8处理平台实验以及Android平台实验实验讲义.docx(58页珍藏版)》请在冰豆网上搜索。
嵌入式系统实验CortexA8处理平台实验以及Android平台实验实验讲义
嵌入式系统实验CortexA8处理平台实验以及Android平台实验
一,基础知识:
1,平台资源介绍:
本系统采用广州友善之臂的tiny210开发实验仪为基础平台,Tiny210和Tiny210V2均是一款高性能的Cortex-A8核心板,采用三星S5PV210作为主处理器,运行主频可高达1GHz,S5PV210内部集成了PowerVRSGX540高性能图形引擎,支持3D图形流畅运行,并可播放1080P大尺寸高清视频,流畅运行Android,Linux和WinCE6等高级操作系统。
平台核心板资源介绍
核心板外形
板载资源
Item
资源
CPU
●SamsungS5PV210,基于CortexTM-A8,运行主频1GHz
●内置PowerVRSGX540高性能图形引擎
●支持流畅的2D/3D图形加速
●最高可支持1080p@30fps硬件解码视频流畅播放,格式可为MPEG4,H.263,H.264等
●最高可支持1080p@30fps硬件编码(Mpeg-2/VC1)视频输入
DDR2RAM内存
●Size:
512MB
●32bit数据总线,单通道
●运行频率:
200MHz
Flash存储资源
标配SLCNANDFlash:
512M(可选配256M/1GSLCNandFlash)
IO资源
●2x60Pin2.0mmspaceDIPconnector
●1x30Pin2.0mmspaceDIPconnector
●1x51Pin1.0mmspaceSMDconnector
板载外设
●4xUserLeds(Green)
●1xPowerLed(Red)
●HDMI接口
供电
2V~6V唤醒模式
核心板组件分布
平台资源介绍
平台地板外形
板载资源
Item
资源
LCD显示
●支持7寸LCD真彩显示屏
网络
●一个10/100M自适应以太网接口(DM9000AEP)
标准接口资源
标配SLCNANDFlash:
512M(可选配256M/1GSLCNandFlash)
接口资源
●miniPCIe接口,可连接使用市面大部分3G模块
●2个DB9式RS232串口(另有4个TTL电平串口)
●1个miniUSBSlave2.0接口
●1路3.5mm立体声音频输出接口,1路在板麦克风输入
●3路USBHost2.0接口
●1个标准SD卡座
●5V直流电压输入:
接口座型号为DC-23B
固化外设
●1个I2C-EEPROM芯片(256byte),主要用于测试I2C总线
●8个用户按键(中断式资源引脚)
●1个可调电阻,用于ADC转换测试
●1个PWM控制蜂鸣器
●板载实时时钟备份电池
●板载重力感应芯片
●4个串口座:
TTL电平
●1个SDIO接口
●1个CMOS摄像头接口
●6路AD输入
●1个AVIN接口,用于连接CCD摄像头
底板布局
各个接口说明:
1)电源接口说明:
本开发板采用5V直流电源供电,提供了2个电源输入口,CN1为附带的5V电源适配器插座,白色的CON5为4Pin插座,方便板子放入封闭机箱时连接电源。
电源接口说明
2)串口说明
S5PV210本身总共有4个串口,其中UART1为四线的功能串口,UART0、2、3为两线串口。
在本开发板上,UART0和UART1已经经过RS232电平转换,它们分别对应于COM0和COM1,你可以通过附带的交叉串口线和PC互相通讯。
CON1,CON2,CON3,CON4在开发板上的位置和原理图中的连接定义对应关系如下图所示。
3)USB接口说明:
本开发板具有两种USB接口,一种是USBHost(2.0)接口,共3个,它和普通PC的USB接口是一样的,可以接USB摄像头、USB键盘、USB鼠标、优盘等常见的USB外设;另外一种是miniUSB(2.0),主要用于Android系统下的ADB功能,用于软件安装和程序调试。
miniUSB的接口定义如下:
(1—>Vbus2—>D-3—>D+4—>OTGID5—>GND)
USBHost的接口定义如下:
4)CCD摄像头接口
本开发板通过一片TVP5150芯片扩展实现CCD监控摄像头输入。
5)音频接口
S5PV210支持I2S/PCM/AC97等音频接口,本开发板采用的是I2S0接口,它外接了WM8960作为CODEC解码芯片,可支持HDMI音视频同步输出,其中,WM8960芯片板载在Tiny210V2核心板上,而TinySDK则在底板上。
同时本开发板也携带一个蓝色的MIC输入接口。
6)TV输入/输出接口
本开发板带一个红色的TV视频输入,同时带一个HDMI输出接口。
7)用户按键
本开发板总共有8个用户测试用按键,它们均从CPU中断引脚直接引出,属于低电平触发,连接如下表所示。
以上为本平台的接口简要介绍,详细请参考试验仪说明书。
二,Android系统介绍:
Android是基于Linux内核的操作系统,是谷歌公司在2007年11月5日公布的手机操作系统,早期由谷歌开发,后由开放手持设备联盟(OpenHandsetAlliance)开发。
它采用了软件堆层(softwarestack,又名以软件叠层)的架构,主要分为三部分。
底层Linux内核只提供基本功能;其他的应用软件则由各公司自行开发,部分程序以Java编写。
1、简介
BlackBerry和iPhone都提供了受欢迎的、高容量的移动平台,但是却分别针对两个不同的消费群体。
BlackBerry是企业业务用户的不二选择。
但是,作为一种消费设备,它在易用性和“新奇特性”方面难以和iPhone抗衡。
Android则是一个年轻的、有待开发的平台,它有潜力同时涵盖移动电话的两个不同消费群体,甚至可能缩小工作和娱乐之间的差别。
如今,很多基于网络或有网络支持的设备都运行某种Linux内核。
这是一种可靠的平台:
可经济有效地进行部署和提供支持,并且可直接作为面向部署的良好的设计方法。
这些设备的UI通常是基于HTML的,可通过PC或Mac浏览器查看。
但并不是每个设备都需要通过一个常规的计算设备来控制。
想象一下传统的家用电器,例如电炉、微波炉或面包机。
如果您的家用电器由Android控制,并且有一个彩色触摸屏,会怎么样?
如果电炉上有一个AndroidUI,那么操控者甚至可以烹饪点什么东西。
2、Android简史
Android平台是OpenHandsetAlliance的成果,OpenHandsetAlliance组织由一群共同致力于构建更好的移动电话的公司组成。
这个组织由谷歌领导,包括移动运营商、手持设备制造商、零部件制造商、软件解决方案和平台提供商以及市场营销公司。
从软件开发的观点看,Android正处在开源领域的中心位置。
市场上第一款支持Android的手机是由HTC制造并由T-Mobile供应的G1。
这款设备从设想到推出花了大约一年的时间,惟一可用的软件开发工具是一些实行增量改进的SDK发行版。
随着G1发行日的临近,Android团队发布了SDKV1.0,用于这个新平台的应用程序也浮出水面。
为了鼓励创新,谷歌举办了两届“AndroidDeveloperChallenges”,为优胜的参赛作品提供数百万美金的奖励。
G1问世几个月之后,随后就发布了AndroidMarket,它使用户可以浏览应用程序,并且可以将应用程序直接下载到他们的手机上。
经过大约18个月,一个新的移动平台进入公众领域。
3、Android系统架构图
图Android结构层次图
第一层:
Linux操作系统和驱动(Linuxkernel):
由C语言实现。
Android核心系统服务依赖于Linux2.6内核,包括:
安全性、内存管理、进程管理、网络协议、驱动模型。
Linux内核也作为硬件和软件栈之间的抽象层。
除了标准的Linux内核外,Android还增加了内核的驱动程序:
Binder(IPC)驱动、显示驱动、输入设备驱动、音频系统驱动、摄像头驱动、WiFi驱动、蓝牙驱动、电源管理。
第二层:
本地框架和Java运行环境(LIBRARIES和ANDROIDRUNTIME)
本地框架是有C/C++实现。
包含C/C++库,被Android系统中不同组件使用,它们通过Android应用程序框架为开发者进行服务。
系统C库:
(libc)从BSD继承过来的标准的C系统函数库,专门是为基于嵌入式Linux的设备定制的库。
多媒体库:
基于PackerVideo的OpenCore;该库支持多种常用的音频、视频格式回放和录制,支持多种媒体格式的编和解码格式。
SufaceManager:
显示子系统管理器,并且为多个应用程序提供2D和3D图层的无缝融合。
LibWebCore:
一个最新的Web浏览器引擎,支持Android浏览器,以及一个可嵌入式的Web视图。
SGL:
Skia图形库,底层的2D图形引擎。
3Dlibraries:
基于OpenGLES1.0API的实现;该库可以使用硬件3D加速(如果可用),或者使用高度优化的3D软加速。
FreeType:
位图(bitmap)和矢量(vector)字体显示。
Android运行环境(ANDROIDRUNTIME):
提供了Java编程语言核心库的大多数功能,由DalvikJava虚拟机和基础的Java类库组成。
Dalvik是Android中使用的Java虚拟机,每个Android应用程序都在自己的进程中运行,都拥有一个独立的Dalvik虚拟机实例。
Dalvik被设计成一个可以同时高效运行多个虚拟机实例的虚拟系统。
执行后缀名为.dex的Dalvik可执行文件,该格式的文件
针对小内存使用做出了优化。
同时虚拟机是基于寄存器的,所有的类都是有Java编译器编译,然后通过SDK中的“dx”工具
转化为.dex格式由虚拟机执行。
Dalvik虚拟机依赖于Linux内核的一些功能,比如线程机制和底层内存管理机制。
第三层:
Android应用框架(ANDROIDFRAMEWORK)
在Android系统中,开发人员也可以完全访问核心应用程序所使用的API框架。
包含的框架入上图(不在陈述)
第四层:
Android应用程序(APPLICATIONS)
注意:
Android应用程序都是有Java语言编写的。
用户开发的Android应用程序和Android的核心应用程序是同一层次的,它们都是基于Android的系统API构建的。
4、应用程序架构
如前所述,Android运行在Linux内核上。
Android应用程序是用Java编程语言编写的,它们在一个虚拟机(VM)中运行。
需要注意的是,这个VM并非您想象中的JVM,而是DalvikVirtualMachine,这是一种开源技术。
每个Android应用程序都在DalvikVM的一个实例中运行,这个实例驻留在一个由Linux内核管理的进程中,如下图所示。
图.DalvikVM
Android应用程序由一个或多个组件组成:
活动
具有可视UI的应用程序是用活动实现的。
当用户从主屏幕或应用程序启动器选择一个应用程序时,就会开始一个动作。
服务
服务应该用于任何需要持续较长时间的应用程序,例如网络监视器或更新检查应用程序。
内容提供程序
可以将内容提供程序看作数据库服务器。
内容提供程序的任务是管理对持久数据的访问,例如SQLite数据库。
如果应用程序非常简单,那么可能不需要创建内容提供程序。
如果要构建一个较大的应用程序,或者构建需要为多个活动或应用程序提供数据的应用程序,那么可以使用内容提供程序实现数据访问。
广播接收器
Android应用程序可用于处理一个数据元素,或者对一个事件(例如接收文本消息)做出响应。
Android应用程序是连同一个AndroidManifest.xml文件一起部署到设备的。
AndroidManifest.xml包含必要的配置信息,以便将它适当地安装到设备。
它包括必需的类名和应用程序能够处理的事件类型,以及运行应用程序所需的许可。
例如,如果应用程序需要访问网络—例如为了下载一个文件—那么manifest文件中必须显式地列出该许可。
很多应用程序可能启用了这个特定的许可。
这种声明式安全性有助于减少恶意应用程序损害设备的可能性。
5、所需工具
开始开发Android应用程序的最简捷的方式是下载AndroidSDK和EclipseIDE。
Android开发可以在微软Windows、MacOSX或Linux上进行。
本文假设您使用的是EclipseIDE和用于Eclipse的AndroidDeveloperTools插件。
Android应用程序是用Java语言编写的,但是是在DalvikVM(非Java虚拟机)中编译和执行的。
在Eclipse中用Java语言编程非常简单;Eclipse提供一个丰富的Java环境,包括上下文敏感帮助和代码提示。
Java代码通过编译后,AndroidDeveloperTools可确保适当地将它打包,包括AndroidManifest.xml文件。
虽然没有Eclipse和AndroidDeveloperTools插件也可以开发Android应用程序,但是那样就需要熟悉AndroidSDK。
AndroidSDK是作为一个ZIP文件发布的,可以将该文件解压到硬盘上的一个目录中。
由于有多个SDK更新,建议有意识地组织开发环境,以便在不同的SDK安装之间轻松地切换。
SDK包括:
android.jar
Java归档文件,其中包含构建应用程序所需的所有的AndroidSDK类。
documention.html和docs目录
本地和网上提供的SDK文档。
这些文档的主要形式为JavaDocs,以便于在SDK中导航大量的包。
文档还包括一个高级开发指南和Android社区的链接。
Samples目录
Samples子目录包含各种应用程序的源代码,包括ApiDemo,该应用程序演示了很多API。
这个示例应用程序可以作为Android应用程序开发的良好起点。
Tools目录
包含所有用于构建Android应用程序的命令行工具。
最常用、最有用的工具是adb实用程序(AndroidDebugBridge)。
usb_driver
该目录包含将开发环境连接到支持Android的设备(例如G1或AndroidDev1解锁开发手机)所需的驱动程序。
只有Windows平台的开发人员才需要这些文件。
6,Android应用程序的四个关键点
其实这里讲的应用程序开发和WP系统基本一致,其实JAVA和C#非常类似,我们可以详细了解一下,当然你也可以不用
对于一个Android应用程序来说,是由四种关键构造块组织而成的,这四种构造块分别是:
Activity、IntentReceiver、Service、ContentProvider
但是,并不是每一个Android应用程序都需要这四种构造块,这不是必须的,某些时候,我们只需要这四种中的几种组合成我们的应用。
当我们明确了我们的应用需要哪些构造块后,我们就需要在AndroidManifest.xml中登记这些构造块的清单。
这是一个XML配置文件,这个配置文件用于定义我们的应用程序的组件、组件的功能及必要条件等。
这个配置文件是每个Android应用必需的。
对于AndroidMainfest.xml的Schema,我们对四种构造块做一些说明:
1)Activity
Activity是Android构造块中最基本的一种,在应用中,一个activity通常就是一个单独的屏幕。
每一个activity都被实现为一个独立的类,并且继承于Activity这个基类。
这个activity类将会显示由几个Views控件组成的用户接口,并对事件做出响应。
大部份的应用都会包含多个的屏幕。
例如,一个短消息应用程序将会有一个屏幕用于显示联系人列表,第二个屏幕用于写短消息,同时还会有用于浏览旧短消息及进行系统设置的屏幕。
每一个这样的屏幕,就是一个activity。
从一个屏幕导航到另一个屏幕是很简单的。
在一些应用中,一个屏幕甚至会返回值给前一个屏幕。
当一个新的屏幕打开后,前一个屏幕将会暂停,并保存在历史堆栈中。
用户可以返回到历史堆栈中的前一个屏幕。
当屏幕不再使用时,还可以从历史堆栈中删除。
默认情况下,Android将会保留从主屏幕到每一个应用的运行屏幕。
Android使用了Intent这个特殊类,实现在屏幕与屏幕之间移动。
Intent类用于描述一个应用将会做什么事。
在Intent的描述结构中,有两个最重要的部分:
动作和动作对应的数据。
典型的动作类型有:
MAIN(activity的门户)、VIEW、PICK、EDIT等。
而动作对应的数据则以URI的形式进行表示。
例如:
要查看一个人的联系方式,你需要创建一个动作类型为VIEW的intent,以及一个表示这个人的URI。
与之有关系的一个类叫IntentFilter。
相对于intent是一个有效的做某事的请求,一个intentfilter则用于描述一个activity(或者IntentReceiver)能够操作哪些intent。
一个activity如果要显示一个人的联系方式时,需要声明一个IntentFilter,这个IntentFilter要知道怎么去处理VIEW动作和表示一个人的URI。
IntentFilter需要在AndroidManifest.xml中定义。
通过解析各种intent,从一个屏幕导航到另一个屏幕是很简单的。
当向前导航时,activity将会调用startActivity(IntentmyIntent)方法。
然后,系统会在所有安装的应用程序中定义的IntentFilter中查找,找到最匹配myIntent的Intent对应的activity。
新的activity接收到myIntent的通知后,开始运行。
当startActivity方法被调用将触发解析myIntent的动作,这个机制提供了两个关键好处:
◆Activities能够重复利用从其它组件中以Intent的形式产生的一个请求;
◆Activities可以在任何时候被一个具有相同IntentFilter的新的Activity取代。
2)IntentReceiver
当你希望你的应用能够对一个外部的事件(如当电话呼入时,或者数据网络可用时,或者到了晚上时)做出响应,你可以使用一个IntentReceiver。
虽然IntentReceiver在感兴趣的事件发生时,会使用NotificationManager通知用户,但它并不能生成一个UI。
IntentReceiver在AndroidManifest.xml中注册,但也可以在代码中使用Context.registerReceiver()进行注册。
当一个intentreceiver被触发时,你的应用不必对请求调用intentreceiver,系统会在需要的时候启动你的应用。
各种应用还可以通过使用Context.broadcastIntent()将它们自己的intentreceiver广播给其它应用程序。
3)Service
一个Service是一段长生命周期的,没有用户界面的程序。
比较好的一个例子就是一个正在从播放列表中播放歌曲的媒体播放器。
在一个媒体播放器的应用中,应该会有多个activity,让使用者可以选择歌曲并播放歌曲。
然而,音乐重放这个功能并没有对应的activity,因为使用者当然会认为在导航到其它屏幕时音乐应该还在播放的。
在这个例子中,媒体播放器这个activity会使用Context.startService()来启动一个service,从而可以在后台保持音乐的播放。
同时,系统也将保持这个service一直执行,直到这个service运行结束。
另外,我们还可以通过使用Context.bindService()方法,连接到一个service上(如果这个service还没有运行将启动它)。
当连接到一个service之后,我们还可以service提供的接口与它进行通讯。
拿媒体播放器这个例子来说,我们还可以进行暂停、重播等操作。
4)ContentProvider
应用程序能够将它们的数据保存到文件中、SQL数据库中,甚至是任何有效的设备中。
当你想将你的应用数据与其它的应用共享时,ContentProvider将会很有用。
一个ContentProvider类实现了一组标准的方法,从而能够让其它的应用保存或读取此ContentProvider处理的各种数据类型。
三,从简单开始学起:
上面的是不是说的太深奥了,我们就当科普知识把,从简单的学起。
我们知道现代移动终端的标志是UI(图形化的交互界面),一个好的UI其实决定了手机能否吸引消费者。
Android系统、IOS系统和WP系统都是UI系统,没有什么控制台的系统。
一个Android的UI的结构是什么,其实就是一个表单,如下图所示。
一个UI表单就是两个部分,标题和内容。
Yes,Everythingneedaname.这就是标题。
And,everythinghassomething.这就是内容。
内容就是我们的按键、动画和图片的显示的地方。
标题可以显示也可以隐藏。
既然要开发Android,需要有开发环境。
记住没有人会直接从底层去开发android,包括对内核进行修改,除非你是google的工程师或者是linux内核的开发者。
让我们结合实验一来介绍一下环境,我们首先技术几个单词:
1)IDE:
集成式开发环境。
指的是采用哪类开发编译软件,例如VC,eclipse等。
Android后者。
所谓的集成指的是将语言、编译器、调试器等集成到一个软件中,提供多个功能的开发。
2)ADT:
Android开发工具,提供调试、编译等功能,和eclipse集成到一起,当然是以第三方插件的方式。
3)SDK:
软件开发包。
包含了很多底层的工具,包括运行不用版本的Android的API类和接口等。
4)Android软件包:
基于SDK分为了多个版本的接口支持,包含于SDK中。
让我们从下图能看到他们的结构关系。
实验一Android开发环境搭建
首先值得注意的是:
构建开发环境和构建系统不是同一件事情,开发环境是指在Android的基础上进行软件的设计,构建系统指在某个开发平台上将Android的系统完整的搭建起来。
本文档不涉及构建系统的说明,主要是由于构建系统和在其他linux系统下搭建嵌入式系统的方法和流程基本一致,另外Android系统价值不在于系统的构建,相信没多少人会关注底层如何的,因为IOS或者Android有价值的是软件数量和生态链。
步骤一:
安装JDK,访问网站
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 嵌入式系统实验Cortex A8处理平台实验以及Android平台实验实验讲义 嵌入式 系统 实验 Cortex A8 处理 平台 以及 Android 讲义