基于Android的智能手机的设计与实现_第1页
基于Android的智能手机的设计与实现_第2页
基于Android的智能手机的设计与实现_第3页
基于Android的智能手机的设计与实现_第4页
基于Android的智能手机的设计与实现_第5页
已阅读5页,还剩53页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

武汉理工大学硕士学位论文基于Android的智能手机的设计与实现姓名:熊刚申请学位级别:硕士专业:计算机应用技术指导教师:李宁20100501中文摘要随着社会的发展,目前全球的手机用户数量已经超过了PC机的数量,而且手机的数量正在快速增长,其中智能手机所占的比例越来越大,特别是随着3G技术发展时代的到来,移动互联网将是一个巨大的市场,许多国际大公司以及国内的大公司都在抢占智能手机领域的市场份额。这期间,出现的智能手机可谓五花八门,种类繁多,但是真正好用,受用户喜爱的智能手机并不多。Android的出现带给了智能手机领域更多的机遇和挑战,由于Android基于Linux内核且具有开源、免费的特性,它迅速得到广大爱好者以及许多厂商的支持。本文所对应的研究项目是一个基于Android智能手机的设计和实现,该智能手机在硬件上采用Marvell公司的PXA310处理器,其处理速度可达624MHz,除了一般手机必备的外设之外,还带有摄像头、蓝牙、WiFi、GPS等较高端的外围设备;在软件上,采用了Google推出的Android系统。本文首先对课题背景做了阐述,包括智能手机操作系统目前的状况、Android的优势以及相关产品的介绍、课题研究目的及意义、系统设计目标、论文主要工作;然后针对Android的特性给出本系统开发环境的搭建方法以及下载源码和编译源码的方法,为降低成本对本系统采用的调试方法进行了分析和选择:进而对系统的硬件和软件进行设计,硬件设计包括硬件总体设计、处理器设计、存储器设计、音频模块设计、基带模块设计、蓝牙模块设计、USB模块设计等,软件设计包括本系统启动代码的移植、内核的移植、文件系统的制作,接着对一些有代表性的驱动进行了比较详细的分析。对于内核移植,Android内核移植和标准Linux内核移植有些差别;对于Android文件系统制作,需要编译Android源码得到内容,和普通Linux文件系统制作有所区别;对于驱动,Android下驱动和Linux驱动不完全相同,比如Android音频系统中对路由的选择可以通过配置文件实现,再比如Android下LCD驱动需要双缓冲等。在这之后对Android应用程序的蓝牙模块进行了深入的分析;最后进行了总结并指出本智能手机需要改进的地方。关键词:Android,智能手机,Linux,PXA310AbstractWiththedevelopmentofthesociety,thenumberofmobilephoneshasexceededthenumberofPCmachines,andthenumberofmobilephonesisgrowingrapidly,whichsmartphonemarketshareisgrowing.Especiallywiththeapproachof3Gtechnologyera,mobileInternetwillhaveahugemarket,manyinternationalcompaniesanddomesticlargecompaniestrytoexpanditsmarketshare,today,thereareallkindsofsmartphones,butnotallofthemarelovedbytheusers.TheemergenceofAndroidbringsmoreopportunitiesandchallengesinthisfield.AndroidisbasedontheLinuxkernelandhasopenandfreefeature,itquicklyhadtheoverwhelmingsupportoffans,andmanyvendors.。TheprojectmobileofthisresearchpaperisonadesignandimplementationofsmartusesphonebasedAndroid.Atthehardware,itMarvell’SPXA310processor,theprocessingspeeduptophone’Speripheralsitalsohas624MHz,inadditionwiththegeneralmobileandothercamera,bluetooth,WiFi,GPSGoogle’Shi【ghendperipherals;Atthesoftware,itusesAndroidsystems.Thisarticlefirstdescribedbackground,includingthecurrentsituationofsmartphoneoperatingsystem,Android’Sadvantages,andtheintroductionofrelatedproduct,thepurposeandsignificanceoftheresearch,systemdesigngoalsandthemainworkinthispaperdo;Thengivesthemethodofhowtosetuptheenvironmentofsystemdevelopment,howtodownloadtheAndroidsourcetoselectcodeandbuildit,howdebuggingtoolsforreducecosts;Andthendecrbiesthesystem’Shardwarehardwareandsoftwaredesign,thedesignincludingprocessordesign,memorydesign,audioUSBmodulesystemdesign,basebandmoduledesign,bluetoothmoduledesign,design;Thesoftwaredesign,includingthebootloaderporting,kernelporting,howtomakefilesystem,detailedanalysisofsomesampledrivers.Fo}thekernelporting,AndroidkernelportinghassomedifferenceswithstandardLinuxkernelporting.Fortheandroidfilesystem,itrequirestobuildAndroidassourcecode,ithassomedifferenceswithgeneralproductionofLinuxfilesystems.Forthedriver,theAndroiddriverandLinuxdriveriSnotexactlythesame,suchAndroidaudioIIsystemontherouteofchoicecanbeachievedthroughtheconfigurationfile,andtheAndroidLCDdriverneedsdoublebuffering,etc.Afterthis,thispaperanalyzestheAndroidapplicationsofbluetoothmodule.Finally,madeaconclusionandpointedoutthattheimprovementofthissmartphone.Keywords:Android,SmartPhone,tinux,PXA310III独创性声明本人声明,所呈交的论文是本人在导师指导下进行的研究工作及取得的研究成果。尽我所知,除了文中特别加以标注和致谢的地方外,论文中不包含其他人已经发表或撰写过的研究成果,也不包含为获得武汉理工大学或其他教育机构的学位或证书而使用过的材料。与我一同工作的同志对本研究所做的任何贡献均已在论文中作了明确的说明并表示了谢意。签名:鲫学位论文使用授权书本人完全了解武汉理工大学有关保留、使用学位论文的规定,即学校有权保留并向国家有关部门或机构送交论文的复印件和电子版,允许论文被查阅和借阅。本人授权武汉理工大学可以将本学位论文的全部内容编入有关数据库进行检索,可以采用影印、缩印或其他复制手段保存或汇编本学位论文。同时授权经武汉理工大学认可的国家有关机构或论文数据库使用或收录本学位论文,并向社会公众提供信息服务。(保密的论文在解密后应遵守此规定)研究生(签名):稚融1导师(签名)涛与日期知加.s.穆武汉理工大学硕士学位论文第1章绪论1.1课题研究背景1.1.1智能手机操作系统现状智能手机是指像电脑一样可以通过下载安装软件来拓展手机出厂的基本功能的手机,一般具有智能手机操作系统。相对于非智能手机,无论在功能还是处理速度上都有很大的提高。目前全球市场份额排名前四的智能手机操作系统依次是iPhoneOS、Symbian、BlackBerryOS和Android,其中Android最年轻,市场份额正迅速增加。下面简单介绍除Android之外的几款常用的智能手机系统。1、iPhoneOSiPhoneOS是苹果公司专门为iPhone开发的智能手机系统。主要用在iPhone和iPodtouch上。iPhoneOS最突出的优点是可以使用多点触控操作,这样使得操作iPhone非常方便。目前iPhoneOS在智能手机操作系统的市场份额占据第一位111。2、SymbianSymbian最开始由诺基亚、索爱、MOTO、西门子等公司出资组建,专门研发手机操作系统,现如今被诺基亚收购,成为诺基亚全资公司。Symbian操作系统在智能移动终端上拥有非常强大的应用程序和通信能力。目前Symbian在智能手机操作系统的市场份额占据第二位【到。3、BlackBerryOSBlackBerryOS是RIM专用的智能手机操作系统。BlackBerry在美国市场占有率相对最高,BlackBerry的比较具有个性的设计就是宽大的屏幕和便于输入的QWERTY全键盘,所以BlackBerry在移动电子电邮方面非常方便,由于我国用手机发短信多于发电子邮件,所以BlackBerry系统的邮件优势在中国不存在,目前BlackBerryOS在智能手机操作系统的市场份额占据第三位,BlackBerry手机市场主要在美副31。武汉理T大学硕七学位论文4、WindowsMobile微软用于PocketPC和Smartphone的软件平台。WindowsMobile系统将大家熟悉的Windows桌面延伸到了移动设备中。WindowsMobile是Microsoft为手持设备推出的“Windows移动版”,目前最新的版本是WindowsMobile6.1。受Android的冲击,目前WindowsMobile在智能手机操作系统的市场份额下降到4%左右141。5、LinuxOSLinux凭借其开放源代码、免费的优势,经过来自全球程序员的努力,再加上Google、IBM等计算机巨头的支持,Linux在手机操作系统市场中成为一股新生的力量,尤其是在许多知名厂商如摩托罗拉宣布支持Linux手机操作系统之后,Linux的市场份额有增加的趋势。目前基于Linux的智能手机占有7.3%的市场份额l5。。6、PalmOSPalmOS由Palm公司研发,是一种32位的嵌入式操作系统,它的操作界面采用触控式,几乎所有的控制选项都排列在屏幕上,使用触控笔进行所有操作。目前基于PalmOS的智能手机占有2.3%的市场份副引。1.1.2Android商业运作模式及优势目前手机数量以大大超过传统PC机数量,随着3G时代的到来,手机上网将变得越来越方便和普及,谷歌作为一个互联网巨头,当然不会放过这个巨大的市场,谷歌希望将自身在网络广告领域的垄断优势扩展至手机互联网。Android作为一个通用的手机操作系统,任何一家厂商均可使用,这点和Mobile类似,但是不同的是Android整套系统完全开源和免费,而Mobile是需要收取一定授权费用。这也就是为什么Android市场占有率在短时间Windows内大大超过WindowsMobile的主要原因。Android和iPhoneOS、Symbian、BlackBerryOS等系统在商业运作上有很大的不同:iPhoneOS只为苹果的iPhone所用,并由苹果严格控制;诺基亚、索爱各自运维着与自家硬件紧密结合的Symbian版本;而BlackBerryOS是RIM专用的操作系统;Android则采用了联盟的方式,几乎世界上所有的大厂商都加入了谷歌手机开放联盟,如国外的知名企业:包括Google、HTC(宏达电)、T-Mobile、高通、摩托罗拉、三星、LG等,国内的知名企:中国移动、联通、2武汉理工人学硕十学位论文电信和华为、联想等都加入到这个大家族中。显然,这些大公司的加入有助于自己推出Android相关的产品,同时也增强了Android的生命力:如今移动设备的处理器九成以上采用ARM核,造成这种局面最重要的一个原因是ARM公司和全世界各半导体厂商的合作所带来的强大生命力,在这点上,Android与ARM的商业运作有些许类似r丌。在软件上,Android与其它硬件厂商的结合度越高,第三方厂商就越可能考虑采用它,第三方硬件厂商可以扩展Android本身不支持的功1H‘E(比如和Android界面完全不同的独有界面),可以增加针对某些设备特有的功能。由于不同网络服务提供商、不同手机制造商的用户需要不同的设置,对于这种情况,Android系统本身并没有集成任何一种形式的应用管理程序,因此Android智能手机的软件安装、系统升级、多媒体同步、应用软件管理以及云同步在不同的手机上可以以不同的形式出现pJ。对于手机用户而言,Android拥有应用程序Market,类似于iPhoneAppStore,Market上有大量的应用程序,Android手机可以通过网络在线安装,且绝大部分应用程序免费并开源,这是Market优于AppStore的地方。在当今的软件大环境方面,软件的环境正在逐渐改变,微软这种软件巨头在压力下,也不得不将WindowsMobile开源,软件免费开源已成为一种趋势。软件的含义正在改变,传统软件业以微软为代表,纯粹是卖软件,卖一份软件,获得一份收入。而以谷歌为代表的一些企业,已经不将卖软件作为公司的主要收入来源,甚至它的所有软件都免费,给用户提供免费的服务。卖服务而不是卖软件已成为一种趋势I引。云计算的出现,将会是传统软件的一种颠覆,目前许多公司,如mM,亚马逊、微软、Google等都以投入到云计算中,其中Google走在前列,并有很多此类产品,比如GoogleDocs就可以完成在线的办公文档的编辑、保存、打印等。Android是Google推出的产品,其对网络的支持是任何其他智能手机系统无法比拟的,可以说Android就是应网络而生,随着3G时代的到来,Android对3G的良好支持,Android在网络方面的优势更为突出。Google将在2010年正式发布ChromeOS,ChromeOS主要运行在类PC机器上,而Android则主要运行于移动设备上,有了这两者的组合,几乎适用于个人终端的所有领域,再加上Google的各种服务,相信在不久的将来,微软的霸主地位将被Google取代,Android的产品将随处可见。3武汉理1=大学硕士学位论文1.1.3Android产品现状由于Android采用Linux内核,基本上可以跑Linux的平台,就可以跑Android,Linux作为一个高速发展的开源平台,目前兼容的平台种类和数量是其它智能手机无法比拟的。虽然Android是专门针对手机设计的系统,但是目前Android的应用绝不局限于手机,已经有大量的手持设备如PDA、MP4、GPS等采用了Android系统,甚至有厂商将Android应用在上网本、机顶盒上。下面介绍比较典型的基于Android的手机GoogleOn和NexusOne。GoogleOn是Android发展历史上第一款基于Android的产品,此手机由中国台湾宏达(H1陀)制造,简称G1,代号为Dream,最开始于2008年10月22日由美国T.Mobile在美国运营。G1中包含了丰富的软件:包含基于Webkit核的浏览器、即时通软件(腾讯QQ、雅虎通、MSN等)、音乐播放器、视频播放、GoogleMaps、客户端电子邮件收发器、Gmail电子邮件、Youtube在线视频播放客户端软件【11J。NexusOne是谷歌推出的自主品牌手机,也是Google的第一款自主品牌手机,Google曾经在主页上对其进行推广。该手机采用了最新的Android2.1系统,机身超薄,仅仅为11.5毫米,但是丝毫没有降低作为一款高档Android手机所具有的功能。该智能机采用了3.7英寸触控屏,可以提供高达WVGA的分辨率,为获得更好的处理速度,该智能机采用了高通Snapdragon处理器,其频率高达1GHz。该智能机还配置了500万像素摄像头,具有自动聚焦功能,支持GPS/A.GPS导航以及电子罗盘,支持的网络服务有WCDMA/HSDPA,带有无线局域网功能(具备Wi.Fi),提供丰富的娱乐功能,采用3.5毫米耳机接口。另外还具备其他诸如轨迹球多彩LED提示、光线光和距离感应器、加速计、USB2.0连接、电子邮件收发、HTML网络浏览以及完整的Google服务11引。1.2课题研究目的及意义本课题围绕设计一个Android智能手机为中心,从软件和硬件上分析Android智能手机的开发流程和基本的方法、技巧。本文从软件的最底层到最上层进行了分析:从启动代码到内核再到驱动、文件系统,最后到Android应用层,在应用层以蓝牙为例进行了深入的分析。本文对底层软件以及上层软件开发过4武汉理1二大学硕士学位论文程中的环境进行了介绍,针对每层的特点对调试方法进行了分析和选择;在硬件上,给出了系统的总体设计框图,以及各个主要模块的电路图。为设计和开发一个Android智能手机提供了一个参考。1.3系统设计目标本系统设计目标就是设计一个可以量产的Android手机,包括硬件设计和软件设计。在功能上和具有和G1相似的功能,除了普通手机具有的功能(电话短信功能)之外具有以下功能:WiFi、蓝牙、收音机、GPS、Web浏览、Google多媒体、Email客户端、照相、摄像、日历日程、联系人和其他应用等。Maps、1.4论文主要工作本论文的主要工作是在设计Android智能手机的同时,系统地分析设计Android智能手机的基本流程、方法和技巧。在硬件上,进行了微控器的设计、摄像头模块的设计、AGPS模块的设计、WIFI模块的设计、蓝牙模块的设计、存储器(包括NandFlash和SD洲)的设计、USB接口设计、音频模块设计(包括麦克风、喇叭、受话器)、LCD设计、震动电机设计、LED设计、按钮设计、SD卡槽设计、基带模块设计。在软件上,进行了BootLoader的移植、Linux内核的移植、Android的移植、LCD驱动开发、无线模块的驱动开发(包括WIFI、AGPS、基带)、键盘驱动开发、音频驱动开发、NandFlash驱动开发、摄像头驱动开发以及其它外围设备驱动的开发,以及上层的应用开发,如蓝牙相关的功能(传文件、听音乐等),基带相关的功能(拨打电话等)。在开发过程中,不断完善功能,消除BUG,最终做成一个可以量产的Android智能手机。S武汉理『.大学硬十学位论文第2章Android系统及其开发环境搭建方法2.1Android软件架构图2-1Andmid架构上图为Android的软件架构,下面对图2-1从下到上依次介绍。1、Android内核Android内核采用的Linux2.6,内核为上层提供安全、内存管理、进程管理等服务,以及硬件驱动等。内核还是一个介于硬件层和系统上层软件之间的一个抽象层次。2、Android运行时这是Android的核心类库,为应用程序提供虚拟机和必要的运行环境,该虚拟机专门为嵌入式设备优化过,相对其他虚拟机具有更高的效率。3、Android库Android包含一整套C/c++库,提供给Android系统的各个应用层框架调用武汉理工大学硕士学位论文并通过应用层框架暴露给开发者。下面列举一些核心库:・系统C库:由BSD的标准C系统库衍生而来,使得可以更好地使用于嵌入式设备;◆媒体库:该媒体库支持很多流行音频和视频格式、静态图形文件(包括MPEG4、H.264、MP3、AAC、AMR、JPG、PNG)的播放和录制;・界面管理:提供对子系统显示功能的访问,跨应用的无缝组合,比如2D图形层;・LibWebCore:Android浏览器采用的浏览器核,目前使用比较多,也很流行的浏览器核,如Google研发的浏览器Chrome也是基于该核;・SGL:Android底层的平面图形引擎;・3D库:在硬件支持的情况下,比如本系统采用的处理器内部具有硬件加速器,该库对这种情况有较好的支持,并且专门对嵌入式系统进行了优化;・SQLite:为写应用程序提供了数据库接口,它是一个比较小的数据库,Android所有应用均可采用该数据库【131。4、Android应用框架上文所提的核心应用程序就是依赖框架层次API开发的,程序员们当然也可以充分使用这些API。上面提到的一些应用程序都是基于应用框架的API开发的,程序员可以直接使用应用框架提供的API,一来可以简化程序设计,提高工作效率,二来可以简化简化组件复用机制:所有应用程序都可以发布自己的功能,而且这些功能可以被任何其他应用使用(当然要受来自框架的强制安全规范的约束)。一个完整的Android应用程序一般包含以下元素:●内容提供器,可以让一个应用程序访问另外一个应用程序的数据,如拨号程序访问联系人;●一套丰富而且可以由用户自定义、方便扩展的视图器件,含有常用的一些视图界面元素,如下拉列框、按钮等;・通知管理器,Android应用程序把自身的通知信息显示在状态栏上,如蓝牙连接状态、显示手机信号强度等级等;・Android资源管理器,顾名思义,可以对本地的资源进行管理,并为应用程序提供访问接口,如读写本地文件等;7武汉理工大学硕士学位论文●行为管理器,负责管理应用程序的生命周期,Android本身没有关闭应用程序的功能,由系统根据资源分配自动关闭一些应用程序。5、Android应用Android将自带一些比较核心的应用程序,如电子邮件、短信相关的服务、日历、浏览器、联系人管理、地图等。所有应用程序采用Java语言编写,并运行于Google自己研发的虚拟机上。2.2Android源码的获取和编译本系统选择Ubuntu8.04平台作为开发机(以下如果未作特别说明,均为Ubuntu8.04平台),在下载Android源码之前,有必要介绍一下沓t,酉t是LinusTorvalds为了方便Linux内核开发人员提交和获取内核源码而研发的一个版本控制软件,它是一个分布式系统【14】。因为Android是由kernel、dalvik、bionic、prebuilt、build等多个Git项目组成,为了更方便地上传和下载这些项目的源码,Google专门为该项目编写一个脚本,名为repo,它把西t进行了封装,无需记忆哪些复杂的Git命令就可以方便的管理这些源码了。1、下载Android源码・①在开发机上安装git以及curl在Ubuntu8.04上安装软件,一般只要设定了正确的更新源,然后使用apt.get实现在线安装软件,可以自动解决依赖问题。安装西t和curl的命令:xiong:一¥sudoapt-getinstallgit-corccurl②在开发机上下载reposh脚本在下载之前,先在本地创建一个目录,比女H一/reposh,然后把它加到PATH环境变量中,如此以来,执行reposh命令时,会自动运行位于-/reposh下的reposh脚本。为了描述的简便和可理解性,本文以下部分将域名地址android.git.kernel.org全部用androidsourcecode来代替,接下来通过curl来下载reposh脚本,其保存路劲为:-/reposh/reposh:】【iong:一¥cudlattp://androidsourcecode/repo>一/reposh/reposh需要注意的是,必须给给reposh可执行权限,因为要运行此脚本来下载源码。③在开发机上初始化版本库8武汉理工大学硕士学位论文如果开发人员想把Android当前主线上最新版本的Android源码都下载下来,可以做以下操作:先建立一个目录,比如一/aIldruid,进去以后执行以下命令:xiong:一¥reposhinit—Ugit://androidsourcecode/platform/manifest.git最后会看到repoinitializedin/home/xiong/android这样的提示,就说明开发机上的版本库已经初始化完毕。当然开发人员可能更多的是去某个分支获取源码,可以使用参数来指定分支名,比如:xiong:一¥mposhinit—ugit://androidsourcecode/plafform/manifest。git-bCtlpcakc另一种比较常见的情况是,只需要Android整套源码中某一个子工程的代码,比如只需要下载Android内核的源码,可以直接用以下方式获取:xiong:一¥gitclonegit://androidsourcecode/kernel/common.git④开发机与Android源码服务器同步版本库使用reposhsync命令,可以把服务器上的整个Android源码下载到开发机上,同样,也可以用类似以下的命令行来同步Android源码中的某几个子项目的源码:xioag:一¥reposhsyncandmid_sub_pmlandroid_subpr02...最后可以进入 ̄/android执行以下命令来完成整个Android源码的下载:xioag:-¥托poshsync注意,由于Android整个源码的大小有超过1GB,下载时间将比较长。全部同步完毕后,Android所有源码下载完备,存放在√趾droid下。下面介绍如何编译Android源码。2、编译Android项目源码①在开发机上安装编译必要的软件包在编译Android源码之前,除了前面介绍下载源码时需要安装的那些软件包之外,还需要安装一些软件包来完成编译,可以通过以下命令将所有软件安装完备【151:xiong:一¥sudoapt-getinstallval醉ndbisongperflibsdl-devbuild—essentiallibwxgtk2.6-devp”honlibesdO-devflex②在开发机上安装Java编译器以及运行环境Android源码大致有三种语言组成:C和C++实现比较底层的软件,比如启动代码、内核、驱动、类库等,在应用层则全部采用Java语言。对于C和C++部分的编译可以通过Ubuntu自带的gcc和Android源码里自带的交叉编译器来编译,但是要编译Java语言并运行生成的可执行文件的话,由于编译Java的编译器和运行环境在Ubuntu系统中没有自带,需要另外安装。9武汉理工大学硕士学位论文在开发机上安装和配置Java编译器和运行环境的大致过程为:首先从官方网站下载针对Linux系统的一个安装包,一般Android官网还会针对不同的Linux发行版提供不同的安装包,比如这里下载针对Ubuntu系统的安装包,下载完成以后,根据软件包的格式采用对应的命令安装它。在Ubuntu系统中,有一个环境变量的配置文件,它对所有登录的终端都有效,因此我们通常将一些各个用户都可能使用到的一些环境变量加到这个文件中,比如通常将Java编译器和运行环境相关的路劲加到这个配置文件(/etc/profile)中,其内容如下【16】:ANDROID_JAVA_HOME=/home/xiong/android/jdkPATH=¥ANDROID_JAVAHOME:¥PATH然后重新启动一下机器,在终端中输入查看版本信息的命令,如果输出了版本信息,则表示安装成功,如果提示没有找到命令,则需要检查配置了。③在开发机上编译Android项目源码经过上面的软件安装和环境配置,就可以编译Android源码了,进入到源码目录,,-/android下,可以执行make命令来编译,第一次编译的时间会比较长,第二次以后的编译时间比较短。④在开发机上测试编译结果在编译完整个Android项目后,如果需要在开发机上观看Android的运行界面,那么就需要在开发机中安装模拟器,模拟器有针对Windows的版本,也有正对苹果操作系统的版本,还有针对Linux的版本。下面以Linux为例,如何在开发机上创建模拟环境并其运行Android系统。模拟器有两种途径获取:一种是从Android源码编译获取(默认情况下,不会编译生成模拟器),第二种途径是直接从Android的官网上下载正对自己平台的安装软件包。这里采用第一种途径i前面编译过Android源码,在目录-/android/out/host/1inux.x86/bin下生成了很多应用程序,这些应用程序中就有模拟器,为了方便的运行模拟器,可以按照前文所讲的方式把这个目录也添加到系统PATH下。接下来需要把Android的镜像文件加载到模拟器中,让编译生成的Android镜像在模拟器中跑起来,为了方便描述,下文中将路径out/target/product/genedc统称为androidoutdata,在一/.profile文件中加入如下内容:ANDROIDPRODUCTexportOUT=一/android/androidoutdataANDROIDPRODUCT_OUT然后重新启动机器,进入到模拟器目录中并启动模拟器:xiong:一Scd一/android/androidoutdata10武汉理丁大学硕十学位论文xioag:-¥ⅫⅢlat口-imageo舢l“g-d啦usetdata.im¥-衄Ⅱd址mmdi&Limg等待几分钟,模拟器启动以后可以看到以下界面:图2-2Android运行界面2.3系统软件开发环境搭建Android的底层软件如Linux内核、Android文件系统、Android核心库等都和Linux的融合比较紧密,因此底层软件比较适台在Linux环境下编译调试;其上层的应用软件,对开发机的操作系统没特殊要求,常见的Lintlx发行版或者是Windows都可以作为开发机的操作系统。2.3.1Android底层软件开发环境搭建Android底层软件主要是指BootLoader、Kernel(包括驱动)和Android应用层之下的软件(Android源码中的C,c++部分)。其中Android源码的开发环境在前面已有介绍。因此这--d'节主要介绍开发BootLoader和Kernel的环境。1、安装交叉编译器需要注意的是.编译AndroidKernel的交叉编译器和编译普通Linuxkernel的编译器有所不同,要使用专门的交叉编译器,这个专门的编译器在功能方面有一些特殊要求,需要修改gcc源码,但是Android源码中已经提供了交叉编译武汉理1:大学硕士学位论文器,比如本系统的交叉编译器放在以下路径下:一/android/prebuild/linux-x86/toolchain其中有多个版本的交叉编译器,选择一个最新版本的编译器,并将其路径加到√.profile中,这样可以直接在终端中使用arm.eabi.gcc命令来编译程序。2、安装和配置Linux下的超级终端Minicom是Linux下的超级终端,用于和开发板交互,可以在通过它输入命令来控制开发板,也可以使用它给开发板传输文件,在Ubuntu下安装它很简单,执行以下命令即可:xiong:一¥sudoapt-getinstalll毪inicom安装完后需要对它进行配置,可以输入命令minicom.S来配置,根据提示进行,正确设置波特率以及奇偶校验、停止等参数。设置完后,串口可以打印信息了,但是还不能通过串口传输内核,还必须安装以下软件包:sudoapt-getinstallIrzsz2.3.2Android应用程序开发环境搭建SDK开发应用程序需要安装AndroidSDK、JDK和Eclipse,其中Android包含创建和运行Android应用程序所需的一切,Google分别发布了针对Linux和Windows的版本,当然AndroidSDK也可通过编译Android源码得到,在前面编译源码之后,已经生成了AndroidSDK。JDK和Eclipse均有针对Linux和Windows的版本,因此Android应用程序既可以在Linux下开发,也可以在Windows下开发,且都很方便。下面介绍在Ubuntu8.04下开发应用程序的环境搭建方法。在本章的前面所介绍的基础上还需要安装和配置Eclipse,AndroidSDK是一个插件,利用这个集成开发环境来开发和调试Android应用程序【rn。1、下载去Eclipse的官网上下载针对Linux的安装包。2、安装安装过程相对比较容易,将上面下载的包解压到指定的目录下即可:xiong:一¥cd—xiong:一¥mkdireclipsexiong:一¥tarxvzf一/download/eclipseforlinux.tar.gz-C-/eclipse3、运行12武汉理T大学硕士学位论文xiong:。Scd-/eclipsexiong:-¥./eclipse在弹出的对话框中使用默认的工作空间就可以了。4、安装Android插件①在eclipse中点击菜单帮助下拉菜单的安装新软件包;②在弹出的对话框工作目录后的文本框里输入Android插件的网址;③然后选中新出现的开发工具并选中子项“AndroidDDMS’’和“Android开发工具集’’。④连续点击两次下一步,之后选中单选框表示同意用户许可,然后点击完成;⑤注意,在进行一下步骤时需要重新启动Eclipse;⑥通过上面的安装,下面需要指定Android1)在Eclipse中点击菜单窗口的参数选项;SDK对应的目录:2)左边选中Android,右边点击浏览,然后指定Android3)最后点击提交、确定就配置成功了。SDK的安装目录;经过以上的配置,Android应用程序的开发环境已经准备好了,可以在Eclipse中开发和调试Android应用程序了。注意,在运行程序时,Eclipse会自动打开模拟器,将程序在模拟器中运行,因此,开发和调试应用程序可以在脱离硬件的情况下进行。13武汉理f大学硕士学位论文第3章系统硬件设计根据本系统的需求,采用了多核的架构,其中最主要的两个核是PXA310和PNX5209的核,两者均基于ARM,其中PXA310是最核心的CPU,它负责控制整个系统.是整个系统的心脏;PNX5209是基带模块,主要负责管理SIM卡并完成电话相关的功能,比如接打电话、收发短信、GPRS上网等等。下面介绍系统的整体硬件架构和一些核心器件。3.1硬件总体设计酐].一厂—兰再i堆到I懋巍一筐重习¥兰—毒=兰呈型。图3-1硬件总体框图从图3-1可以看出PXA310处于一个核心的位置,外接各大模块.以完成某个功能:●CameIa:实现照相和摄像功能,使用IIC通信:・AGPS:实现导航功能,使用lie通信:●WIFI:实现无线上网功能,使用SDIO通信:・Bluctooth;实现蓝牙的功能,包括A2DP、Handfree/Headset,使用用串口和PCM接口通信,接打电话的音频数据使用PCM接口传送,其他数武汉理工人学硕士学位论文据通过串口传送;・MCP:将NandFlash和SDRAM集成在一个芯片上,可减少体积和成本;●MIC.麦克风;・LCD-TFr屏,用SPI通信,用GPIO模拟实现;・Motor:电机,起振动作用;●LED:键盘的背景灯,LCD背光;・SDcard:扩展SD卡,支持512M/1G/2G/4G/8G的microSD;module:基带系统,通过串口通信。●Buttons:按键,包括qwert键盘和声音键,开关键等:●RF3.2处理器介绍PXA310处理器由Marvell公司专门为GPS定位系统、手持移动设备、以及其他消费类电子设备而设计,它基于第三代IntelXScale技术。可以与PXA3XX等系列处理器的软件实现100%兼容。PXA3XX序列中的PXA300处理器在大容量移动手持设备中表现出高性能和低功耗,它是性能和功耗的优化组合,而PXA310处理器则可以延长电池的使用寿命,可以为3G视频和音频等多媒体软件提供高分辨率的VGA多媒体性能,例如PXA310可以以每秒30帧的速度对H.264视频格式进行录音和重播,在以往处理器中具有前所未有的多媒体性能以及先进的通用处理功能。PXA310的高性能也体现在提供较高主频,其主频最高可达624MHz,它的软件与PXA320处理器软件完全兼容,这样在两者中的一个处理器上进行软件开发之后即可很方便移植到另一个处理器上【18】。3.3存储系统介绍手机的存储系统一般分为Flash和SDRAM两种。本系统采用MCP存储器,MCP把多个半导体芯片组合在一个单一封装之中,为手机和其它小型设备节省宝贵的空间,本系统采用的MCP存储器型号是H8BCSOSIOMAP,拥有128MB(64MbXl6)的SDRAM和256MB(2Gbit)的NandHash,其中NandFlash页大小为2048字节,OOB大小为64字节,块【19】。64个页组成一个块,总共有2048个15武汉理工人学硕士学位论文3.4音频模块图3-2音频芯片图3-2是该系统使用的音频芯片,该芯片最主要的功能是AD和DA的转换,即将声音信号转换为数字信号以及将数字信号转换为声音信号,该芯片不具有任何对声音数据的压缩和解压能力,因此关于音频数据的且三缩和解压由软件束实现,Android系统自身支持目前许多已知的音频格式,对于手机而葺,使用Android自带的软件编解码足以满足要求,无需添加其他的支持。下面对该芯片的一些接口功能进行说明:・AC97接口:主要包含图3-2的AC97一SDATAOUT、AC97一BITCLK、AC97SDATAIN0、AC97SYNC、AC97RST引脚,这些引脚和武}又珲£‘人学硕十学位论文PXA310内部的AC97接口连在一起,是PXA310和音频芯爿之削的数据通道,比直uMP3经过处理其PXA310解码之后将数据通过AC97接口传送给音频芯片,旨频芯片将数字信号转换为声音信弓;在录旨时,音频芯片将声音信号转换成数字信号之后再通过AC97接『i传送给PXA310处理:PCM接口:圭要包台图3-2的PCMCLK、PCMslrNC、PCMOUT、PCMIN引脚,这些引脚和鲭牙模块的PCM接n相连,主要用于用监牙耳机接打电话时音频数据的传输:●基带音频输出:=E要包含图3.2的HFR2、EARl引脚,基带传来的声音信号(模拟信号)通过这两个引脚传给该芯片。麦克风:主要包含图3-2的MAINMIC+、MAIN—MIC-引脚;喇叭:丰要包含图3-2的第35和36引脚;听筒:丰要包含图3,2的EARPCODEC、EARMCODEC引脚:●●●●耳机:主要包含图3.2的IfPL、HPR两个引脚,一个左声道,一个右卢道:●基带音频输入:主要包含图3.2的MICN、MICP两个引脚,说话的声音信号(模拟信号)通过这两个引脚传给基带;3.5基带模块图3—3基带模块框图基带模块的处理器采用飞利浦公司研发生产的PNX5209,它基于ARM9核。图3-3是肇带模块内部的结构【{!}|.ti以看Ⅲ基带模块就是~个完整的系统,有自武汉理1火学额十掌位论文己的存储器和程序,有各种外设如串口和USB等,宴际上基带模块就是通过串口和PXA310通信的,一方面基带模块可以接收PXA310通过串口发过来的AT命令,然后返回结果,比如在用户拨打电话时,PXA310会给基带模块发送拨打电话的AT命令:另一方面,基带模块可以主动上报一些事件,这些事件也是以AT命令的形式,比如电话来了,摹带模块会上报来电的AT命令给PXA310[20]。基带模块除了一些电话和SIM卡相关的功能之外,电池的电量也是通过基带模块来检测并上报的,这是因为电量的检测是通过电压来实现的,需要AD转换,但是PXA310内部没有AD转换器,所以借助基带模块的AD来检测电量,并以AT命令的形式上报给PXA310。3.6蓝牙模块图3-4蓝牙芯片蓝牙模块采用CSR芯片BC418143A,支持Bluctooth2.0和EDR,这款芯片可以使用串口、PCM接口、USB、SPI来通信,本系统只使用了两种通信方式:串口和PCM接口,串口主要用于控制蓝牙芯片以及蓝牙立体声(即A2DP)的数据通道(蓝牙立体声的数据不通过音频芯片),PCM接口丰要用于用蓝牙耳机接打电话时音频数据的通信(即Headset/tlandfree)。需要注意的是,由于蓝牙立体声音质较好,数据量比较大,且这些数掘通过串口传输给蓝牙模块,因此PXA310的串口要切换到高速模式下。武汉理】.大学硕十学位论文3.7USB模块馘一畿一囊鬻图3-5USB模块USB3319的ULPI接口连接到PXA310的ULPI接口,支持OTG功能,PXA310的USB接口支持USB2.0。作为Android手机,这里需要完成两大功能:USBgadget和ADB,前者可以把手机当做u盘使用,可以在电脑上存取手机上的文件.后者可以使用USB柬调试Android并可以通过ADB柬将电脑上的Android应用程序安装到手机上。需要说明的是,以上两大功能如果主机是Linux系统的话,无需安装驱动;如果主机是Windows的话,需要安装驱动,Google发布了Android针对Windows的USB驱动,仅需对驱动进行配置,根据自己的平台修改VID和PID即可使用。武汉理工火学硕士学位论文第4章。软件开发调试方法的分析与选择软件调试在本系统软件的开发的过程中占有很重要的位置,在Android系统的不同层次,调试方法各不一样,选择好的调试方法不仅可以更容易更准确地发现问题,而且可以大大提高工作效率和节约成本,比如调试内核的JTAG设备需要配合专门的软件,一般都非常昂贵,如果有其他替代方法的话,完全可以不用去买这些昂贵的JTAG调试器以及对应的软件。4.1本系统启动代码调试及固化方法BootLoader在本智能手机开发过程中的的作用有三个,第一,用于启动内核;第二,将内核从NandFlash拷贝到内存中;还有一个功能就是用于调试,比如接收开发机发送过来的内核镜像,擦除烧写NandFlash等。Blob的编译需要在Linux下进行,采用arm.1inux.gcc来编译,编译完了之后可以生成带有调试信息的elf文件,使用Banyan仿真器和ADSl.2的调试器可以进行源码级上的调试,当然在串口已经可以正常工作的情况下,可以使用串口打印的方式来调试而无需仿真器,但是当串口驱动还没做好,只能使用仿真器来进行调试了。Blob的固化有三种方法,第一种是用JTAG来下载,比如Banyan配合ADSl.2可以下载,由于Banyan采用USB传输且速度较快,适合调试用;另外PXA310内部有一个很小的ROM,里面固化了一小段代码,这一小段代码可以用来更新Blob,在出厂时比较适合这种方法,这是第二种方法;第三种方法是用串口下载新镜像,采用自我更新的方式,在调试时使用该方法,前提是系统里面已有可以跑起来的Blob。4.2本系统内核及驱动调试方法本系统的内核调试是整个系统调试最复杂的工作,内核的调试方法比较多,如有比较常用的printk、kgdb、oops,还有一些需要第三方软件和硬件支持的方法,如probes、jtag等等,但是最常用方法足够开发使用,一般的问题都可以准确的找出来,且成本很低,准确使用这些调试技巧可以大大提高工作效率和降level901.。武汉理工大学硕士学位论文低产品研发成本,下面简要介绍其使用方法。4.2.1Printk调试内核、驱动的最简单最常用的方法,是使用printk函数打印信息,该函数是Linux内核专用的,它与应用程序中的printf函数使用格式完全相同,它所打印的字符串头部可以加入类似“<i>"的字符,其中i可以为数字0—7,表示这条打印信息的级别,特别需要给出一下几点说明(21l:1)对于printk(“<i>…”’),当i小于console分号之内的内容,否则,这条语句不会打印任何信息。2)如果defaultmessageloglevel等于5,并且该函数的参数最前面没有‘<i>"之类的字符,那么该函数函数会自动填充“<5>’’。3)minimumconsoleconsole的值时,这个值不能小于minimumconsoleloglevel4)defaultconsoleconsole_loglevel的值时,将以default_consoleloglevel作为console_loglevel的默认值。4.2.2KGDBKgdb和裸机下使用jtag调试程序一样,可以设置断点,可以查看变量、寄存器的值等等,可以控制内核的运行,调试功能非常强大,且同样仅仅需要使用串口来通信,成本非常低,这种调试方法完全可以取代成本昂贵的jtag调试方法。该调试方法所具有的功能最强大,在本系统的调试中作用也最大。使用kgdb时,需要两台机器,即主机和目标机,两者通过串13线连接。要调试的内核需要增加kgdb功能,它在目标机上运行,gdb在主机上运行。串口线被gdb用来与内核通信。下面介绍如何使用该方法来调试内核的【221。本系统采用的内核版本是tjnux2.6.28,需要对其做一下修改才能使用内核的kgdb功能,具体方法在第五章的移植中阐述。在修改完成之后需要对内核进行配置,在配置时要选中以下几项:Kemelhacking…>r】Kerneldebuggingdebuginfo【+】Compilethekernelwith21武汉理L大学硕}学位论立f.】KGDB:蛔dd出uggmgwithmm“egdb…>经过以上修改和配置,编译之后的内核将带有调试信息并能使用kgdb了。注意:在这里有个地方需要注意,这是本人在开发这个系统的过程中发现的一个内核bug。那就是需要在linux2kgdb_arch—init中加一条语句,比如:6.28/kernel/kgdbc中的intweakintweakkdbaKhinit(void)柙nqk(1kgdb_arch』it"1um0.weak',n’I否则,linux2.6.28/kemel/kgdbc中函数kgdb-register_callbacks调用的kgdb_areh_init是linux2.6.28/kernel/kgdbc中的int_weaklinux26kgdbarchinit而不是28/舡ch/amgkemel/kgdb.c中的intkgdb_arch_init(vold),导致内核崩溃a经过以上的修改,内核的kgdb就打丌了,还需要在主机上运行arm.1inux.gdb,从gdb官网下载其源码包,在编译它时,指定这个调试器是用柬调试ARM程序的即可。编译并安装完之后,可以使用arm—linux—gdb来调试打开kgdb的内核了。但全用命令的方式很不方便,其实DDD可以配合ann.1inux.gdb在图形界面上对内核进行源码级上的调试,比如本系统使用该方法调试NandFlash驱动时的截图如图4_1。图4-1在断点处停下武汉理:[大学硕十学位论文4.2.3Oops信息及栈回溯前面介绍的printk和kgdb是有条件的,那就是内核运行正常,没有“死掉",如果内核由于某种不可恢复的异常(比如空指针引起的非法访问)导致系统“死掉",那么上面两种方法都不能使用,Linux内核调试机制还提供了oops信息,在内核崩溃之前,尽可能地将一些处理器的状态和栈的信息打印出来,方面分析出错的原因。结合上面介绍的三种调试方法,完全可以完成内核开发的调试工作,完全可以定位和分析一般的内核问题。在获得oops信息之后,根据项目经验在分析出错点时需要注意以下几点:・明确出错原因。这一点往往根据信息的最前面就可以确定;・根据栈回溯信息找出函数调用关系。内核崩溃时,可以从PC寄存器推断内核崩溃时所正在运行的函数、以及附近出错的指令。但是很多情况下,错误有可能是崩溃函数的调用者引入的,所以需要找出内核崩溃时所在函数的调用链;・根据PC寄存器的值确定出错的位置。PC的值保存了内核崩溃时所执行的指令地址。・结合内核源码和反汇编代码定位问题。可以通过交叉编译器的objdump工具将带有调试信息的内核生成其对应的汇编代码。从汇编代码上诊断问题所在。4.2.4内核固化内核的固化,可以使用Blob的串口下载内核镜像并固化到NandFlash中,也可以使用Bootloader+MicroSD卡更新的方式。在调试阶段两种方法都可以,在出厂时一般使用后者来固化。在硬件出厂时,只需一个存有内核镜像的MicroSD卡即可完成内核的固化,无需使用串口、主机。1、采用串口下载更新内核用串口线将主机和目标板连接起来,给目标板上电,运行blob,并进入到blob命令行下。并输入以下命令:blob>xdkemel此时blob在等待串口传输文件,选择协议并输入要传输文件的路径,就可以看到传输的开始,等待传输结束后,按回车,又回到blob的命令行,执行以武汉理.[大学硕士学位论文下操作将下载到RAM中的内核镜像烧写到NandFlash的mtdblockl(第2个分区,区间为0xll0000--0x410000,总共3MB)中。blob>flasherase-z0xl100000x300000上面表示擦除NandFlash从初始地址0xll0000开始的长度为0x300000的内容。blob>flashwrite.zOx80800000(Ixl100000x300000上面的地址0x80800000表示内核镜像下载之后存放在RAM的该地址处,0xll0000表示内核镜像存放在NandFlash该地址处,0x300000表示要烧写的镜像大小,这个值应该比内核镜像本身的体积大。2、采用MicroSD卡更新内核采用这种方式和上面的类似,不同之处在于将内核镜像存放在MicroSD卡中,然后将内核从MicroSD卡中读取到开发板的RAM中,最后固化到NandFlash中。采用这种方式速度比前一种方法要快,在调试时,可根据需要和条件来选择上面两种方法中的一种。4.3本系统文件系统构建在调试阶段,通常使用两套文件系统,一套是BusybOX文件系统,由编译Busybox得到,体积比较小通常只有几MB甚至几百KB:一套是Android文件系统,由编译Android源码得到,体积比较大,一般有几十MB。Busybox文件系统的作用在于,当Android文件系统出现问题或者需要更新Android文件系统时,可以修改内核参数进入到Busybox文件系统对Android文件系统进行修复或者更新Android文件系统。下面简称Busybox文件系统为小文件系统,本项目使用了Cramfs、Jffs2、Yaffs2这三种文件系统格式,其中前两者用于小文件系统,后者用于Android文件系统。下面分别介绍本系统使用的文件系统的构建方法和对应的镜像生成固化。4.3.1小文件系统构建本系统的小文件系统利用Busybox来构建,需要注意以下几点:・使用的交叉编译器不是采用编译内核和启动代码相同的编译器24武汉理丁大学硕士学位论文(Android自带的arm.eabi.gcc),而是采用了arnl.1inux.gee3.4.5版本,由于版本的缘故,Busybox在有些交叉编译器下编译通不过;・在小文件系统的lib目录下要根据具体情况需要加一些动态链接库进去,如果Busybox是静态链接的,而且文件系统里其他的应用程序也是静态链接的,那么可以不加任何动态链接库,否则,需要将要用到的库放进去,通常采用非静态的方式来链接Busybox和应用程序,因为这样会减少文件系统的体积。4.3.2Android文件系统构建Android文件系统由编译Android源码得到,按照前面介绍的方法编译完Android源码之后,会在目录androidoutdata/的root、system、data三个子目录下生成文件系统的所有内容。其中目录androidoutdata/root下的system和data两个子目录均是空的,其内容分别在androidoutdata/system和androidoutdata/data下。将Android文件系统整合到一起,放在~/androidfs下。xiong:~¥cp—avf-/android/androidoutdata/root/+-/aadroidfslxiong:一¥ep-avI一/android/androidoutdata/system/+一/androidfs/system/xiong:-¥印-avf-/android/androidoutdata/data/。一/androidfs/clata,至此,Android文件系统制作完毕,一/androidfs下的内容即为文件系统的所有内容。4.3.3小文件系统的Cramfs镜像制作及固化Cramfs是一个压缩式的、只读文件系统。下面介绍如何将前面制作的小文件系统制作成Cramfs的镜像并固化到NandFlash中。①制作cramfs需要使用专门的工具,首先安装该工具:xiong:-¥sudoapt-getinstallcramfsprogs②并执行以下命令即可生成对应的镜像smallrootfs.cramfs:xiong:一¥cA一/smallrootfsxiong:-¥mkeramfssmallrooffs/smallrooffs.cramfs③用串口线将主机和目标板连接起来,给目标板上电,运行blab,并进入到blab命令行下。并输入以下命令:blab>xdkernel25武汉理工大学硕士学位论文此时blob在等待串口传输文件,等待传输结束后,按回车,又回到blob的命令行,执行以下操作将下载到RAM中的镜像烧写到N柚fFlash的mtdblock2(第3个分区,区间为0x500000一Oxa00000,总共5MB)中。blob>flasherase-zOx500000Ox500000blob>tlashwrite-z0x808000000xS000000x500000④要从Cramfs启动,可在blob引导内核之前给内核提供参数,通过以下方式来进入该文件系统的控制台:blob>nk以上命令装载Linux内核到RAM中。blob>bmem=128Mandroidnoinitrdinit=/linuxrerootfstype=cramfsconsole=ttyS2,115200root=/dev/mtdbloek2通过以上命令引导内核之后就可以进入到Cramfs中了。4.3.4Android文件系统的Yaffs2镜像制作及固化Yaffs(YetAnotherFlashFileSystem)是专门为NandFlash设计的嵌入式文件系统,适用于大容量的存储设备。到目前为止,Ya凰厂Yaffs2是最佳的NandFlash上的文件系统。Android文件系统的性能直接影响到整个手机系统的性能,因此这里Android文件系统采用Yaffs2的格式。下面介绍如何将前面制作的Android文件系统制作成Yaffs2的镜像并固化到NandFlash中【矧。①在开发机上编译制作Yaffs2镜像的工具。去官网下载yaffs2源码包然后编译,编译完成后,在yaffs2/uitils目录下生成可执行文件mkyaffs2image。将其复¥1J至lJ/usr/bin下面,这样每次可以在终端中直接输入该命令来调用该程序了【矧。xiong:-¥cpyaffs2/utils/mkyaffs2image/urn/bin/②制作镜像。xiong:一¥cA—xiong:一¥mkyaffs2imageandroidfs/androidfs.img执行完后生成的androidfs.img即为Android文件系统的Yaffs2镜像。③用串口线将主机和目标板连接起来,将装有androidfs.img的Micro下。blob>mdaadroidfsSD卡插入目标板的SD卡槽中,给目标板上电,运行blob,并进入到blob命令行以上命令将androidfs.img从MicroSD卡读到RAM中,并输入以下命令将下载到RAM中的镜像烧写到NandFlash的mtdblock3(第4个分区,区间为26武汉理工大学硕士学位论文0x800000~0x6200000,总共90MB)中。blob>flasherase—Y0x8000000x5a00000blob>flashwrite-y0x80800000Ox8000000x5a00000④要从Yaffs2启动Android文件系统,可在blob引导内核之前给内核提供参数,通过以下方式来进入Android系统界面:blob>nkblob>bmem=128Mandroidconsole=ttyS2,115200rootfstype=yaffs2noinitrdinit=/linuxreroot=/dev/mtdblock3通过以上命令引导内核之后就可以引导进入Android系统了。4.3.5Android文件系统出厂固化上面的之所以需要两套文件系统,是为了方便调试。在出厂时,并不需要两套文件系统,只需要Android文件系统。在出厂时,由于没有小文件系统,因此不能借助小文件系统来烧写Android文件系统,~般采用Bootloader+MicroSD卡更新的方式。这样在硬件出厂时,只需一个存有文件系统镜像和内核镜像的MicroSD卡即可完成内核和文件系统的固化,无需要要串口和主机。需要注意的是,出厂时的Android文件系统不是放在同一个分区,分三部分:根文件系统下的system和data两个目录分别放在开发板NandHash的两个不同分区,在编译Android源码结束时会自动生成这两个目录对应的Yaffs2镜像,分别是system.img和userdata.img,这是其中的两部分;除此之外根文件系统的其他内容(如init、init.rc、配置文件等,这些文件体积比较小)全部放在Linux内核镜像中,以Ramdisk的方式加载,这是第三部分。这么做是为了系统性能和安全性的考虑,因为Android系统在运行时对init、init.I'C以及其他配置文件的访问会很频繁,将其放在内存中可以提高系统的效率。在调试时将所有文件系统放在一个分区,这样做是为了烧写文件系统的方便。4.4本系统Android应用程序调试及下载4.4.1应用程序调试Android应用程序调试相对来说较为简单,按照前文的方式搭建好开发应用程序的环境,就可以开发和调试应用程序了,这些调试可以在Eclipse集成环境27武汉理工大学硕七学位论文中完成,运行结果可以在模拟器中显示,因此应用程序的调可以脱离硬件平台。在调试完以后,可以安装到硬件平台上进行测试。4.4.2应用程序安装下载Android平台应用程序的安装方法有4种:①通过串口将应用程序下载到目标板上,然后用AndroidApk安装程序将下载的Apk包安装到系统中。②将应用程序拷贝到MicroSD卡中,然后用AndroidApk安装程序将MicroSD卡中的aOk包安装到系统中。③将手机和PC用USB线相连,利用ADB来安装应用程序。④在可以上网的情况下,可以用Market来在线安装。其中方法①由于其依赖性最小,仅仅依赖串口驱动,在调试阶段使用最多的方法。用户基本不会使用方法这种方法,因为出厂时,一般会去掉串口调试接口,用户不会有串口可用。后面的三种方法用户使用最多,对用户而言最方便,但是对于开发人员来说,也许并不可用,方法②需要MicroSD的驱动完好,方法③需要USB驱动完好,方法④需要有网络可用,对于手机来说一般就是3G/GPRS/WiFi,在调试阶段这些驱动可能都没做好,因此,最常用的是方法①。下面介绍如何使用串口传输工具lrzsz来下载应用程序。去官网下载lrzsz源码并编译,可在src下生成lrz、lsz两个可执行程序,一个用于接收文件,一个用于发送文件。将这两个程序放到Android文件系统的system/bin下面,如果是静态链接的,无需共享库,如果是动态链接的,需要共享库,可以在Android文件系统下创建lib目录,然后将所需要的库放在该目录下,按前面的方法更新开发板上的Android文件系统,下次进入Android系统的时候,就可以使用串口来接收和发送文件了。一般情况下,Android文件系统本身提供的命令比Busybox的命令少很多,我们可以利用Busybox的命令,将其加入到Android文件系统中,以方面调试【251。连接好串口线,进入Android文件系统,在目标板运行lrz,此时目标板会等待开发机传输文件,在开发机上选择协议并输入应用程序的路径,即可以看到传输的开始,等待传输结束后,按回车,可以看到应用程序已经存放在当前目录下。其实上面的方法可以传输任何文件,在调试Android的时候,经常会修改某武汉理工大学硕士学位论文个模块的源码,可以使用Android的mmm命令来重新编译这个模块,这个模块在很多时候是一个共享库,体积一般不大,在测试模块时,没必要将整个Android文件系统更新,只需要更新这一个共享库,这时,可以使用串口来下载这个共享库来替换目标板上的共享库了,非常方便和快速,比起更新整个文件系统的效率高了许多倍。武汉理T大学硕十学位论文第5章底层软件移植与裁剪5.1BootLoader移植Blob移植5.1.1Blob支持比较多的处理器,包括本系统所用的PXA310,其中Blob支持的PXA310开发平台有Littleton和Zylonite,这两个平台中Littleton的硬件资源和本系统的硬件资源更接近,为了减少移植时间,可以选择在Littleton平台的代码上进行修改和补充,改动比较大的主要是一些片外设备,因为本系统硬件和Littleton硬件的不同大多在片外设备上。需要修改和添加的主要文件为:①/include/blob/arch/wiigo.h:该文件是为该智能手机添加的一个头文件,该头文件定义了调试串口、内存起始地址、启动代码地址、内核的地址等等比较重要的信息,其主要内容为:#defineWlIGO—USE_SERIAl.31//使用第三个串121作为调试串121#defineWnGO_TERMINAL_SPEEDbaud_115200//串口波特率#defineWIIGO_BLOBRAM_BASE(0x80200000)//biob在RAM中的地址#defineWIIGO_KERNELRAM—BASE(Ox80800000)//内核在RAM中的基址#defineWIIGO_PARAM_RAM_BASE(0x80210000)//blob传递给内核参数存放在RAM中的地址#defineWIIGO_BLOB_FLASH—BASE(Oxl0000000)//blob在Flash中的基址#defineWIIGO_BLOB_FLASH_LEN(256’1024)//Flash给blob预留的长度#defineWIIGO_PARAM_FIA.SH—BASE(WIIGO_BLOB_FLASH_BASE+WIIGO_BLOB_FLASH_LEN)//传递给内核的参数圈化在Flash中的地址(o)//参数的长度,这里为0表示没有固化参数#defineWIIGO_PARAM_FLASH_LEN#defineWIIGO_KERNEL_FLASH—BASE(WIIGOWIIGO_PARAM_FLASH_LEN)#definePARAM_FLASH_BASE+//内核在Flash中存放的地址(3。1024‘1024)//给内核在Flash上预留的长度wIIGOLKERNEI:FLAS丑j卫N②src/blob/start.pxa.S:该文件为ARM汇编,是所有基于PXA架构的平台启动代码,如PXA270、PXA310等,该文件所做的工作主要是设置中断相关的内容,如清除中断、设置向量表等,另外该启动代码还会配置常用的一些GPIO、设罨内存SDRAM等,需要根据自己平台的IO功能以及SDRAM的芯片特性和地址空间来做相应配置,本系统该文件的主要内容如下:武汉理1=大学硕+学位论文.globlresetreset:严关闭所有中断・/ldrmOVstrr0,=ICMR尸全局中断控制寄

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论