嵌入式开发与应用BX0901.docx
《嵌入式开发与应用BX0901.docx》由会员分享,可在线阅读,更多相关《嵌入式开发与应用BX0901.docx(14页珍藏版)》请在冰豆网上搜索。
嵌入式开发与应用BX0901
《嵌入式开发与应用》
课程设计报告
题目:
姓名:
班级:
BX0901
学号:
01
指导老师:
范光宇
2012年12月29日
目录
1课程设计题目、目的与要求1
1.1课程设计题目与分析1
1.2课程设计的目的与要求1
2需求分析1
3系统设计1
3.1概要设计1
3.2详细设计1
4编码2
5调试2
6总结2
参考文献2
1课程设计课题、目的与要求
1.1课程设计题目和分析
嵌入式开发与应用Mplayer移植
1.2课程设计目的与要求
本课题所设计的系统要求实现以下功能。
●将MPlayer移植移植到实验箱目标板Linux系统上;
●完成视频或mp3文件的播放。
2需求分析
2.1功能需求分析
计算机和信息技术极大地推动了工业自动化的进程,在媒体播放方面,独占鳌头的则是新兴的开源软件MPlayer。
MPlayer是Linux下最优秀的多媒体播放器之一,它的播放速度最快,支持的文件格式也最多,在X86PC机上运行很稳定,将其移植到精简指令集的嵌入式系统中去,是十分有价值的。
由于MPlayer其开源的特性,使得修改,定制一份具有针对性的MPlayer成为可能。
并随着MPlayer版本的提高,功能与稳定性的不断完善,使用MPlayer作为媒体播放器的产品将成为趋势。
由于开源软件免费的特性,使用MPlayer开发的产品将能够节省软件方面的成本。
因此,对于MPlayer移植的可行性的分析与实现,十分具有现实意义。
2.2性能需求分析
MPlayer能使用众多本地的Xanim,RealPlayer和Win32DLL编解码器,可播放MPEG、VOB、AVI、OGG、VIVO、ASF/WMV、QT/MOV、FLI、RM、NuppelVideo、yuv4mpeg、FILM、RoQ文件。
MPlayer的另一个大的特色是支持广泛的输出设备,它可以在X11、Xv、DGA、OpenGL、SVGAlib、fbdev、Aalib、DirectFB下工作,而且你也能使用GGI和SDL(由此使用它们支持的各种驱动模式)和一些低级的硬件相关的驱动模式。
这个播放器能很稳定地播放被破坏的MPEG文件,并且它能播放WindowsmediaPlayer都打不开的有损坏的AVI文件,甚至,没有索引部分的AVI文件也可以播放。
实现MPlayer的嵌入式移植,主要采用以下的模型,即X86PC机上MPlayer的实现+HBE-MEPOSIII-SV210开发板上的移植。
如图2-1所示:
图2-1MPlayer的嵌入式移植模型
2.3主要课题目标
1、针对MPlayer开源的特性,充分了解MPlayer的运行原理。
2、研究各种视频格式的原理、结构,为MPlayer播放这些视频格式提供支持。
3、实现X86PC机向HBE-MEPOSIII-SV210平台的移植并调试。
2.4系统运行环境
1、系统操作简单,易于使用。
简洁明了的图形化操作界面能够使操作人员很快地熟悉系统的使用,从而提高用户体验。
因此在开发本系统时力求软件的简单易用性,只需点击按钮即可进行Mplayer的控制操作。
2、可靠性好,系统稳定。
为加强用户体验,在简化操作的同时,要保证系统CPU占用率保持在合理的范围,使视频能正常、流畅地播放。
3、可维护性好。
各模块相互独立,便于修改和更新。
4、在实现此系统的过程中尽量遵循开放性标准,提高代码的重用性。
3系统设计
3.1概要设计
1系统体系结构
本系统的体系结构如图3-1所示:
图31.1系统体系结构
2基本设计概念
(1)、Linux系统下MPlayer结构:
完成Linux系统下视频的播放。
采用MPlayer-1.0pre7try2.tar.bz2;
all-20071007.tar.tar;
windows-all-20071007.zip;
Blue-small-1.4.tar.bz2
四个包。
如图3-2所示:
2Linux系统下MPlayer四个包
(2)ARM-Linux系统下MPlayer结构:
配置arm-Linux-gcc编译环境。
采用MPlayer-1.0pre7try2.tar.bz2;
ARM-Linux-gcc-3.3.2.tar.bz2;
all-20071007.tar.tar;
windows-all-20071007.zip;
libmad-0.15.1b.tar.gz;
五个包,如图3-3所示。
3模块设计
(1)功能-模块对照表
此课题分为以下八大模块。
各个模块之间有机组合,形成本课题最终成果。
表3-1模块功能规划表模块名称
模块功能
X86PC端
X86-MPlayer模块
负责X86版本MPlayer的生成与视频文件的播放工作。
视频格式分析模块
根据视频格式的特性,使得MPlayer能够播放多种视频,并优化播放效果。
GUI模块
生成控制MPlayer播放的GUI。
Linux-gcc模块
编译Linux版本主程序。
ARM-Linux端
ARM-MPlayer模块
负责ARM版本MPlayer的生成与视频文件的播放工作。
ARM-Linux-gcc模块
编译ARM版本主程序。
MINICOM模块
X86PC端与ARM-Linux端的通信
内核烧录模块
重新编译并烧录开发析内核,去除开发板内核BUG
3.2详细设计
1.嵌入式开发环境的搭建
嵌入式系统开发环境的建立是开发流程中至关重要的一步,环境搭建不成功后续开发就无从谈起。
搭建嵌入式开发环境的主要过程共包括安装Linux系统,安装嵌入式工具链,配置宿主机相关信息以及和开发板之间进行连接等四个关键步骤。
除此之外,还可以结合实际需求裁剪Linux内核进行重载编译等工作。
具体流程如下图所示:
2模块分析
MP4
(1)简介:
MP4,全称MPEG-4Part14,是一种使用MPEG-4的多媒体电脑档案格式,副档名为.mp4,以储存数码音讯及数码视讯为主。
(2)以下以1.MP4文件为例如图所示:
MP4文件结构
以1.MP4为例分析格式如表所示:
十六进制
含义
66747970
‗ftyp‘:
MP4文件标识
6D6F6F76
‗moov‘:
包含所有元数据的原子
6D766864
‗mvhd‘:
头部信息,定义文件创建,持续时间等信息
696F6473
‗iods‘:
初始化对象描述字
7472616B
‗trak‘:
video轨道原子容器
746B6864
‗tkhd‘:
轨道头部信息
6D646961
‗mdia‘:
video轨道中信息对象的容器
6D646864
‗mdhd‘:
video轨道中媒体数据相关特性
68646C72
‗hdlr‘:
媒体类型
6D696E66
‗minf‘:
video轨道中信息对象的容器,比mdia低一层
6D646174
‗mdat‘:
以下为具体媒体数据
MPlayer模块
(1)编译过程
编译MPlayer需要四个包的安装:
主程序,皮肤,codecs以及wincodecs(win32)。
这四个程序都可以从MPlayer官方网站下载:
www.MPlayerhq.hu。
分别是以下四个文件:
Src:
MPlayer-1.0pre7try2.tar.bz2
Skin:
Blue-small-1.4.tar.bz2
Codecs:
all-20071007.tar.tar
Wincodecs:
windows-all-20071007.zip
把它们放在/usr/software/MPlayer目录下。
安装编码包
安装时先安装编码包,MPlayer的编码包须安装在/usr/lib/codecs/和/usr/lib/wincodecs(win32)中。
37[root@fc4/]#cd/usr/software/MPlayer
[root@fc4MPlayer]#tarvjxfall-20061022.tar.bz2
[root@fc4MPlayer]#mvall-20061022/usr/lib/codecs
[root@fc4MPlayer]#chmod644/usr/lib/codecs/*
[root@fc4MPlayer]#chownroot.root/usr/lib/codecs/*
[root@fc4MPlayer]#unzipwindows-all-20061022
[root@fc4MPlayer]#mvwindows-all-20061022/usr/lib/wincodecs或者#mvwindows-all-20061022/usr/lib/win32
[root@fc4MPlayer]#chmod644/usr/lib/wincodecs/*或者#chmod644/usr/lib/win32/*
[root@fc4MPlayer]#chownroot.root/usr/lib/wincodecs/*或者#chownroot.root/usr/lib/win32/*
安装MPlayer主程序
[root@rh9MPlayer]#bzip2-cdMPlayer-1.0pre7try2.tar.bz2|tarxvf–
[root@rh9MPlayer]#cdMPlayer-1.0pre7try2/
关于配置首先要确定几个rpm的包是否安装了,它们是:
gtk+-1.2.10,gtk+-1.2.10-devel,glib-1.2.10,glib-1.2.10-devel
确认上面这几个包已经安装后,可以开始配置编译了.
[root@fc4MPlayer-1.0pre7try2]#./configure--enable-gui--enable-largefiles--enable-menu--prefix=/usr--with-codecsdir=/usr/lib/codecs/--with-win32libdir=/usr/lib/wincodecs/--confdir=/etc/MPlayer--cc=gcc32
configure后面的参数是为了使用图形界面(即皮肤),以及配置文件位置等等设置的。
需要注意的是,最后--cc=gcc32一定需要,是调用gcc3.2来编译程序。
否则会调用gcc4.0来编译,MPlayer是不能用gcc4.0编译的。
[root@fc4MPlayer-1.0pre7try2]#make
[root@fc4MPlayer-1.0pre7try2]#makeinstall
ARM-MPlayer模块编译过程
(1)解压MPlayer-1.0pre7try2.tar.bz2软件包
(2)编译MPlayer应用程序
(2)配置命令解释:
--cc=ARM-Linux-gcc//使用版本为3.3.2的交叉编译器
--host-cc=gcc//使用系统自带的编译器来编译一些需要在host上执行的中间文件
--enable-Linux-devfs//设置缺省设备为Linux的devfs设备。
--disable-win32//不支持win32DLL设备
--disable-dvdread//不使用libdvdread支持。
--enable-fbdev//支持缓冲帧设备
--disable-mencoder//不支持mencoder编码方式
--enable-libavcodec//支持libavcodec编码方式
--enable-liba52//不使用liba52库40--disable-libmpeg2//不支持libmpeg2库
--enable-static//设定静态连接,不需要动态库。
--disable-mp3lib//不使用mp3库
--disable-live//不支持流媒体
Gcc模块定义
Gcc(GNUCCompiler)是GNU推出的功能强大、性能优越的多平台编译器,是GNU的代表作品之一。
gcc是可以在多种硬体平台上编译出可执行程序的超级编译器,其执行效率与一般的编译器相比平均效率要高20%~30%。
Gcc编译器能将C、C++语言源程序、汇程式化序和目标程序编译、连接成可执行文件,如果没有给出可执行文件的名字,Gcc将生成一个名为a.out的文件。
在Linux系统中,可执行文件没有统一的后缀,系统从文件的属性来区分可执行文件和不可执行文件。
而Gcc则通过后缀来区别输入文件的类别。
.c为后缀的文件,C语言源代码文件;
.a为后缀的文件,是由目标文件构成的档案库文件;
.C,.cc或.cxx为后缀的文件,是C++源代码文件;
.h为后缀的文件,是程序所包含的头文件;
.i为后缀的文件,是已经预处理过的C源代码文件;
.ii为后缀的文件,是已经预处理过的C++源代码文件;
.m为后缀的文件,是Objective-C源代码文件;
.o为后缀的文件,是编译后的目标文件;
.s为后缀的文件,是汇编语言源代码文件;
.S为后缀的文件,是经过预编译的汇编语言源代码文件。
图为GCC具体流程图:
5调试
调试及测试部分应论述所设计的调试及测试方案,调试及测试过程中遇到的问题,分析问题产生的原因,给出处理方法。
具体可以参考文档“测试分析报告(GB8567——88).doc”。
6总结
通过本毕业设计,我有以下几点体会:
第一、有一个明确的系统框架是十分重要的。
只有在理清了各个模块之间的关系中,才能从一个系统级的高度去看待这个课题,才能把握好整个课题的脉络。
第二、在学习新事物的过程中,无形提高了掌握新技术的能力。
在前期查阅资料的过程中,翻阅了大量嵌入式相关的文献。
对嵌入式有了一定的了解后,才能进行课题的研究。
HBE-MEPOSIII-SV210开发板,Linux,内核编译,视频文件格式,都是以前未接触的领域。
通过学习,不仅掌握了知识,更重要的是掌握了学习的方法。
综上所述,通过这次毕业设计,真正体会到了一个计算机工作者的艰辛。
长时间,高强度的作业,锻炼了我的韧性。
一个突破性的进展,一种无法描述的喜悦,一次次找不到答案的无奈,一次次在内心告诉自己要坚持,都是最珍贵的经历。
相信通过这个毕业设计,对我的将来,是非常有借鉴意义的经验。
参考文献
1.《嵌入式开发与应用》实验指导书
2.《嵌入式开发与应用》课程设计指导书
3.张思民.嵌入式系统设计与应用.清华大学出版社2008
4.路莹.嵌入式系统开发技术与应用.清华大学出版社,2011
5.孙纪坤等.嵌入式Linux系统开发技术详解——基于ARM.人民邮电出版社
6.谭浩强.C语言程序设计