ImageVerifierCode 换一换
格式:DOCX , 页数:11 ,大小:50.48KB ,
资源ID:11510131      下载积分:10 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/11510131.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(嵌入式系统项目报告.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

嵌入式系统项目报告.docx

1、嵌入式系统项目报告嵌入式系统项目报告项目名称: 基于DM3730的Android系统 启动进程分析和Logo移植 1.项目开发目的本次项目研究和开发的要紧目的如下:(1)基于DM3730处置器研究Android系统的启动进程及其要紧流程;(2)基于Android系统的启动流程init进程深切明白得。(3)移植Android系统启动进程中的Logo和相关动画;(4)修改Android系统的指定桌面,让系统启动后直接跳入自己的开发的应用程序。2.项目开发内容本次项目需要完成的要紧内容有如下几点:(1)在上下载Android专用源码,完成Android系统的软件开发环境的搭建;(2)在EVM37x开

2、发板上搭建Android系统的硬件开发环境;(3)Android系统的init进程和文件简单解析;(4)Android系统启动的动画和Logo的修改;(5)Android系统桌面源码的修改,实现直接调入自己的应用程序。3.项目开发软硬件设备(1)硬件平台:TI高性能处置器DM3730,TI核心开发板EM/AM37xx EVM板(2)操作系统:Android (3)PC端的开发平台:(4)开发所需的IDE :TI集成开发环境4.项目开发流程 项目开发前期预备 Android源码下载和编译本项目是在Ubuntu宿主机上完成Android源码的下载和编译。在此之前需要完成以下工作,要紧包括各类And

3、roid开发所需的插件,编译时所需的基础库和开发调试的minicom终端等。sudo add-apt-repository deb lucid partner sudo add-apt-repository deb-src lucid partner sudo apt-get update sudo apt-get install git-core gnupg sun-java6-jdk flex bison gperf libsdl-dev libesd0-dev build-essential zip curl libncurses5-dev zlib1g-dev minicom tftp

4、d uboot-mkimage expect sudo update-java-alternatives -s java-6-sunrepo init -u -m init -u -m sync./.repo/repo/repo sync local-only下载Android源码的进程和命令:Android源码的编译:包括环境变量的设定,x-loader、u-boot、Linux Kernel和Android文件系统。环境变量:x-loader编译:u-boot编译:make CROSS_COMPILE=arm-eabi- distcleanmake CROSS_COMPILE=arm-ea

5、bi- omap3_evm_configmake CROSS_COMPILE=arm-eabi-Linux Kernel编译:make ARCH=arm CROSS_COMPILE=arm-eabi- distcleanmake ARCH=arm CROSS_COMPILE=arm-eabi-omap3_evm_android_defconfigmake ARCH=arm CROSS_COMPILE=arm-eabi- uImageAndroid文件系统编译:整个系统编译进程约3个小时左右,占用空间达12G,因此对PC机的要求较高。Android文件系统制作:到此为止,整个Android系统的

6、各个部份都编译和制作完成。 EVM板硬件环境的搭建那个地址说的硬件开发环境的搭建,主若是指将上述编译好的Android系统所需的xloader、u-boot、Linux kernel和文件系统镜像通过tftp协议下载到Linux的NandFlash上去。利用如下命令进行镜像文件的烧录:OMAP3_EVM # tftp 0x MLOOMAP3_EVM # nand erase 0x0 0x50000OMAP3_EVM # nandecc hw 2OMAP3_EVM # nand write 0x 0x0 0x50000通过以上要紧内容,顺利完成项目开发所需的软硬件开发环境的搭建,为后续项目的顺利

7、进行打下了良好的基础。 Android启动init进程和文件的解析Android中的内核启动后,kernel会启动第一个用户级别的进程:init,它是一个由内核启动的用户级进程。内核自行启动(已经被载入内存,开始运行,并已初始化所有的设备驱动程序和数据结构等)以后,就通过启动一个用户级别的进程,完成系统的引导。init始终是第一个进程,位于/sbin/init下面。而是init进程启动读取的第一个文件,该文件时一个配置Android系统所需要启动的效劳和相关Android应用程序最初始化的配置。因为它与Android启动的界面有直接的联系,因此为了项目的顺利进行,有必要先对其进行明白得和熟悉。

8、分析init进程需要结合进行,在那个地址要紧通过度析部份代码,做合理的说明。Init进程的源代码位于Android源码的system/core/init/下面,由于代码过于庞大那个地址不在粘贴。1. uevent进程if (!strcmp(basename(argv0), ueventd)return ueventd_main(argc, argv);那个函数是掏出argv中的第一个参数,比如/sbin/ueventd,那么basename为ueventd。android系统第一次启动的进程名init,因此该函数ueventd_main不执行,该函数的真正执行在init启动service ue

9、ventd /sbin/ueventd后,fork出一个子进程,execve启动/sbin/ueventd后,事实上该函数是对init的符合链接,也确实是ueventd进程执行起来后执行的代码仍是中的main,因此不同的进程名会去执行相同的main函数。ueventd_main函数的要紧功能:在Linux系统中此刻都利用uevent机制来治理设备的 热插拔事件,给用户空间权利来完成一些设备文件节点的创建。这种机制是成立在socket的通信机制上,用户空间和内核驱动进行交互,详细的机制没有去了解过。是的版本中经常使用的机制。比如驱动显现device_create等时,会向用户空间报告一个ueve

10、nt事件,用户空间由uevent进程解析后去创建设备节点。的解析INFO(reading config filen);init_parse_config_file(/);是一个配置文件,内部有许多的语言规那么,所有语言会在init_parse_config_file中进行解析。挪用流程如下init_parse_config_fileread_fileparse_config.parse_config(源代码略)。通过对那个文件的解析,会启动Android的应用程序,使得Android进入Java的世界。 Android启动Logo和动画移植在那个地址要紧对Android系统的3个画面进行移植,

11、一是Linux内核在启动加载Frambuffer帧缓冲驱动时会挪用一个函数完成Linux的Logo图标的显示。二是Android的第一个init用户进程启动会挪用函数完成一个图片的显示。三是Android系统中Java应用程序启动时显示出来的动画成效bootanimation。 Android启动第一个Logo图标移植Android系统是基于Linux内核设计而成的,Linux下利用帧缓冲(Framebuffer)的概念来表示一个显示接口,通俗明白得就表示一块LCD。帧缓冲区的相关驱动在内核启动时挪用fbmem_init,在该函数中要紧完成利用register_chrdev来注册了一个名称为f

12、b的字符设备,最后挪用函数class_create在/sys/class目录下创建了一个graphics目录等。一样的驱动加载中会挪用硬件平台相关LCD的驱动初始化函数omapfb_init。那个函数会针对对个fb,完成相关节点的创建在/dev/graphics/fb0,fb1.等。主设备号为29一旦完成创建,会挪用fb_notifier_call_chain,函数通知操纵fb的console(明白得为操纵台).每一个fb都会对应于一个console来操纵。而Logo的显示启动,确实是在fbcon_init和fbcon_switch中来完成的。在fbcon_init中利用fbcon_prepa

13、re_logo函数预备需要显示的Logo数据源,在fbcon_switch利用fb_show_logo来显示Logo。本项目中需要将一张Jpg的图片作为Logo样式的图标显示在LCD上面。实现的步骤如下:1.为了能让这部份的Logo图标能够正常显示,需要在编译时必然的配置:CONFIG_FRAMEBUFFER_CONSOLECONFIG_LOGOCONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY完成这些配置以后的Logo才能够正常显示,不然内核在启动驱动加载时,显示Logo图标的函数可不能执行相关的操作。图标的格式转换。Linux启动图标格式不直接支持jpg格式

14、,要紧支持ppm、pbm格式的图像文件,因此需要先将图像进行适当的转换:1)利用gimp image软件随意修改图片的像素大小2)利用终端命令完成convert 3)利用如下命令完成最终的转换(被转换的文件必需是png格式)# pngtopnm # pnmquant 224 最终生成一张格式的图像文件。完成图片的预备工作后,需要修改部份Linux内核的源码,具体的操作如下进行:a.对Makefile文件做必然的修改添加如下内容:obj-$(CONFIG_LOGO_ICS_CLUT224) +=logo_ics_clut224.b.对等源文件做必然的修改添加如下内容:#ifdef CONFIG_

15、LOGO_ICS_CLUT224 logo = &logo_ics_clut224; 始化操纵台。init进程在启动的时候,会解析内核的启动参数(保留在文件/proc/cmdline中)。若是发觉内核的启动参数中包括有了一个名称为“”的属性,那么就会将那个属性的值保留在字符数组console中。如此咱们就能够够通过设备文件/dev/来访问系统的操纵台。若是内核的启动参数没有包括名称为“”的属性,那么默许就通过设备文件/dev/console来访问系统的操纵台。若是能够成功地打开设备文件/dev/或/dev/console,那么就说明系统支持访问操纵台,因此,全局变量have_console的就

16、会被设置为1。b.显示第二个开机画面。显示第二个开机画面是通过挪用函数load_565rle_image来实现的。在挪用函数load_565rle_image的时候,指定的开机画面文件为INIT_IMAGE_FILE。INIT_IMAGE_FILE是一个宏,概念在system/core/init/文件中,如下所示:#define INIT_IMAGE_FILE /图像文件保留的第二个开机画面的图像格式是565rle的。rle的全称是run-length encoding,翻译为游程编码或行程长度编码,它能够利用4个字节来描述一个持续的具有相同颜色值的序列。在rle565格式,前面2个字节顶用来

17、描述序列的个数,而后面2个字节用来描述一个具体的颜色,其中,颜色的RGB值别离占5位、6位和5位。c.制作文件。预备一张png格式的文件,利用Ubuntu自带的图片转换工具执行如下命令:convert -depth 8 rgb:利用android编译后的rgb2565工具,在android/out/host/linux-x86/bin目录下(android为当前源码所在目录),转换命令如下:rgb2565 -rle 。通过以上步骤就完成了代码的移植和图片的制作,最后只需要将文件拷贝到Android的文件系统下面,从头启动就能够够看到图片的正常显示。 Android启动第三个动画移植考虑到第三个

18、启动的动画位于Android的Java层,因此代码量相当庞大,因此只写如何替换启动动画来实现咱们预期的成效。第三个开机画面是由应用程序bootanimation来负责显示的。应用程序bootanimation在启动脚本中被配置成了一个效劳,如下所示:.service bootanim /system/bin/bootanimation user graphics group graphics disabled oneshot 应用程序bootanimation的用户和用户组名称别离被设置为graphics。注意, 用来启动应用程序bootanimation的效劳是disable的,即init进

19、程在启动的时候,可不能主动将应用程序bootanimation启动起来。当SurfaceFlinger效劳启动的时候,它会通过修改系统属性的值来通知init进程启动应用程序bootanimation,以即能够显示第三个开机画面,而当System进程将系统中的关键效劳都启动起来以后,ActivityManagerService效劳就会通知SurfaceFlinger效劳来修改系统属性的值,以即能够通知init进程停止执行应用程序bootanimation,即停止显示第三个开机画面。Android的所有版本都能够添加一个文件。内容包括part文件夹 和。前者的文件夹下面寄存的是持续的png格式文件

20、,后者里面是播放信息设置,其内容和格式如下:480 720 15p 1 0 part1p 0 0 part2其中480 800是指显示的分辨率宽和高,15是图像播放的帧数。p后面的数字别离指播放次数 0和播放时刻。Android系统启动时会文件系统如下目录查找:#defineUSER_BOOTANIMATION_FILE /data/local/ #defineSYSTEM_BOOTANIMATION_FILE /system/media/只需要将制作好的动画文件放到指定的目录即可实现自己设计的美观的动画以替换默许的开机画面。到此为止,完成项目所需完成的要紧内容:移植完成了三个动画来替换系统自

21、带的图片,使得产品能够实现加倍友好的用户界面,提高产品的销量。 Android桌面移植这部份的内容主若是完成Android系统启动桌面进程的移植,目的是讲那个默许的桌面进程修改成自己所设计的应用进程,使得用户在利用Android终端设备是能够直接进入自行设计的应用操作界面。既然是移植桌面系统,那么需要修改的确实是桌面的源码,阅读Android系统庞大的源码,能够发觉Android源码的Home应用程序确实是Launcher进程。Android系统中的应用程序安装好了以后,SystemServer组件接下来就要通过ActivityManagerService来启动Home应用程序Launcher

22、了,Launcher在启动的时候便会通过PackageManagerServic把系统中已经安装好的应用程序以快捷图标的形式展现在桌面上,如此用户就能够够利用这些应用程序了。既然作为Home应用程序有如此的优先级,那他的特点确实是在文件中指定了如下内容: 这几句代码,使得系统能够检索到该应用程序时Home应用程序,因此那个地址咱们能够直接将这部份代码去除,而在自己设计的Android应用程序文件中指定如上内容,那么就能够够完成Home应用程序的替换,也确实是第一个启动在LCD上的是自己设计的应用程序。另一方面,在调试时发觉系统的锁屏应用程序并无被禁止掉,因此需要做如下源码的修改:在/frame

23、works/base/policy/src/com/android/internal/policy/impl中的函数全局变量mExternallyEnabled=true变成false,如此就能够够再任何情形下,其他app或着显示超时刻,可不能再去自动锁屏。如此通过以上的所有内容,使得整个Android系统从Linux内核启动到Android第一个init进程启动,再到进入Java的世界、启动第一个Home程序,都修改成了项目所需要实现的任务和功能,对产品的自主化打下了良好的基础。5.项目开发总结整个界面移植项目的顺利完成,使得对Android系统的启动有了加倍深刻的了解和应用,对熟悉嵌入式系统的开发和移植有专门大的帮忙。对Android应用程序的开发和调试加倍的熟练。整个项目的开发有较强的客户需求,能够使得终端设备界面加倍美观,进一步提高产品的销售量,符合嵌入式系统设计和运营的理念。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1