蓝天下的蓝精灵(网学)贡献
武汉科技大学本科毕业设计
摘
要
随着具有先进的图形与影音处理能力的高效能硬件的出现,ARM-11系列从处理器到ARMCortexA8,Qualcomm(高通)Snapdragon等芯片,在移动设备中配备功能强大的操作系统已经成为现实.Android作为Google开发的基于Linux平台的开源手机操作系统,它包括操作系统,用户界面和应用程序——移动电话工作所需的全部软件,而且不存在任何以往阻碍移动产业创新的专有权障碍.HTC和MOTOROLA等老牌手机生产商已经发布了多款基于Android的智能
本文首先介绍了智能手机操作系统的体系结构,特点以及国内外的研究情况,然后在比较几种常见的智能手机操作系统的基础上,Android的结构和设对
at91sam9g45开发板,实现了Android的移植,同时提供简单的Android功能扩展.针对移植成功的Android系统进行了详细的测试和分析,为系统的实际
关键词:智能手机操作系统;Android;at91sam9g45;linux;移植
U
nR
eg
应用与进一步优化奠定了基础.
is
te
计实现作了相关介绍.最后根据开源社区提供的源代码,选择英蓓特公司
re
d
手机,并有更多的公司正在或计划推出基于Android的智能手机和平板电脑.
武汉科技大学本科毕业设计
Abstract
Withtheemergenceofadvancedgraphicsandhigh-performancevideoprocessinghardware,fromtheARM-11seriesprocessorstotheARMCortexA8,QualcommSnapdragonchips,etc.,themobiledeviceequippedwithpowerfuloperatingsystemhasbecomereality.GoogleAndroidisadevelopmentplatformbasedonLinuxopen-sourcemobilephoneoperatingsystem,whichincludesoperatingsystems,userinterfaceandapplications-requiredforallmobilephonesoftware,anddonothinderanypreviousmobileindustryexclusiveinnovationbarriers.Therehas
Android-basedsmartphonesandtabletcomputers.
Thispaperintroducesthearchitectureofsmartphoneoperatingsystem,characteristicsandstudythesituationathomeandabroad,andthencomparingseveralcommonsmartphoneoperatingsystem.ThestructureanddesignoftheAndroidrelatedpresentationsweremadetoachieve.Finally,theopensourcecommunitytoprovidethesourcecode,selectEmbestcompanyat91sam9g45developmentboard,
portedAndroidsystem,wecarriedoutadetailedtestingandanalysis,thepracticalapplicationofthesystemandlaidthefoundationforfurtheroptimization.
KeyWords:Smartphoneoperatingsystem;Android;at91sam9g45;linux;
porting
U
nR
SucceedtoportAndroid,andprovidedsimpleAndroidextensions.Basedonthe
eg
is
te
re
MOTOROLA.Andseveralcompaniesareresearchinganddevelopingthenew
d
beenvarietyofsmartphonesbasedonAndroidproducedbytheHTCand
武汉科技大学本科毕业设计
1
绪论……11.1课题背景及国内外研究概况……11.1.11.1.21.21.2.11.2.21.31.4课题背景……1国内外研究现状概括……1智能手机系统的特点……2智能手机系统的发展趋势……2
智能手机操作系统简介……2
Android的优势……3本论文的主要工作……4几种智能手机系统的比较……42.2.1Android体系结构简介……82.2.32.2.5LinuxKernel(Linux内核)……9Libraries(库)……10
2
Android操作系统简介……42.2Android的体系结构与设计实现……82.2.2Android架构……92.2.4ApplicationFrameworks(应用框架)……92.2.6Applications(应用)……11
3
设置工作环境……113.1开发板简介……11
3.2
U
4
系统移植……164.1Bootloader……164.1.1U-boot简介……164.1.2U-boot的体系结构……164.1.34.1.54.2.1移植步骤……17交叉编译U-boot……18Linux内核简介……19
4.2linuxkernel的移植……19
nR
3.1.13.1.23.2.13.2.2
核心芯片介绍……11硬件资源列表……12交叉编译工具……12交叉编译环境的搭建……13
软件环境设置……12
3.2.3AndroidToolchain与BionicLibc……15
eg
is
te
re
d
2.1
武汉科技大学本科毕业设计
4.2.2linux内核移植步骤……214.2.34.3配置和编译linux内核……24Android的移植……254.3.1Android代码结构……254.3.24.3.455.15.25.366.16.27获取Android源代码……27配置并编译Android……294.3.3Android移植步骤……29文件系统的建立……32软件工具……32配置文件……32操作步骤……32镜像下载……33系统功能测试……34
参考文献……36
U
nR
eg
is
致谢……37
te
结束语……36
re
d
系统功能演示及测试……33
武汉科技大学本科毕业设计
1
绪论
现代微电子技术的发展,催生了高性能,低功耗,具有强大图形处理能力的
嵌入式微处理器,更使得嵌入式移动设备可以搭载具有完全功能的操作系统.在智能手机领域,各大手机软件厂商都推出了自己的具有炫丽图形界面的智能手机操作系统.智能手机也逐步走向大众化,现在商务人士使用自己的智能手机随时可以查阅e-mail,浏览客户信息,智能手机系统已经渐渐替代以前PC机的部分功能.Android作为一个开源的智能平台,而以其开放性和可移植性等优势日益受到各大移动设备生产商的青睐.本章首先对智能手机操作系统和Android做了相关介绍,随后给出了本文
1.1
1.1.1
课题背景及国内外研究概况
课题背景
码.紧接着运营商德国T-Mobile在纽约正式发布第一款Android手机T-MobileG1.该款手机为台湾宏达电代工制造,是世界上第一部使用Android操作系统的手机,支持WCDMA/HSPA网络,理论下载速率7.2Mbps,并支持Wi-Fi.截止在不到两年时间的发展中,美国市场研究公司NPD近日发布的统计数据显示,今年第一季度期间,Android手机在美国市场的销量已超过iPhone,占据该季度美国智能手机总销量的28%,iPhone相应份额为21%.目前已经有多款使用Android的智能手机,超过5万的应用程序.
1.1.2国内外研究现状概括
Android由美国Android公司(Google2005年8月17日收购美国Android公司)开发,Google和其它几十个手机公司建立了开放手机联盟,现在由开放手机联盟开发.目前关于Android的资料已经很多,但多半以网络的形式发表,正式出版的书籍较少,且出版的多是开发指南,对系统底层的介绍非常之少.目前已经有多篇文章介绍Android移植成功的经验.其中包括EeePC和苹果iPone平台.
U
nR
eg
is
1
2008年9月,Google发表了Android开放源码计划,释出Android程序代
te
re
d
的研究方向和工作重点.
武汉科技大学本科毕业设计1.2智能手机操作系统简介
1.2.1智能手机系统的特点
1,具备普通手机的全部功能,能够进行正常的通话,收发短信等手机功能的应用.2,具备无线接入互联网的能力,即需要支持GSM网络下的GPRS或者CDMA网络下的CDMA1X或者3G网络.3,具备PDA的功能,包括PIM(个人信息管理),日程记事,任务安排,多媒体应用,浏览网页.4,具备一个具有开放性的操作系统,在这个操作系统平台上,可以安装更多的应用程序,从而使智能手机的功能可以得到无限的扩充.5,具有人性化的一面,可以根据个人需要扩展机器的功能.6,功能强大,扩展性能强,第三方软件支持多.
1.2.2智能手机系统的发展趋势
1.GPS目前,GPS功能越来越普遍.宏达电,RIM和其他智能手机厂商均推出了支持GPS功能的手机产品.他不仅可以帮助用户从A点走到B点,更重要的是,GPS服务商也推出各种各样的服务.2.开源开源是智能手机发展的一个新趋势,目前,智能手机厂商和运营商都宣布了自己的开源战略或产品.不久前,Google刚刚推出了Android开源移动平台计划.3.电池寿命电池续航时间是衡量智能手机的一个重要指标,Wi-Fi,蓝牙,彩屏和免提等均消耗不小的电量.因此,为延长续航时间,尽量关闭不常用功能.4.Wi-Fi找到一款新的Wi-Fi芯片,如AtherosAR6002系列,可以有效降低能耗,延长电池续航时间.5.验证接入今年年初,T-Mobile推出了Hotspot@Home服务,允许用户通过手机拨打VOIP电话,但只支持Wi-Fi手机.9月,RIM推出了支持该服务的智能手机.相信以后会有更多的产品上市.6.安全智能手机面临着各种安全威胁,如设备锁定,功能锁定,加密,验证,远程删除数据,防火墙和VPN等.7.多媒体为提升多媒体应用,智能手机需要平衡商用和个人应用所需功能.8.应用电子邮件可能是智能手机用户所需的最重要功能,但随着连接性的提高,智能手机还有更多的潜在功能,如支持Web2.0服务等.
U
nR
eg
is
2
te
re
d
武汉科技大学本科毕业设计
9.摄像头智能手机所内置的摄像头已不再是"鸡肋".10.家庭基站
1.3
Android的优势
一开放性在优势方面,Android平台首先就是其开放性,开放的平台允许任何移动终端厂商加入到Android联盟中来.显著的开放性可以使其拥有更多的开发者,随着用户和应用的日益丰富,一个崭新的平台也将很快走向成熟.开发性对于Android的发展而言,有利于积累人气,这里的人气包括消费者和厂商,而对于消费者来讲,随大的受益正是丰富的软件资源.开放的平台也会二挣脱运营商的束缚带来更大竞争,如此一来,消费者将可以用更低的价位购得心仪的手机.在过去很长的一段时间,特别是在欧美地区,手机应用往往受到运营商制约,使用什么功能接入什么网络,几乎都受到运营商的控制.自从iPhone上市,用户可以更加方便地连接网络,运营商的制约减少.随着EDGE,HSDPA这些2G至3G移动网络的逐步过渡和提升,手机随意接入网络已不是运营商口中的笑谈,当你可以通过手机IM软件方便地进行即时聊天时,再回想不久前天价的彩信和就有网络特色,将让用户离互联网更近.三丰富的硬件选择这一点还是与Android平台的开放性相关,由于Android的开放性,众多的厂商会推出千奇百怪,功能特色各具的多种产品.功能上的差异和特色,却不会影响到数据同步,甚至软件的兼容,好比你从诺基亚Symbian风格手机一下改用资料更是可以方便地转移,是不是非常方便呢?四不受任何限制的开发商Android平台提供给第三方开发商一个十分宽泛,自由的环境,不会受到各种条条框框的阻扰,可想而知,会有多少新颖别致的软件会诞生.但也有其两面性,血腥,暴力,情色方面的程序和游戏如何控制正是留给Android难题之一.五无缝结合的Google应用如今叱诧互联网的Google已经走过10年度历史,从搜索巨人到全面的互联网渗透,Google服务如地图,邮件,搜索等已经成为连接用户和互联网的重要纽带,而Android平台手机将无缝结合这些优秀的Google服务.苹果iPhone,同时还可将Symbian中优秀的软件带到iPhone上使用,联系人等图铃下载业务,就如在地狱一般?互联网巨头Google推动的Android终端天生
U
nR
eg
is
3
te
re
d
武汉科技大学本科毕业设计1.4本论文的主要工作
本论文在深入理解Android源代码的基础上,将开源Android系统移植到at91sam9g45开发板上,按照基本系统的移植步骤,先后实现了u-boot,linuxkernel,Android的移植.论文结构如下:第一章:绪论.该章介绍了智能手机平台的的特点,以及发展概况.在此基础上,结合毕业设计背景,给出了本设计的核心内容,课题意义.第二章:Android系统介绍.该章对Android操作系统给出了总体介绍,并阐述了Android体系结构和设计实现方法.第三章:设置工作环境.该章给移植需要的软硬件环境,主要包括编译工具链及其安装使用.bootloader进行介绍和移植,紧接着开始kernel和Android的移植,对移植的相关步骤进行了研究和分析.第五章:文件系统的建立.在生成了各个模块的二进制镜像后,我们在这一章建立一个文件系统,可以下载到开发板上运行.测试各个功能模块的是否完全可以正常工作.第六章:系统功能演示及测试.对移植成功的系统,显示已经可用的功能,第七章:结束语第四章:系统移植.首先从系统启动开始.我们选择了u-boot开源
2
Android操作系统简介
联盟开发.它采用了软件堆层的架构,主要分为三部分.底层以Linux内核工作为基础,只提供基本功能;其他的应用软件则由各公司自行开发,以Java作为编写程序的一部分.另外,为了推广此技术,Google和其它几十个手机公司建立了开放手机联盟.目前最新版本为Android2.1.
2.1
手机操作系统一般只应用在高端智能化手机上.目前,在智能手机市场上,中国市场仍以个人信息管理型手机为主,随着更多厂商的加入,整体市场的竞争已经开始呈现出分散化的态势.从市场容量,竞争状态和应用状况上来看,整个市场仍处于启动阶段.
U
Android是基于Linux内核的操作系统,早期由Google开发,后由开放手机
几种智能手机系统的比较
nR
eg
4
is
te
re
d
武汉科技大学本科毕业设计
目前应用在手机上的操作系统主要有PalmOS,Symbian,Windowsmobile,Linux和iPhoneOS,黑莓六种.1.PalmOS这是一种32位的嵌入式操作系统,主要运用于移动终端上.此系统最初由3Com公司的PalmComputing部开发,目前PalmComputing已经独立成一家公司.PalmOS与同步软件HotSync结合可以使移动终端与电脑上的信息实现同步,把台式机的功能扩展到了移动设备上.PalmOS操作系统由Palm公司自行开发的,并授权给Handspring,索尼和高通等设备厂家,这种操作系统更倾向于PDA的操作系统.PalmOS在PDA市场占有主导地位.Palm的产品线本身就包括智能手机,又宣布与最早的智能手机开发者Handspring购并,同时将软件部门独立.2.SymbianSymbian是一个实时性,多任务的纯32位操作系统,具有功耗低,内存占用少等特点,非常适合手机等移动设备使用,经过不断完善,可以支持GPRS,何人都可以为支持Symbian的设备开发软件.与微软产品不同的是,Symbian很好的适应不同方式输入的平台,也可以使厂商可以为自己的产品制作更加友的主要原因.现在为这个平台开发的java程序已经开始在互联网上盛行.用户可以通过安装这些软件,扩展手机功能.在Symbian发展阶段,出现了三个分支:分别是Crystal,Pearl和Quarz.前两个主要针对通讯器市场,也是出现在手机上最多的,是今后智能手机操作系机.而真正较为成熟的同时引起人们注意的则是2001年上市的诺基亚9210,它采用了Crystal分支的系统.2002年推出的诺基亚7650与3650则是Symbian而Pearl分系的机型,其中7650是第一款基于2.5G网的智能手机产品,他们都属于Symbian的6.0版本.索尼爱立信推出的一款机型也使用了Symbian的Pearl分支,版本已经发展到7.0,是专为3G网络而开发的,而目前的诺基亚已经达到8.0的6630,6681等,可以说代表了当今最强大的手机操作系统.此外,Symbian从6.0版本就开始支持外接存储设备,如MMC卡,这让它强大的扩展能力得以充分发挥,使存放更多的软件以及各种大容量的多媒体文件成为了可能.2010年2月4日消息,据国外媒体报道,Symbian基金会(SymbianFoundation)宣布Symbian系统将从今天开始完全开源并供免费下载.目前根据人机界面的不同,Symbian体系的UI(UserInterface用户界面)
5
U
统的主力军.第一款基于Symabian系统的手机是2000年上市的爱立信R380手
nR
eg
好的操作界面,符合个性化的潮流,这也是用户能见到不同样子的symbian系统
is
将移动设备的通用技术,也就是操作系统的内核,与图形用户界面技术分开,能
te
蓝牙,SyncML,以及3G技术.最重要的是它是一个标准化的开放式平台,任
re
d
武汉科技大学本科毕业设计
平台分为Series60,Series80,Series90,UIQ等.3.WindowsmobileWindowsMobile系统包括PocketPC和Smartphone以及MediaCenters,PocketPC针对无线PDA,Smartphone专为手机,已有多个来自IT业的新手机厂商使用,增长率较快.按照微软官方的说法:"WindowsMobile将熟悉的Windows体验扩展到了移动环境中,所以您可以立即使用它投入工作."事实上,WindowsMobile是微软进军移动设备领域的重大品牌调整,它包括PocketPC,Smartphone以及MediaCenters三大平台体系,面向个人移动电子消费市场.由于大多数机型支持彩色显示,因此耗电量极大,并且由于WindowsCE本身对于资源的巨大吞噬作用.在功能扩展方面微软比较倾向于集成使用,调制解调器等设备.
微软为手机而专门开发的WindowsMobile提供的功能非常多,在不同的平Smartphone提供的功能侧重点在联系方面,它主要支持的功能有:电话,电子主要支持的功能有:日程安排,移动版Office,简单多媒体播放功能.4.LinuxLinux系统是一个源代码开放的操作系统,目前已经有很多版本流行.但尚未得到较广泛的支持.Linux进入到移动终端操作系统近一年多时间,就以其开放源代码的优势吸引了越来越多的终端厂商和运营商对它的关注,包括摩托罗拉和NTTDoCoMo的e2800,三星的i519等.2004年6月在日本东京BIGSIGHT展览馆举办的"LinuxWorldExpo/Tokyo2004"博览会上,日本手机大厂商NEC则展示了其采用Linux操作系统的手机.我国的大唐电信也于7月宣布将Linux作为其TD-SCDMA3G手机操作系统.Linux与其它操作系统相比是个后来者,但Linux具有二个其它操作系统无法比拟的优势.其一,Linux具有开放的源代码,能够大大降低成本.其二,既满足了手机制造商根据实际情况有针对性地开发自己的Linux手机操作系统的要求,又吸引了众多软件开发商对内容应用软件的开发,丰富了第三方应用.然而Linux操作系统有其先天的不足:入门难度高,熟悉其开发环境的工程师少,集成开发环境较差;由于微软PC操作系统源代码的不公开,基于Linux的产品与PC的连接性较差;尽管目前从事Linux操作系统开发的公司数量较多,
6
U
等知名的厂商.已经开发出的基于Linux的手机有摩托罗拉的A760,A768,CEC
nR
eg
is
邮件,联系人,即时消息.PocketPC的功能侧重个人事务处理和简单的娱乐,
te
台上实现的功能互有重叠也各有侧重.这三个平台都支持和台式机的数据同步.
re
d
大多具有标准的CF卡插槽,用户可以根据自己的需要增加内存,加装摄像头,
武汉科技大学本科毕业设计
但真正具有很强开发实力的公司却很少,而且这些公司之间是相互独立的开发,很难实现更大的技术突破.尽管Linux在技术和市场方面有独到的优势,但是目前来说还无法与Symbian抗衡,想在竞争日益激烈的手机市场中站稳脚跟,抢夺市场份额也决非易事.5.iPhoneOSiPhoneOS或OSXiPhone是由苹果公司为iPhone开发的操作系统.它主要是给iPhone和iPodtouch使用.就像其基于的MacOSX操作系统一样,它也是以Darwin为基础的.iPhoneOS的系统架构分为四个层次:核心操作系统层(theCoreOSlayer),核心服务层(theCoreServiceslayer),媒体层(theMedialayer),可轻触层(theCocoaTouchlayer).系统操作占用大概512MB的存储空间.支持金塔计算机使用的x86处理器(就像以前的PowerPC或MC680x0),它使用由PowerVR视屏卡渲染的OpenGLES1.1..因此,MacOSX上的应用程序不能直下面所提到的,Safari浏览器支持"Web应用程序".从iPhoneOS2.0开始,通过iPhoneOS自带的应用程序在2.2版本的固件中,iPhone的主界面包括包括以下辅助的Google地图),天气,时间,计算机,备忘录,系统设定,iTunes(将会被链接到iTunesMusicStore和iTunes广播目录),AppStore以及联络资讯.还有四个位于最下方的常用应用程式包括有:电话,Mail,Safari和iPod.除了电话,简讯,和相机,iPodTouch保留了大部分iPhone自带的应用程序.iPhone上dock上的应用程序也根据iPodTouch的主要功能而改成了:音乐,视讯,照片和iTunes.Web应用程序在2007年苹果全球开发者大会上,苹果宣布iPhone和iPodTouch将会通过Safari互联网浏览器支持某些第三方应用程序,这些应用程序被称为Web应用程序.它们能通过AJAX互联网技术编写出来.6.BlackBerry"黑莓"BlackBerry是美国市场占有率第一的智能手机,这得益于它的制造商RIM(ResearchinMotion)较早地进入移动市场并且开发出适应美国市场的邮件系统.大家都知道BlackBerry的经典设计就是宽大的屏幕和便于输入的QWERTY键盘,所以BlackBerry一直是移动电邮的巨无霸.黑莓机的另一个特色,就是内建多款实时通讯软件,包括BlackBerryMessenger,GoogleTalk及YahooMessenger,不过目前只能用英文做沟通,软件
7
U
的"iPod"程序在iPodTouch上被分成了两个:音乐和视讯.位于主界面最下方
nR
eg
自带的应用程序:SMS(简讯),日历,照片,相机,YouTube,股市,地图(AGPS
is
审核的第三方应用程序已经能够通过苹果的AppStore进行发布和下载了.
te
接复制到iPhoneOS上运行.他们需要针对iPhoneOS的ARM重新编写.但就像
re
d
的软件iPhone和iPodTouch使用基于ARM架构的中央处理器,而不是苹果的麦
武汉科技大学本科毕业设计
仍不支持对中文字体的显示.正因为是正统的商务机,所以它在多媒体播放方面的功能非常孱弱,也许它在未来应该着力改善这个弱点,因为手机功能的整合是大势所趋,人们不会只满足于单一的功能.BlackBerry在美国之外的影响微乎其微,尤其是在中国,几乎没有人用BlackBerry的产品,因为国人对于电子邮件的依赖远远没有美国人那么强,国人追求的更多的是娱乐性.
2.2
Android的体系结构与设计实现
2.2.1Android体系结构简介
Android平台是一组面向移动设备的软件包,它包含了一个操作系统,中间件和关键应用程序.开发人员可以使用AndroidSDK(软件开发工具包)为这个平一款量身定制的虚拟机,它专为嵌入式应用设计,运行在Linux内核上层.
llll
应用程序框架支持组件的复用和更换
ll
SQLite轻量级的数据库,支持结构化数据的存储
l
lll
U
媒体支持面向常见的音频,视频以及静态图形档案格式(MPEG4,H.264,MP3,AAC,AMR,JPG,PNG,GIF)GSM技术GSM:globalsystemformobilecommunications(依赖硬件支持)Bluetooth,EDGE,3G,andWiFi(依赖硬件支持)Camera,GPS,compass,andaccelerometer(依赖硬件支持)Richdevelopmentenvironment丰富的开发环境,包含一套硬件仿真器,一些用于程序调试,内存和性能剖析的工具,以及支持Eclipse集成开发环境的插件(ADT).
nR
优化的图形机制自定义的2D图形库,基于OpenGLES1.0规范的3D图形实现(本项为硬件加速器可选)
eg
集成的浏览器基于开源的WebKit引擎
is
8
Dalvik虚拟机专门为移动设备进行过优化
te
re
台创造应用程序.应用程序使用Java语言编写并在Dalvik之内运行.Dalvik是
d
武汉科技大学本科毕业设计
2.2.2Android架构
下图显示了Android操作系统的主要组件.
2.2.3LinuxKernel(Linux内核)
Android依赖Linux2.6版,提供核心系统服务:安全,内存管理,进程管理,网络组,驱动模型.内核部分还相当于一个介于硬件层和系统中其他软件组之间的一个抽象层次.
2.2.4ApplicationFrameworks(应用框架)
Android的核心应用程序就是依赖框架层次API开发的,程序员们可以充分使用这些API.应用架构设计的初衷是:简化组件复用机制;任何应用都能发布自己的功能,这些功能又可以被任何其他应用使用(当然要受来自框架的强制安全规范的约束).和复用机制相同,框架允许组件的更换.所有应用都是一组服务和系统,一般包含:
n
U
一套丰富且可扩展的视图组件,含有lists,grids,textboxes,buttons,甚至
nR
eg
is
9
te
re
d
武汉科技大学本科毕业设计
嵌入的网络浏览器
n
ContentProviders(内容提供器)使一个应用可以访问另外一个应用的数据(如联系人),或者使一个应用内部可以共享自身数据ResourceManager(资源管理器),提供对非编码资源——例如本地化字符串,图形和布局文件——的访问通道NotificationManager(通告管理器),使应用在状态栏显示自定义的警报通知.ActivityManager(行动管理器)负责管理应用的生命周期,提供通用导航回退支持
n
n
n
2.2.5Libraries(库)
Android包含一套C/C++库,Android系统的各式组件都在使用.这些功能通
u
SystemClibrary-衍生于BSD的标准C系统库(libc)实现(注:BSD:年代由伯克利加州大学开创),尤其支持嵌入式的基于Linux的设备.
u
MediaLibraries-媒体库基于PacketVideo'sOpenCORE;媒体库支持很多流行音频和视频格式,静态图形文件(包括MPEG4,H.264,MP3,AAC,AMR,JPG,andPNG)的播放和录制
u
SurfaceManager-管理范围:对子系统显示功能的访问,跨应用的无缝组合2D和2D图形层LibWebCore-是流行的浏览器引擎,可以支持Android浏览器和嵌入应用的WEB视图组件SGL-底层的2D图形引擎3Dlibraries-基于OpenGLES1.0API的实现;该类库使用硬件3D加速器(如果硬件支持的话)或者内置的,高度优化的3D软件加速机制.FreeType-支持位图和矢量字体SQLite-能干,轻量级的关系型数据库引擎,面向所有应用AndroidRuntime(Android运行时)Android的核心类库提供Java类库所提供的绝大部分功能.每个Android应用都运行在自己的进程上,享有Dalvik虚拟机为它分配的专有实例.为了支持多个虚拟机在同一个设备上高效运行,Dalvik被改写过.Dalvik虚拟机执行的是Dalvik格式的可执行文件(.dex)——
10
uu
uuu
U
u
nR
eg
is
BerkeleySoftwareDistribution,伯克利软件套件,是Unix的衍生系统,1970
te
过Android应用框架暴露给开发人员.下面列举一些核心库:
re
d
武汉科技大学本科毕业设计
该格式经过优化,以降低内存耗用到最低.Java编译器将Java源文件转为class文件,class文件又被内置的dx工具转化为dex格式文件,这种文件在Dalvik虚拟机上注册并运行.在一些底层功能——比如线程和低内存管理方面,Dalvik虚拟机是依赖Linux内核的.
2.2.6Applications(应用)
Android将预装一组核心应用程序,包括email客户端,短信服务,日历日程,地图服务,浏览器,联系人和其他应用程序.所有应用程序都是Java编程语言编写的.
3.1
开发板简介
AT91SAM9G45处理器(ARM926EJ-S内核)的全功能评估板.SAM9G45开发256MBNandFlash,1MBNorFlash,512KBEEPROM,4MBDataFlash,以及2个64MB的DDR2SDRAM,并带有丰富的功能扩展:高速USB2.0(480MHz)音频输入,,音频输出,10/100Mbps网络,JTAG调试接口,DBGU串口,MicroSD卡接口,SD/MMC卡接口.
3.1.1核心芯片介绍
速数据连接相结合,包括LCD控制器,电阻触摸屏,相机接口,音频,10/100M以太网,高速USB和SDIO.随着处理器运行在400MHz和多个速率超过100Mbps的外设,AT91SAM9G45使用高性能和带宽网络或本地存储媒体来提供良好的用户体验.AT91SAM9G45支持最新的DDR2和NAND闪存接口来存储程序和数据.一个与37个DMA通道相关的133M的内部多层总线接口,以及一个双外部总线接口,和一个能够用来配置紧密耦合内存(TCM)的64K字节的分布式内存,它们用来维持处理器和高速外设通信时所需的带宽.AT91SAM9G45的电源管理控制器具有高效的时钟门控和电池备份部分,在上电和待机模式时将功耗降低至最少.
11
U
AT91SAM9G45芯片使用ARM926EJ-S内核,它把用户接口的功能性和高
nR
eg
is
板主频高达400MHz,可支持WinCE和Linux操作系统的开发板调试,带有
te
SAM9G45开发板是英蓓特公司新推出的一款基于ATMEL公司
re
d
3
设置工作环境
武汉科技大学本科毕业设计
3.1.2硬件资源列表
lAT91SAM9G45ARM32-bit处理器,400MHz运行频率l64KB片内SRAMl64KB片内ROMl外扩256MBNandFlashl外扩1MBNorFlashl外扩4MBDataFlashl2个外扩的64MBDDR2SDRAMl2个功能按键l1个唤醒按键l1个复位按键l60个扩展接口针l带后备电池的RTCl1个MICRO音频输入接口l1个PHONE音频输出接口llllllllllLCD1个MicroSD卡插槽1个SD/MMC插槽1个DBGU接口1个USB主机接口1个MiniUSB接口3个LEDs1个10/100M以太网接口1个JTAG调试接口(10pin)电源:DCpower
3.2
软件环境设置
上位机系统:Ubuntu8.10
3.2.1交叉编译工具
由另一台机器编译生成,一般把前者称为目标机,后者称为主机,如下图所示:
要进行交叉编译,我们需要在主机平台上安装对应的交叉编译工具链(crosscompilationtoolchain),然后用这个交叉编译工具链编译我们的源代码,最终生成可在目标平台上运行的代码.通常需要的工具程序有:
12
U
nR
交叉编译的主要特征是某机器中执行的程序代码不是由本机编译生成,而是
eg
is
te
re
d
武汉科技大学本科毕业设计
解释程序:它本身与编译器类似,也是一种语言翻译工具.它直接执行源程序,尤其是一些脚本语言程序.其优点是简单,好移植,但执行速度与编译好的目标代码相比要慢许多;汇编器:用于特定计算机上的汇编语言翻译程序;链接器:其作用是把在不同的目标文件中编译或汇编的代码收集到一个可直接执行的文件中.同时它也把目标程序和标准库函数的代码链接;装载器:编译器,汇编器及链接器所生成的代码经常不能直接执行,它们的主要存储器访问可以在存储器的任何位置,在逻辑上相互之间存在固定的关系,最终位置的确定和某个起始位置相关.通常这样的代码是可复位的.转载器可处理所有与指定的基地址或起始地址相关的可复位的地址.这样使得代码的编译更加灵活;其他文件以及执行宏替换;
调试器:用于对目标代码的调试,从而达到排除代码中存在的错误.
3.2.2交叉编译环境的搭建
等软件.其中,binutils主要用于生成一些辅助工具,如objdump,as,ld等;gcc是用来生成交叉编译器,主要生成arm-linux-gcc交叉编译工具(应该说,生成此工具后已经搭建起了交叉编译环境,可以编译Linux内核了,但由于没使用的一些基本的函数库.这样,交叉编译环境就完全搭建起来了.有提供标准用户函数库,用户程序还无法编译);glibc主要是提供用户程序所
1)下载源代码到相关网站(ftp://ftp.gnu.org)下载包括Binutils,GCC,Glibc及Linux内核的源代码(需要注意的是,Glibc和内核源代码的版本必须与目标机上实际使用的版本保持一致),并设定shell变量PREFIX指定可执行程序的安装路径.2)编译Binutils
13
U
nR
eg
is
交叉编译器完整的安装一般涉及到多个软件的安装,包括binutils,gcc,glibc
te
re
d
预处理器:它在编译开始时由编译器调用,专门负责删除注释,包含
武汉科技大学本科毕业设计
首先运行configure文件,并使用--prefix=$PREFIX参数指定安装路径,使用--target=arm-linux参数指定目标机类型,然后执行makeinstall.3)配置Linux内核头文件首先执行makemrproper进行清理工作,然后执行makeconfigARCH=arm(或makemenuconfig/xconfigARCH=arm)进行配置(注意,一定要在命令行中使用ARCH=arm指定CPU架构,因为缺省架构为主机的CPU架构),这一步需要根据目标机的实际情况进行详细配置.配置完成之后,需要将内核头文件拷贝到安装目录,代码如下:cp–dRinclude/asm-arm$PREFIX/arm-linux/include/asmcp–dRinclude/linux$PREFIX/arm-linux/include/linux4)第一次编译GCC--target=arm-linux参数指定目标机类型,并使用--disable-threads,--disable-shared,--enable-languages=c参数,然后执行makeinstall.这一步将生成一个最简单的要首先生成一个最简单的GCC,它只需要具备编译目标机Glibc库的能力即5)交叉编译GlibcGCC.由于编译整个GCC需要目标机的Glibc库,该库现在还不存在,因此需可.
程.该过程要用到Linux内核头文件,默认路径为$PREFIX/arm-linux/sys-linux,因而需要在$PREFIX/arm-linux中建立一个名为sys-linux的软链接,使其指向内核头文件所在的include目录,或者,也可以在接下来要执行的configure命令中,使用--with-headers参数指定Linux内核头文件的实际路径.Configurearm-linux-gcc):的运行参数设置如下(因为是交叉编译,所以要将编译器变量CC设为CC=arm-linux-gcc./configure--prefix=$PREFIX/arm-linux--host=arm-linux--enable-add-ons最后,按以上配置执行configure和makeinstall,Glibc的交叉编译过程就算完成了,需要指出的是,Glibc的安装路径设置为:$PREFIXARCH=arm/arm-linux,如果此处设置不当,第二次编译GCC时可能找不到Glibc的头文件和库.6)第二次编译GCCGlibc是供用户程序使用的一些基本的函数库,由于在前面编译GCC时避开了与Glibc有关的部分,所以在Glibc编译完成后必须重新编译GCC,以便得到完整的ARM-Linux-GCC的交叉编译器.
14
U
nR
eg
这一步骤生成的代码是针对目标机CPU的,因此它属于一个交叉编译过
is
te
re
d
首先运行configure文件,使用--prefix=$PREFIX参数指定安装路径,使用
武汉科技大学本科毕业设计
运行configure,参数设置为:--prefix=$PREFIX--target=arm-linux--enable-languages=c,c++运行makeinstall.到此为止,就可得到需要的交叉编译工具链.
3.2.3
AndroidToolchain与BionicLibc
Android所用的Toolchain(即交叉编译工具链)可从下面的网址下载:android.kernel.org/pub/android-toolchain-20081019.tar.bz2.如果下载了完整的Android项目的源代码,则可以在"/prebuilt/linux-x86/toolchain/arm-eabi-4.2.1/bin"目录下找到交叉编译工具,比如Android所用的arm-eabi-gcc-4.2.1.Android并没有采用glibc作为C库,而是采用了Google自己开发的BionicLibc,它的官方Toolchain也是基于BionicLibc而并非glibc的.这使得使用或移植其他Toolchain来用于Android要比较麻烦:在Google公布用于Android的codesourcery/gnu_toolchains/arm/download.html下载的一个通用不需要C库,但是开发Android的应用程序时,直接采用或者移植其他的才能运行于Android模拟器中,这显然是实际开发中所不能接受的方式.目前尚没有看到说明成功移植其他交叉编译器来编译Android应用程序的资料.与glibc相比,BionicLibc有如下一些特点:大小只有大约200k,比glibc差不多小一半,且比glibc更快;实现了一个更小,更快的pthread;不完全支持POSIX标准,比如C++exceptions,widechars等;不提供libthread_db和libm的实现另外,Android中所用的其他一些二进制工具也比较特殊:加载动态库时使用的是/system/bin/linker而不是常用的/lib/ld.so;prelink工具不是常用的prelink而是apriori,其源代码位于"/build/tools/apriori"strip工具也没有采用常用的strip,即"/prebuilt/linux-x86/toolchain/arm-eabi-4.2.1/bin"目录下的arm-eabi-strip,而是位于/out/host/linux-x86/bin/的soslim工具.
15
U
提供了一些Android所需要的重要函数,如"getprop","LOGI"等;
nR
采用BSDLicense,而不是glibc的GPLLicense;
eg
is
Toolchain都比较麻烦,其他Toolchain编译的应用程序只能采用静态编译的方式
te
的Toolchain,它用来编译和移植Android的Linux内核是可行的,因为内核并
re
官方Toolchain之前,多数的Android爱好者使用的Toolchain是在
d
武汉科技大学本科毕业设计
4
系统移植
实现Android系统移植的移植包括四个模块:uboot,linuxkernel,Android系
统框架,Android应用程序.1.引导加载程序.包括固化在固件(firmware)中的boot代码(可选),和BootLoader两大部分.我们采用uboot.2.Linux内核.特定于嵌入式板子的定制内核以及内核的启动参数.3.文件系统.包括根文件系统和建立于Flash内存设备之上文件系统.通常用ramdisk来作为rootfs.4.用户应用程序.特定于用户的应用程序.由Android提供.
引导加载程序是系统加电后运行的第一段软件代码.PC机中的引导加载程序由BIOS(其本质就是一段固件程序)和位于硬盘MBR中的OSBootLoader(比盘MBR中的BootLoader读到系统的RAM中,然后将控制权交给OSBootLoader.BootLoader的主要运行任务就是将内核映象从硬盘上读到RAM中,然后跳转到内核的入口点去运行,也即开始启动操作系统.
4.1.1U-boot简介
Boot不仅仅支持嵌入式Linux系统的引导,当前,它还支持NetBSD,VxWorks,QNX,RTEMS,ARTOS,LynxOS嵌入式操作系统.UBoot除了支持PowerPC列的处理器.
4.1.2U-boot的体系结构
U-boot和目录结构类似于linux内核的结构,各主要目录包含代码的功能为:1.2.3.board:和一些已有开发板有关的文件.每一个开发板都以一个子目录出现在当前目录中.common:实现uboot命令行下支持的命令,每一条命令都对应一个文件.例如bootm命令对应就是cmd_bootm.c.cpu:与特定CPU架构相关目录,每一款Uboot下支持的CPU在该目
16
U
系列的处理器外,还能支持MIPS,x86,ARM,NIOS,XScale等诸多常用系
nR
Uboot是德国DENX小组的开发用于多种嵌入式CPU的bootloader程序,U
eg
is
te
如,LILO和GRUB等)一起组成.BIOS在完成硬件检测和资源分配后,将硬
re
d
4.1
Bootloader
武汉科技大学本科毕业设计
录下对应一个子目录,比如有子目录arm926ejs就是我们开发板上使用的cpu架构目录.4.5.6.7.8.disk:对磁盘的支持.doc:文档目录.Uboot有非常完善的文档,推荐大家参考阅读.drivers:Uboot支持的设备驱动程序都放在该目录,比如各种网卡,支持CFI的Flash,串口和USB等.fs:支持的文件系统,Uboot现在支持cramfs,fdos,fat,jffs2和registerfs.include:Uboot使用的头文件,还有对各种硬件平台支持的汇编文件,系统的配置文件和对文件系统支持的文件.该目录下configs目录有与开发板相关的配置头文件,如leopard2a.h.该目录下的asm目录有与CPU体系结构相关的头文件,asm对应的是asmarm.9.中.和NFS文件系统的实现.
10.net:与网络协议栈相关的代码,BOOTP协议,TFTP协议,RARP协议11.tools:生成Uboot的工具,如:mkimage,crc等等.
4.1.3移植步骤
1.下载u-boot源代码:
U-boot的源代码可以从官方网站denx.de/wiki/U-Bootlinux4sam官网下载已经移植成功的U-boot源代码直接使用.网址:at91/linux4sam/bin/view/Linux4SAM/U-Boot2.添加开发板支持
01,02,03,04,
+
U
创建代码目录:board/atmel/at91sam9m10g45ek增加开发板的支持代码:添加nandflash的开发板读写支持.
board/atmel/at91sam9m10g45ek/nand.cboard/atmel/at91sam9m10g45ek/led.c添加开发板的LED控制board/atmel/at91sam9m10g45ek/at91sam9m10g45ek.c添加开发板硬件资源初始化board/atmel/at91sam9m10g45ek/partition.c添加flash分区信息
0,"Bootstrap"},
{0x00000000,0x000041FF,FLAG_PROTECT_SET,
17
nR
/SourceCode上下载,由于我们使用的Atmel的芯片,我们到Atmel
eg
is
te
re
d
lib_xxxx:与体系结构相关的库文件.如与ARM相关的库放在lib_arm
武汉科技大学本科毕业设计
++++{0x00004200,0x000083FF,FLAG_PROTECT_CLEAR,{0x00008400,0x00041FFF,FLAG_PROTECT_SET,{0x00042000,0x00251FFF,FLAG_PROTECT_CLEAR,{0x00252000,0xFFFFFFFF,FLAG_PROTECT_CLEAR,0,"Environment"},0,0,0,"U-Boot"},"Kernel"},"FS"},
05,06,3.4.
board/atmel/at91sam9m10g45ek/config.mkboard/atmel/at91sam9m10g45ek/Makefile添加Makefile文件,将添加的代码增加到代码树中编译
添加u-boot配置文件修改全局Makefile文件增加开发板选项
创建配置文件:include/configs/at91sam9m10g45ek.hMakefile:
+at91sam9m10g45ek_nandflash_config\+at91sam9m10g45ek_dataflash_config\+at91sam9m10g45ek_dataflash_cs0_config\+at91sam9m10g45ek_config:+++++@mkdir-p$(obj)includeunconfig
echo"#defineCFG_USE_NANDFLASH1"
is
18
@if["$(findstring_nandflash,$@)"];then\
$(XECHO)"……withenvironmentvariableinNANDFLASH";\echo"#defineCFG_USE_AT91SAM9M10G45EK1"
>>$(obj)include/config.h;\++++else\
echo"#defineCFG_USE_DATAFLASH1"
nR
eg
$(XECHO)"……withenvironmentvariableinSPIDATAFLASHCS0";\
U
echo
"#define
CFG_USE_AT91SAM9M10G45EK
te
>>$(obj)include/config.h;\>>$(obj)include/config.h;\1"
>>$(obj)include/config.h;\fi;@$(MKCONFIG)-aat91sam9m10g45ekarmarm926ejsat91sam9m10g45ek
++
atmelat91sam9
4.1.5交叉编译U-boot
准备好AT91u-boot的源代码后,交叉编译u-boot分为两步:配置和编译.我们可以使用arm-elf-和arm-linux-ARMGCC交叉编译工具来编译u-boot.
re
d
武汉科技大学本科毕业设计
下面是编译AT91sam9g45开发板的步骤:makedistcleanmakeat91sam9g45ekes_nandflash_configmakeCROSS_COMPILE=
path_to_cross-compiler当其不在你的的当前设置路径中时才需要.通常cross-compiler-prefix-应该是这个样子arm-linux-orarm-elf编译结束后将会在当前路径生成最新的u-boot二进制可执行文件u-boot.bin和相应的二进制ELF文件u-boot.
u-boot.bin就是我们将要下载到开发板上的二进制镜像文件u-boot是ELF格式的二进制文件,我们可以用来调试u-boot
通过和标准的Linux2.6.25Kernel的对比,我们可以发现,其主要增加了以下的内容:1.kernel/arch/arm/mach-goldfish基于ARM架构增加Gold-Fish平台,相应增加的目录如下:kernel/include/asm-arm/arch-goldfish
至少为200MHZ.采用MSM7201ACPU(ARM11)作为主CPU,其主频为528MHZ.2.增加了yaffs2FLASH文件系统,相应增加的目录为:实际上,Android包经过编译后生成的system.img和ramdisk.img文件就是yaffs2格式的包.3.增加了Android的相关Driver,相应目录为:kernel/drivers/android主要分为:AndroidIPC系统:Android日志系统:Android电源管理:Android闹钟管理:BinderLoggerPowerAlarm
U
kernel/fs/yaffs2
nR
Gold-Fish平台采用的是ARM926TCPU作为BaseBand处理器,该CPU主频
eg
is
19
te
4.2.1Linux内核简介
re
4.2linuxkernel的移植
d
武汉科技大学本科毕业设计
Android内存控制台:4.5.Ram_console
Android时钟控制的gpio:Timed_gpio增加了switch处理,相应的目录为:kernel/drivers/switch/增加了一种新的共享内存处理方式,相应增加的文件为:kernel/mm/ashmem.c其他为Linux-2.6.25内核所做的补丁等等,例如BlueTooth,在此不做详细分析另外GoldFish平台相关的驱动文件如下:1.字符输出设备:kernel/drivers/char/goldfish_tty.c2.图象显示设备:(FrameBuffer)kernel/drivers/video/goldfishfb.c3.键盘输入设备:4.RTC设备:(RealTimeClock)kernel/drivers/rtc/rtc-goldfish.c5.USBDevice设备:6.SD卡设备:7.FLASH设备:kernel/drivers/input/keyboard/goldfish_events.c
kernel/drivers/usb/gadget/android_adb.ckernel/drivers/mmc/host/goldfish.c
kernel/drivers/mtd/devices/goldfish_nand.ckernel/drivers/mtd/devices/goldfish_nand_reg.h8.LED设备:
9.电源设备:kernel/drivers/power/goldfish_battery.c10.音频设备:kernel/arch/arm/mach-goldfish/audio.c11.电源管理:kernel/arch/arm/mach-goldfish/pm.c12.时钟管理:kernel/arch/arm/mach-goldfish/timer.c
U
kernel/drivers/leds/ledtrig-sleep.c
nR
eg
is
20
te
re
d
武汉科技大学本科毕业设计
4.2.2linux内核移植步骤
一下载linux内核源代码Linux内核官方下载:kernel.org/pub/linux/kernel/v2.6/我们在Atmel移植成功的linux内核基础上修改,下载地址:at91/linux4sam/bin/view/Linux4SAM/LinuxKernel二电源管理修改目录drivers/power/下的Makefile文件,增加下面一行:obj-$(CONFIG_BATTERY_DUMMY)+=dummy_battery.o修改目录drivers/power/下的Kconfig文件,增加以下内容:
configBATTERY_DUMMYtristate"dummybatterydriver"help
在drivers/power/目录增加dummy_battery.c,该文件模拟电源管理器Batterystatus:Charging(AC).Batterylevel:58Batteryscale:100Batteryhealth:GoodBatteryVoltage:0mv
Batterytechnology:Li-ion更改开发版驱动以支持Android获取该电源管理数据:arch/arm/mach-at91/board-sam9m10g45ek.c,定义电源管理作为平台硬件:
staticstructplatform_devicebattery={.name="dummy-battery",.id};=-1,
注册电源设备:
staticvoid__initek_add_device_battery(void){platform_device_register(&;battery);}
21
U
nR
Batterytemperature:0.0℃
eg
is
te
Android可以从这个驱动文件获得电源信息.下面描述了电源的详细信息:
re
SayYheretoenablesupportfordummybatterydriver.
d
武汉科技大学本科毕业设计
将初始化代码加入ek_board_init()函数初始化电源设备:
ek_add_device_battery();
三LCD修改framebuffer驱动在目录driver/video下面修改atmel_lcdfb.c正常显示.
+#defineATMEL_LCDC_FIFO_SIZE#defineATMEL_LCDC_CVAL_DEFAULT-#defineATMEL_LCDC_DMA_BURST_LEN-#defineATMEL_LCDC_FIFO_SIZE+#defineATMEL_LCDC_DMA_BURST_LEN+staticunsignedintframe_update_done;+staticspinlock_tlock;+staticwait_queue_head_twait;5120xc88/*words*/
使之符合开发板LCD的
512/*words*/8
+dma_addr=fix->smem_start+var->xres*2*var->yoffset;
-
dma_addr=(fix->smem_start+var->yoffset*fix->line_lengthdma_addr&;=~3UL;
smem_len=(var->xres_virtual*var->yres_virtual*((var->bits_per_pixel+7)/8));
+smem_len=(var->xres*var->yres*2*2+*((var->bits_per_pixel+7)/8));
info->fix.smem_len=max(smem_len,sinfo->smem_len);
-
+info->screen_base=dma_alloc_coherent(info->device,info->fix.smem_len,(dma_addr_t*)&;info->fix.smem_start,GFP_KERNEL);
修改board-sam9m10g45ek.c以支持Android的16bpp.由于Android使用16bppRGB,修改'default_bpp'原来的32为16staticstructatmel_lcdfb_info__initdataek_lcdc_data={….default_bpp…
22
U
info->screen_base=dma_alloc_writecombine(info->device,info->fix.smem_len,
nR
eg
=16,
is
te
//Modorg:32
re
d
武汉科技大学本科毕业设计
};四Nandflash分区修改分区
+staticstructmtd_partition__initdataek_nand_partition[]={+{+.name="Bootstrap",+.offset=0,+.size=4*1024*1024,+},+{+.name="ramdisk",/*forramdisk&;system*/+.offset=4*1024*1024,+.size=96*1024*1024,+},+{+.name="userdata",/*formtd@userdata*/+.offset=100*1024*1024,+.size=64*1024*1024,+},+{+.name="cache",+.offset=164*1024*1024,/*64*1024*1024*/+.size=60*1024*1024,+},+{+.name="test",/*fordebug*/+.offset=224*1024*1024,/*64*1024*1024*/+.size=MTDPART_SIZ_FULL,+},+};
设置4个分区:Bootstrip:At91引导代码Ramdisk:Androidramdisk分区Userdata:Android'用户数据分区Cache:Android's缓存分区五Keyboard修改include/linux/input.h#defineBTN_9#defineBTN_MOUSE-#defineBTN_LEFT
23
U
nR
eg
is
te
0x1090x1100x110
re
d
武汉科技大学本科毕业设计
-#defineBTN_RIGHT+#defineBTN_LEFT+#defineBTN_RIGHT#defineBTN_MIDDLE#defineBTN_SIDE#defineBTN_EXTRA六删除编译可能遇到的错误0x1110x9e0x3b0x1120x1130x114
修改driver/usb/gadget/android.c,以防Android在连接usb在开发板上时小工具崩溃staticstructusb_configurationandroid_config__initdata={修改为:staticstructusb_configurationandroid_config={,七内核配置文件
DeviceDrivers
U
CONFIG_USB_GADGET=yCONFIG_USB_GADGET_SELECTED=yCONFIG_USB_GADGET_ATMEL_USBA=yCONFIG_USB_ATMEL_USBA=yCONFIG_USB_GADGET_DUALSPEED=yCONFIG_USB_ETH=yCONFIG_USB_ETH_RNDIS=yCONFIG_USB_ANDROIDisnotsetCONFIG_USB_GADGET_MUSB_HDRCisnotset配置电源管理器修改内核配置使能CONFIG_BATTERY_DUMMY.
配置EXT3支持配置SD自动检测支持去除"createdeprecatedsysfsfiles".
4.2.3配置和编译linux内核
cdlinux-2.6.xx
nR
Powersupplyclasssupportdummybatterydriver
eg
is
24
te
re
配置Android内核#makemenuconfig配置内核支持usb调试
d
武汉科技大学本科毕业设计
cparch/arm/configs/at91sam9m10ekes_nandflash_for_android.config.configmakeARCH=armoldconfig我们可以使用以下命令自己配置内核选项:makeARCH=armmenuconfig编译内核:makeuImageARCH=armCROSS_COMPILE=
成功后,我们会在目录:arch/arm/boot得到uImage.这是可执行的linux内核镜像.
4.3.1
Android代码结构
GoogleAndroid代码包(机器代码包)包括主机编译工具,,仿真环境.Android|--Makefile|--bionic|--bootloader|--build|--dalvik(全局的Makefile)(引导加载器)
(Bionic含义为仿生,这里面是一些基础的库的源代码)(build目录中的内容不是目标所用的代码,而是编译和
配置所需要的脚本和工具)
U
|--development(程序开发所需要的模板和工具)|--external(目标机器使用的一些库)(应用程序的框架层)(与硬件相关的库)(Linux2.6的源代码)(Android的各种应用程序)(Android在各种平台下编译的预置脚本)(与目标的恢复功能相关)(Android的底层的一些库)|--frameworks|--hardware|--kernel|--packages|--prebuilt|--recovery|--system
其中,core中的Makefile是整个Android编译所需要的真正的Makefile,它被顶层目录的Makefile引用.
nR
(JAVA虚拟机)
eg
is
25
代码包经过解压缩后,第一级别的目录和文件如下所示:
te
re
4.3
Android的移植
d
武汉科技大学本科毕业设计
envsetup.sh是一个在使用仿真器运行的时候,用于设置环境的脚本.dalvik目录用于提供AndroidJAVA应用程序运行的基础————JAVA虚拟机.development目录展开的一个级别的目录如下所示:development|--apps|--build|--cmds|--data|--docs|--emulator|--host|--ide|--pdk|--samples|--simulator`--toolsskins是仿真时手机的界面.(仿真相关)(Android应用程序的模板)(编译脚本模板)
(大多是目标机器的一些工具)
在emulator目录中qemud是使用QEMU仿真时目标机器运行的后台程序,samples中包含了很多Android简单工程,这些工程为开发者学习开发Android程序提供了很大便利,可以作为模板使用.在external中,每个目录表示Android目标系统中的一个模块,可能有一个或者若干个库构成.其中:opencore为PV(PacketVideo),它是Android多媒体框架的核心.webkit是Android网络浏览器的核心.sqlite是Android数据库系统的核心.openssl是SecureSocketLayer,一个网络协议层,用于为数据通讯提供安全支持.frameworks目录展开的一个级别的目录如下所示:frameworks/|--base|--opt|--policiesframeworks是Android应用程序的框架.hardware是一些与硬件相关的库
26
U
nR
eg
is
te
(一些示例程序)
re
d
(包含windows平台的一些工具)
武汉科技大学本科毕业设计
kernel是Linux2.6的源代码packages目录展开的两个级别的目录如下所示:packages中包含两个目录,其中apps中是Android中的各种应用程序,providers是一些内容提供者(在Android中的一个数据源).packages中两个目录的内容大都是使用JAVA编写的程序,各个文件夹的层次结构是类似的.
4.3.2获取Android源代码
1.需要安装的软件工具
必须保证linux已经安装了以下工具:
使用以下命令安装这些软件包
#sudoapt-getinstallvalgrind
#sudoapt-getinstalllib32readline5-dev2.添加环境变量
在我们的主目录里有一个~/bin目录将其添加到我们的path变量里面:#cd~#mkdirbin#echo$PATH
将以下变量加入到bashrc.exportLANG=cexportJAVA_HOME=/usr/local/lib/jdk1.5.0_18
27
U
需要最新版本的libreadline:
nR
可以选择安装Valgrind,一个帮助查找内存泄露的工具,
eg
#sudoapt-getinstallgit-coregnupgsun-java5-jdkflexbisongperflibsdl-devlibesd0-devlibwxgtk2.6-devbuild-essentialzipcurllibncurses5-devzlib1g-devgenext2fs
is
te
re
d
必须的软件包:oGit1.5.4ornewerandtheGNUPrivacyGuard.oJDK5.0.18oflex,bison,gperf,libsdl-dev,libesd0-dev,libwxgtk2.6-dev(optional),build-essential,zip,curl,genext2fs
武汉科技大学本科毕业设计
exportPATH=$JAVA_HOME/bin:/home/tom/bin:$PATH:exportANDROID_JAVA_HOME=$JAVA_HOME
重启终端使3.安装Repo
~/.bashrc生效.
Repo一个使Android源码管理更为方便的工具,安装和配置Repo:
下载repo脚本并赋予可执行权限:#cd~#curlandroid.git.kernel.org/repo>~/bin/repo#chmoda+x~/bin/repo4.初始化Repo
新建一个目录放置我们的工作代码:#mkdirmydroid#cdmydroid
运行repoinit下载最新版本的Repo和更新,这里需要一个链接地址:
#repoinitializedin/mydroid5.获取源码运行一下命令:
#reposync这一步需要较长的时间,如果中途停止可以结束当前命令,从新运行一次.6.获取ALSA源码文件
用以下命令获得ALSA的源代码:cdmydroid/hardwaregitclonegit://android.git.kernel.org/platform/hardware/alsa_sound.gitcdmydroid/external
28
U
nR
成功的初始化后将会出现以下信息:
eg
#repoinit-ugit://android.git.kernel.org/platform/manifest.git–bAndroid-2.0.1_r1
is
te
re
d
武汉科技大学本科毕业设计
gitclonegit://android.git.kernel.org/platform/external/alsa-lib.gitgitclonegit://android.git.kernel.org/platform/external/alsa-utils.git
4.3.3Android移植步骤
在uboot和linuxkernel正常移植的情况下,我们可以直接编译Android运行了:以下修改是确保正确运行在新的平台而不受源代码平台的干扰:
+++build/target/board/generic/BoardConfig.mk@@-7,5+7,7@@TARGET_NO_KERNEL:=trueTARGET_CPU_ABI:=armeabi-HAVE_HTC_AUDIO_DRIVER:=true-BOARD_USES_GENERIC_AUDIO:=true+#HAVE_HTC_AUDIO_DRIVER:=true+BOARD_USES_ALSA_AUDIO:=true+BUILD_WITH_ALSA_UTILS:=trueTARGET_NO_BOOTLOADER:=true(workingcopy)
+#BOARD_USES_GENERIC_AUDIO:=true
配置编译器环境:
makecleansourcebuild/envsetup.shchoosecombo选择Device->release->generic->eng配置完成后,终端显示:PLATFORM_VERSION_CODENAME=EclairPLATFORM_VERSION=EclairTARGET_PRODUCT=genericTARGET_BUILD_VARIANT=engTARGET_SIMULATOR=falseTARGET_BUILD_TYPE=releaseTARGET_ARCH=armHOST_ARCH=x86
29
U
nR
4.3.4配置并编译Android
eg
is
te
re
d
武汉科技大学本科毕业设计
HOST_OS=linuxHOST_BUILD_TYPE=releaseBUILD_ID=ECLAIR
编译需要注意的是Android的编译需要make的版本为3.8或更高.执行:make–v查看系统的make版本,如果低于3.8那么必须先升级make命令的版本.执行make命令,编译Android源代码:makeAndroid编译完成后,将在根目录中生成一个out文件夹,所有生成的Android
代码结构内容均放置在这个文件夹中.out文件夹如下所示:1.out/|--CaseCheck.txt|--casecheck.txt|--host|--common|--linux-x86|--target|--common|--product
主要的两个目录为host和target,前者表示在主机(x86)生成的工具,后者表示目标机(默认为ARMv5)运行的内容.host目录的结构如下所示:|--common|--obj(JAVA库)|--linux-x86|--bin(二进制程序)|--framework(JAVA库,*.jar文件)|--lib(共享库*.so)|--obj(中间生成的目标文件)host目录是一些在主机上用的工具,有一些是二进制程序,有一些是JAVA的程序.
U
1.
nR
out/host/
eg
30
is
te
re
d
武汉科技大学本科毕业设计
target目录的Android代码结构如下所示:1.out/target/|--common|--R(资源文件)|--docs|--obj(目标文件)|--product|--generic其中common目录表示通用的内容,product中则是针对产品的内容.在common目录的obj中,包含两个主要的目录:APPS中包含了JAVA使用程序生成的目标,每个使用程序对应其中一个子JAVA_LIBRARIES中包含了JAVA的库,每个库对应其中一个子目录.在默认的情况下,Android编译将生成generic目录,如果选定产品还可以生out/target/product/generic/|--android-info.txt|--clean_steps.mk|--data|--obj|--ramdisk.img|--root|--symbols|--system成其他的目录.generic包含了以下内容:
|--system.img|--userdata-qemu.img|--userdata.img在generic/obj/APPS目录中包含了各种JAVA使用,common/APPS相对应,与但是已经打成了APK包.system目录是主要的文件系统,data目录是存放数据的文件系统.obj/SHARED_LIBRARIES中存放所有动态库.obj/STATIC_LIBRARIES中存放所有静态库.多个以img为结尾的文件是多个目标映像文件,其中ramdisk是作为内存盘的根文件系统映像,system.img是主要文件系统的映像,这是一个比较大的文件,data.img是数据内容映像.这多个image文件是模拟器运行时真实需要的文
31
U
nR
eg
is
te
re
d
目录,将结合每个使用程序的原始文件生成Android使用程序的APK包.
武汉科技大学本科毕业设计
件.
5
5.1
文件系统的建立
软件工具
Mkfs.jffs2tool我们需要下载做jffs2镜像的工具,这个工具可以生成jffs2镜像:
sudoapt-getinstallmtd-utils
5.2
配置文件
init.rc该文件用于Android初始化init.atmel.rc这个文件初始化开发板相关的硬件外设功能类似于init.rcvold.conf用于Android自动检测SD卡asound.conf配置ALSA,完成Android音频配置
5.3
操作步骤
在宿主机终端执行以下命令生成镜像,也可以做成脚本运行:
cp-a$ANDROID_PATCH/out/target/product/generic/root./cd./root/system/cp-a$ANDROID_PATCH/../../out/target/product/generic/system/*./cp-a-f../../asound.conf./etc/asound.confcp-a-f../../vold.conf./etc/vold.confcd..cp../init.rc./cp../init.atmel.rc./chmod777../root/-Rcd..mkfs.jffs2-l-s0x800-e0x20000-p0x4000000-droot/-o$JFFS2_NAME–n
成功后我们会得到
U
nR
jffs2格式的Android文件系统镜像.
eg
is
32
te
re
&nbs, p; d
武汉科技大学本科毕业设计
6
6.1
1.
系统功能演示及测试
镜像下载
设置各个镜像的在目标板的地址:
0x000000000x000200000x000600000x002000000x004000000x0e000000
setbootStrapAddrsetubootAddrsetubootEnvAddrsetkernelAddrsetandroidfsAddrsetrootfsAddr
setbootstrapFilesetubootFilesetkernelFile#setrootfsFile#setandroidfsFilesetandroidfsFile
4.
烧写镜像文件:
sam-ba.exe\usb\ARM0AT91SAM9G45-EKat91sam9g45ekes_demo_linux_nandflash.tcl>logfile.log2>&;1notepadlogfile.log
我们使用了Atmel提供的烧写工具samba,该程序可以直接在Atmel官方网站上下载.同时将前面配置参数的过程,做成了tcl文件,直接提供给samba使用.
U
nR
3.
设置镜像文件名称:
eg
"nandflash_at91sam9g45ekes.bin""u-boot-jiangxd.bin""uImage-jiangxd""genericfs.arm_nofpu.jffs2""genericfs.arm_nofpu.jffs2""AT91SAM9M10-ANDROID-2.0.jffs2-jiangxd"
33
#u-bootvariablesetkernelUbootAddrsetkernelLoadAddr
0x002000000x72200000
is
te
"bootargs=mem=128Mconsole=ttyS0,115200root=/dev/mtdblock1rwrootfstype=jffs2init=/init"\"bootcmd=nandread$kernelLoadAddr$kernelUbootAddr$kernelSize;bootm$kernelLoadAddr"
re
2.
配置uboot传给linux内核的参数:
d
武汉科技大学本科毕业设计
烧写完成后,复位开发板:我们可看到:Android在开发板上的启动界面:
Android启动后,我们可以看到其自带的许多应用.
U
nR
下面的图片展示了Android系统的应用程序:分别是主界面和菜单界面.
eg
6.2
系统功能测试
is
34
te
re
d
武汉科技大学本科毕业设计
现有些不仅不能正常工作,并可能造成死机或重启的现象:用正确.Calculator:可以启动,工作正常.Contacts:可以启动,工作正常.
Camera:无法启动,系统重启.分析原因:没有ISI驱动模块.CustomLocale:可以启动,不能工作.DevTools,Settings,SpareParts:都是硬件相关,可以启动,部分工作.Messaging,Phone,Email:通信相关:可以启动,无法工作,没有相应硬Music:可以启动,播放mp3死机.原因:ALSA驱动不正确,需要修改.Gallery:可以启动,可以浏览图片.结合以上分析,可以看出该系统只实现了极少部分功能,需要各个模块正常工作还需要大量工作.作为本次设计的基本任务就是制作一个可执行的二进制镜像,使Android可以在开发板上正常运行.我们已经成功的做好jffs2可执行镜像,Android也成功运行起来,达到了预期的目标.件.
U
nR
eg
is
35
Browser:可以启动,无法连入网络.分析原因:没有分配网络地址的驱动.
te
AlarmClock:可以启动,但无法设置闹钟.分析原因:实时钟模块没有调
re
点击相应的应用图标就可以启动相应的应用程序,仔细测试各个程序发
d
武汉科技大学本科毕业设计
7
结束语
本文首先对Android的体系结构,特点及设计实现进行了相关概述,之后
在几种常见的智能手机操作系统的比较中,分析Android特点及优势.然后结合以上源代码,采用英蓓特公司的at91sam9g45开发板,对Android系统进行了移植.随后对移植成功的系统代码基础上生成了文件系统,并对系统进行了测试分析.本文重点放在Android的移植上.在对Android系统代码进行深入研究的基础上,结合开源社区的代码和实例,实际修改代码并实现了Android的移植.本设计只Android进行了基本的功能移植,对通信,多媒体等还没有仔细探讨,因此若需要完善系统功能还需做进一步的深入研究.
[2][3][4][5][6]
U
[1]
google:Android官方网站,android/google:Aandroid开源工程,code.google/intl/zh-CN/android/Atmel:linux4SAM,at91/linux4sam/bin/view/Linux4SAM/WebHome蓝刃真名上阵:百度百科,baike.baidu/view/1241829.htm?fr=ala0_1_1cxslc:巴士数码,gphone.tgbus/news/mtnews/200912/199113.shtmlE2Ecloud工作室:深入浅出GoogleAndroid,人民邮电出版社
nR
eg
参考文献
is
36
te
re
d
武汉科技大学本科毕业设计
致谢
在此我要感谢我的指导老师朱磊老师,他在我的毕业设计和论文完成的过程中,给予了我许多时间,并提供了相应的资料模板,使我能够按照自己的想法实现本次设计,最后能顺利并准时的完成毕业设计任务.其次,我要感谢英蓓特ARM工具组的工程师们,他们在本设计软件设计分析方面都提供了宝贵的意见和资料.从中,我学到了很多以前从未接触过的软件设计思想和开发方法,使我能够非常圆满地结束大学的最后一堂课.然后,我要感谢信息工程的所有老师,他们的包容,善良和强烈的责任心让我深深感动.他们不仅在学术上给予了我很大的帮助和启蒙,为我今后的学象,他们潜移默化的教导将对我今后的生活产生非常积极的影响.们,以及我的父母,他们使我大学生活充实,快乐,受益匪浅,这些都是我在这最后,感谢各位评委老师对我论文的耐心审阅.习打下了坚实的基础,而且更重要的是他们身上的人格魅力给我留下了深刻的印我还要感谢在整个大学四年中,所有教授过我的老师们和帮助过我的同学只字片语中难以表达的.
U
nR
37
eg
is
te
re
d
1