基于ARM9的流媒体播放器的设计

上传人:无*** 文档编号:90592363 上传时间:2022-05-15 格式:DOC 页数:37 大小:2.07MB
返回 下载 相关 举报
基于ARM9的流媒体播放器的设计_第1页
第1页 / 共37页
基于ARM9的流媒体播放器的设计_第2页
第2页 / 共37页
基于ARM9的流媒体播放器的设计_第3页
第3页 / 共37页
点击查看更多>>
资源描述
基于嵌入式ARM920T的视频播放器设计摘要嵌入式技术已经成为了后PC时代的核心技术,而基于嵌入式技术的便携式视频播放器由于体积小、重量轻、携带方便等特点,具有极广的市场前景,所以嵌入式视频播放器成为了现在IT行业研究的热点。本文提出了一种基于ARM9处理器,以嵌入式Linux为底层操作平台的嵌入式视频播放器的设计方案。本文首先介绍了视频播放器软硬件的整体设计方案,然后详细介绍了如何通过移植Bootload、Linux内核和制作根文件系统来完成搭建视频播放器底层操作平台的工作,最后通过移植开源的多媒体播放器软件MPlayer和设计相关控件完成了整个视频播放器的设计工作。最后,总结了论文所做的工作,指出了嵌入式播放器所需要进一步解决和完善的问题。关键词:嵌入式,视频播放器,嵌入式Linux,ARM920TDesign of Video Player Based on Embedded ARM920TAbstractEmbedded technology has become the core technology of the post-PC era, and based on embedded technology of portable video player for small volume, light weight, convenient to carry have a very wide prospect of market, and so embedded video player to become a research focus of the IT industry. This paper puts forward a kind of embedded video player design scheme,the scheme is based on the ARM9 processor ,and the Embedded Linux as the underlying operating platform.This paper first introduced the video player overall design scheme of software and hardware ,then detailed in detail how to transplant Bootloader, Linux kernel and make a root file system to complete the work to build a video player underlying operating platform ,finally ,through transplantation of open source multimedia player software MPlayer and design controls to complete the design work of the video player.Finally, summarize the work of this paper, points out the embedded player which need to be solved and perfected problem.Keywords: Embedded,Video player,Embedded Linux,ARM目录第一章 引言11.1研究背景11.2发展状况和研究意义11.3本文组织结构2第二章 播放器总体设计方案介绍32.1 播发器硬件系统架构32.2 播发器软件系统架构3第三章 系统开发平台的构建4 3.1 软件开发环境介绍43.2 Bootloader的移植53.3 Linux内核的移植73.3.1 Linux内核移植步骤73.3.2 Flash驱动的移植83.3.3 LCD驱动的移植113.3.4 UDA1341音频驱动的移植153.4 根文件系统的制作153.4.1 根文件系统介绍163.4.2 根文件系统构建16第四章 视频播放器的设计与实现184.1 MPlayer多媒体播放器介绍184.2 MPlayer的移植194.3播放器按键驱动程序设计204.4播放器控制程序的设计214.5视频播放器的测试23第五章 总结23参考文献24附录A26第一章 引言1.1研究背景伴随着半导体技术、计算机技术、网络技术和软件技术的飞速发展,现如今,我们已经进入了后PC时代。在这一阶段电子产品的发展趋势是智能化、数字化、网络化、便携轻巧、易于操作,而嵌入式技术(Embedded Technology)的发展为人们提供了一个很好的解决方案。所谓嵌入式是指以应用为中心,以计算机技术为基础,软件、硬件可裁剪,适用于应用系统对功能、可靠性、成本、体积、功耗有严格要求的专用计算机系统1。嵌入式技术已经被广泛的应用于科学研究、工程设计、军事领域和文艺商业的方方面面,嵌入式产品更是随处可见,比如消费电子产品、车载电子设备、智能家电、MP3、MP4等。如今人们随着生活水平的提高,对视听享受方面的要求也越来越高,人们不单仅仅满足于在电脑上或电视上欣赏高品质的音视频,也渴望能够随时随地的欣赏音乐观看电影,所以基于嵌入式技术的便携式多媒体播放器也成为了现今IT界研究的热点之一。面对广阔的市场需求,海内外的各大厂商也在积极研发自己的产品以抢占市场。基于这一背景,本文提出了一款基于嵌入式Linux操作系统和ARM处理器的视频播放器设计方案。1.2发展状况和研究意义自从2002年法国的爱可视推出全球第一款MP4多媒体Jukebox以来,基于嵌入式技术的便携式视频播放器已经发展了十年,经过这十年的发展,视频播放器技术已日趋成熟,市面上的产品支持的视频格式也越来越多,功能也越来越强大,很多MP4都集成了上网、游戏、个人事务处理甚至是视频录制、数码照相等功能。目前。很多提供视频播放器处理器的半导体厂商都推出有自己的视频播放器硬件解决方案,这些方案可以概括为以下四类:一类是以德州仪器、飞利浦为代表的基于CPU+DSP芯片的解决方案;一类则是以Intel和AMD为代表的基于通用CPU的解决方案;第三种则是以飞思卡尔和深圳安凯为代表的基于MCU芯片的解决方案;第四种是基于双CPU的解决方案4。在软件方面基本上市面上的便携式视频播放器都带有嵌入式操作系统,主要的操作系统有Vxworks、Palm OS、Windows CE、Linux、Android以及厂家自己开发的操作系统。生产厂商在设计自己的产品时如果采用上述的硬件方案,都要支付一笔不菲的授权费用,而在嵌入式操作系统的选择上也只有Linux是开源免费的,所以产品成本比较高。ARM处理器具有体积小、功耗低、低成本、高性能等优点,并且支持Linux系统6。所以可以选用ARM处理器配合Linux进行产品的设计,这样可以充分的利用Linux开源的特性,根据需要修改和移植一些免费的开源软件,这样不仅能降低产品研发的难度,加快产品的上市时间,还能省去一笔不菲的软硬件授权费用。1.3本文组织结构本文介绍了一款便携式视频播放器的设计工作,该视频播发器是以ARM处理器为硬件开发平台,嵌入式Linux作为操作系统,通过移植Linux上的一款优秀的开源视频播放器软件MPlayer来实现的。本文共分五章,内容安排如下:第一章,引言。介绍了本文的选题背景,当前国内外的发展状况以及研究意义,并对论文的主要工作进行了简单介绍。第二章,播放器总体设计方案介绍。主要介绍播放器的硬件整体架构和软件系统的层次结构。第三章,系统开发平台的构建。本章详细介绍了Linux系统移植到ARM处理器的过程,Linux的移植主要包括三个方面:Booterloader的移植、Linux内核的移植和根文件的制作。第四章,视频播放器的设计与实现。介绍MPlayer的移植过程和播放器相关控件的设计工作。第五章,总结。第二章 播放器总体设计方案介绍2.1 播发器硬件系统架构本设计将选用国嵌公司生产的GQ2440开发板作为硬件平台,GQ2440是一款ARM9开发板。GQ2440采用的是三星公司生产的S3C2440A处理芯片,主频400MHz,最高可达533MHz。图2.1为视频播放器的硬件系统框图,其中S3C2440处理器除了负责对音视频文件进行解码工作外,还要负责对整个视频播放器进行管理和控制;LCD为播放器的视频输出模块;UDA1341芯片为音频的输出模块,负责将经处理器解码后得到的音频数据转换为模拟信号,并传递给麦克风等输出装置;Flash存储器负责对Linux内核、根文件系统、应用软件和视频文件的存储工作;按键用于完成对视频播放器的控制工作。S3C 2440处理器LCD显示音频(UDA1341)SDRAMFLASH电源按键图2.1 播放器硬件系统框架2.2 播发器软件系统架构由于Linux具有源代码开放、可移植性好、资源丰富、可靠、稳定、免费等特点,所以本文将选用嵌入式Linux作为视频播放器的底层操作平台。而视频播器软件是通过移植Linux下一款优秀的开源视频播放软件MPlayer来实现的。如图2.2所示为视频播放器的整个软件系统层次图。其中Linux内核中的设备驱动负责完成LCD显示器、UDA1314声卡芯片等设备的驱动工作,MPlayer为视频播放器,处于应用层,利用其完成对各种音视频文件的解码工作。 硬件平台Linux内核 设备驱动应用层MPlayer图2.2 视频播放器软件系统层次第三章 系统开发平台的构建3.1 软件开发环境介绍在嵌入式系统中,由于硬件资源的有限性、差异性,所以需要开发者根据不同的硬件资源对嵌入式的操作系统作出相应的剪裁,从而定制出能够运行在特定目标平台上的嵌入式操作系统。构建一个嵌入式Linux操作系统主要包括三个方面的工作:移植Bootloader,移植Linux内核,构建Linux根文件系统。由于嵌入式系统的特殊性,其硬件资源十分有限,所以不可能在嵌入式操作系统上安装开发工具,也就不可能直接在嵌入式系统上直接进行软件的开发,所以有了交叉开发模型。交叉开发模式是指先在主机上编写程序,然后通过交叉编译工具编译程序,生成目标平台上可运行的二进制文件,最后下载到具体的目标平台上进行运行7。交叉开发模型如图3.1所示。图3.1 交叉开发模型本文是以红帽公司发行的Red Hat Enterprise Linux 5作为宿主机的操作系统进行相关软件开发的,使用的交叉编译工具链为友善之臂公司提供的arm-linux-gcc-4.3.2。3.2 Bootloader的移植Bootloader是在操作系统运行之前执行的一小段程序,它在系统上电时开始执行,初始化硬件设备、建立内存空间的映射表,从而建立适当的系统软硬件环境,为最终调用操作系统内核做好准备6。可以把Bootloader当成PC机的BIOS来理解。嵌入式系统的硬件存在很大的差异性, Bootloader对硬件有很大的依赖性,并且Bootloader引导的操作系统也可能不同,所以在嵌入式世界中建立一个通用的Bootloader是不可能的,不过由于大部分Bootloader任然具有很多共性,所以某些Bootloader也能支持多种不同架构的处理器和操作系统。例如,U-Boot就可以同时支持PowerPC、ARM、MIPS和X86等体系结构。U-Boot是遵循GPL条款的开放源码项目。而今U-Boot作为一个主流Bootloader,已经成功地被移植到包括PowerPC、ARM、X86、MIPS、NIOS、XScale等主流体系结构上的百种开发板,成为功能最多、灵活性最强,开发性最积极的开源Bootloader。本文将选取U-Boot作为开发板的Bootloader。在开始移植U-Boot之前,应该分析手上的U-Boot源代码已经支持的开发板,选择出硬件配置最接近的开发板作为参考。选择的原则为,首先选择MCU相同的开发板,如果没有,则选择MPU相同的开发板作为参考,这样能大大的降低移植的难度。本文使用的U-Boot版本为u-boot-2009.06,由于U-Boot目前还不支持S3C2440处理器,所以移植的时候可以我们将以SBC2410开发板为参考,移植的工作就是针对S3C2440和s3c2410的不同,以及SBC2410和GQ2440开发板外设的不同做相应的修改。以下为移植的详细步骤:(1)添加新的配置选项。在U-Boot的顶层目录的Makefile文件中定义了所有开发板的配置选项,首先应该为开发板添加新的配置选项,参照SMDK2410的配置,加入如下语句:gq2440_config:unconfig$(MKCONFIG)$(:_config=) arm arm920t gq2440 NULL s3c24x0开发板配置选项中各项的含义如下:arm:表示CPU的架构是ARM体系结构。arm920t:表示CPU的内核类型,对应cpu、arm920t子目录。NULL:这位用于表示开发商者或经销商。S3c24x0:片上系统定义。(2)在board目录下创建开发板目录,并添加文件。在board目录下存放着许多U-Boot支持的开发板的子目录,进行移植时要为具体的开发板建立目录并添加相应文件。这里建立gq2440目录并把用于参考移植的sbc2410x目录下的内容全部拷贝到gq2440目录下,此外还要把拷贝过来的文件内容进行修改,进入gq2440目录,把sbc2410x.c文件重命名为gq2440.c。gq2440.c是本文选用的开发板GQ2440相关的代码,它是由sbc2410x.c直接复制来的所以需要针对GQ2440开发板的硬件特性做修改。(3)为开发板添加新的配置文件。当我们修改好gq2440.c文件后,还应该进入include/configs目录为我们的开发板添加配置文件,可以直接复制一份SBC2410x开发板的配置文件sbc2410x.h,再把它重命名为gq2440.h,然后再根据GQ2440开发板的具体情况进行修改。(4)配置和编译。当完成前面的步骤后就可以进行编译了,执行:make gq2440_config命令将会配置好开发板,接着执行:make CROSS_COMPILE=arm-linux- 命令系统将开始编译U-Boot,编译成功后会得到U-Boot的映像,即可把其下载到开发板上。3.3 Linux内核的移植内核移植主要是指操作系统从一种硬件平台转移到另一种硬件平台上运行。对于嵌入式系统来说,有各种体系结构的处理器平台,使用的外围硬件也不一样。嵌入式Linux严重依赖于具体硬件,所以只要硬件平台有略微差别,也需要做一些移植的工作。3.3.1 Linux内核移植步骤在移植内核前需要在主机上安装好Linux操作系统,以完成对内核代码的配置和编译的工作,本文采用主机安装虚拟机并在虚拟机安装Linux的方法。作为主机,虚拟机安装的是Ret Hat公司发行的 Ret Hat Enterprise Linux 5。本文使用的硬件开发板是GQ2440,GQ2440是参照友善之臂公司设计的Mini2440进行扩展设计的,硬件电路完全相同,自从Linux-2.6-31开始,Linux内核已经官方支持Mini2440,但官方的支持还是很有限。其实Mini2440是参考三星公司的SMDK2440设计而来的,它们的核心电路基本是一样的,而且内核对SMDK2440的支持非常丰富,所以本文将使用Mini2440的配置并以SMDK2440为参考进行移植Linux内核的移植。以下将对移植的步骤进行详细的讲解。(1) 获取源代码。Linux的源代码是开源的,可以到Linux的官方网站: http:/www.kernel.org/上去下载Linux源代码,本文使用的源代码为Linux-2.6-32.2。下载好源代码后我们可以把源代码解压到指定目录,例如执行以下命令我们可以把Linux解压到/home/wusong 目录:tar xvzf linux-2.6-32.2.tar.gz C /home/wusong。解压完后,在/home/wusong目录下将生成一个 Linux-2.6.32.2目录。(2)指定交叉编译变量。Linux内核缺省配置的目标平台是X86的,要使内核能在运行在ARM平台上,需要进入Linux-2.6.32.2目录,修改总目录里的Makefile文件。打开Makefile文件找到以下信息:export KBUILD_BUILDHOST: = $(SUBARCH)ARCH? = $(SUBARCH)CROSS_COMPILE? =把它改为:export KBUILD_BUILDHOST: = $(SUBARCH)ARCH? = armCROSS_COMPILE? = arm-linux-其中,ARCH是指定目标平台为ARM,CROSS_COMPILE是指定交叉编译器,这里指定为系统默认的交叉编译器。(3) 替换BSP。Linux对于特定的硬件平台的软件就叫做BSP (Board Support Package)。我们进入linux-2.6.32.2/arch/arm/mach-s3c2440 目录可以看到有一个mach-mini2440.c文件,这就是外国的开发者对Mini2440设计的BSP,因为它对Mini2440的支持十分有限,所以可以不使用它,把它删掉。而以SMDK2440的BSP为参考,把linux-2.6.32.2/arch/arm/mach-s3c2440 目录下得mach-smdk2440.c复制一份,重命名为mach-mini2440.c,既可使用新的mach-mini2440.c作为GQ2440的BSP。(4)修改BSP。在GQ2440开发板上使用的晶振是12MHz,而SMDK2440使用的是16.9344MHz,所以我们要修改BSP指定的系统时钟源,打开mach-mini2440.c,把static void _init smdk2440_map_io(void)函数内的16934400改为12000000。再把smdk2440_machine_init(void)函数中的smdk_machine_init()函数删掉。这时候可以回到Linux-2.6.32.2的源代码根目录下分别执行如下命令:#make mini2440_defconfig;#make zImage;mini2440_defconfig是官方自带的对mini2440的配置。执行make zImage命令后将开始编译内核,编译完成后将在在arch/arm/boot目录下生成内核文件在zImage。这时把zImage下到开发板里,通过串口终端可以看到内核是能正常启动的,但由于大部分驱动都没添加,也没有根文件系统,所以还无法登陆,开发板上资源也还不能正常使用。所以接下来还应该为具体的硬件移植相应的硬件驱动程序。3.3.2 Flash驱动的移植Flash存储器在嵌入式系统中是必不可少的,它是Bootloader、Linux内核、文件系统和数据的最佳载体。在Linux内核中,引入了MTD(Memory Technology Device,内存技术设备)层为NOR Flash和NAND Flash设备提供统一的接口,从而使得Flash驱动的设计工作大为简化9。在GQ2440开发板上有256M的NAND Flash存储芯片。Linux内核在MTD的下层实现了通用的NAND驱动(主要通过 driver/mtd/nand/nand_base.c文件实现),所以要实现NAND Flash的驱动并不需要太大的工作量。S3C2440的NAND Flash驱动是以platform驱动的形式实现的,在执行probe()函数时,初始化nand_chip实例并运行nand_scan()函数扫描NAND Flash设备,最后调用add_mtd_partitions()函数添加BSP文件中定义的分区表。因此只要在mach-mini2440.c中定义和注册分区表和相关硬件信息即可完成NAND Flash的移植工作。首先应在mach-mini2440.c加入的是NAND Flash的分区表的代码:static struct mtd_partition friendly_arm_default_nand_part = 0 = .name= bootloader,.size= 0x00040000,.offset= 0,1 = .name= param,.offset = 0x00040000,.size= 0x00020000,2 = .name= Kernel,.offset = 0x00060000,.size= 0x00500000,3 = .name= rootfs,.offset = 0x00560000,.size= 1024 * 1024 * 1024, /,4 = .name= nand,.offset = 0x00000000,.size= 1024 * 1024 * 1024, /;接下来还应把开发板的NAND Flash设置表和NAND Flash本身的一些特性注册进内核,分别在mach-mini2440.c中加入以下代码:static struct s3c2410_nand_set friendly_arm_nand_sets = 0 = .name= NAND,.nr_chips= 1,.nr_partitions= ARRAY_SIZE(friendly_arm_default_nand_part),.partitions= friendly_arm_default_nand_part,;static struct s3c2410_platform_nand friendly_arm_nand_info = .tacls= 20,.twrph0= 60,.twrph1= 20,.nr_sets= ARRAY_SIZE(friendly_arm_nand_sets),.sets= friendly_arm_nand_sets,.ignore_unset_ecc = 1,;为了使NAND Flash正常工作,还需把NAND Flash设备注册到系统中,把Nand Flash设备注册到系统只要将其放入mach-mini2440.c中定义的mini2440_devices数组即可。除此外我们还应该把NAND Flash的一些特性传递给驱动,首先在driver/mtd/nand目录下找到NAND Flash的驱动程序:s3c2410.c,打开文件,在函数static int s3c2410_nand_setrate(struct s3c2410_nand_info*info)中添加如下代码:struct s3c2410_platform_nand * plat = info-platform ;再在mach-mini2440.c中的函数static void _init mini2440_machine_init(void)里面添加如下代码:S3c_device_nand.dev.platform_data = &mini2440_nand_info ;最后重新编译内核即可完成了NAND Flash驱动的移植。3.3.3 LCD驱动的移植对嵌入式视频播放器来说。LCD显示器自然是必不可少的,Linux-2.6.32.2内核已经支持S3C2440的LCD控制器驱动,只要在mach-mini2440.c中注册具体的LCD硬件参数即可完成LCD驱动的移植工作。GQ2440开发板使用的是统宝的3.5英寸真彩色TFT液晶屏,分辨率为320x240,带触摸屏的。图3.2为TFT屏的时序图:图3.2 TFT屏时序上图中的VCLK、HSYNC、VSYNC分别为像素时钟信号、行同步信号和帧同步信号,VDEN为数据有效标志信号,VD为图像的数据信号。图3.3给出的是S3C2440的LCD控制器的方框图,S3C2440的LCD控制器是用与传输视频数据和产生必要的控制信号,如VFRAME、VLINE、VCL、VM等,此外还有视频数据端口VD23:0。图3.3 LCD控制器方框图图3.4给出了LCD控制器中应该设置的TFT屏的参数,其中的上边界和下边界即为帧切换的回扫时间,左边界和右边界即为行切换的回扫时间,水平同步和垂直同步分别是行和帧同步本身需要的时间。xres和yres则分别是屏幕的水平和垂直分辨率。图3.4 TFT显示屏参数因为linux-2.6.32.2已经支持S3C2440的LCD控制器驱动,所以只需在mach-mini2440.c中根据具体的LCD显示器填充两个结构体以完成对LCD显示器平台信息的注册就可以了。这两个结构体是s3c2410fb_mach_info和s3c2410_fb_display。其中s3c2410fb_mach_info用于表示LCD显示器的平台信息。s3c2410_fb_display用来表示LCD设备的机器信息,例如LCD显示器的宽度、高度和每个像素占多少位等信息6。因此根据GQ2440开发板使用的LCD显示器的特性在mach-mini2440.c中加入如下代码:#if defined(CONFIG_FB_S3C2410_S320240)#define LCD_WIDTH 320#define LCD_HEIGHT 240#define LCD_PIXCLOCK 100000#define LCD_RIGHT_MARGIN 8#define LCD_LEFT_MARGIN 5#define LCD_HSYNC_LEN 6#define LCD_UPPER_MARGIN 8#define LCD_LOWER_MARGIN 3#define LCD_VSYNC_LEN 10#endif#if defined (LCD_WIDTH)static struct s3c2410fb_display arm2440_lcd_cfg _initdata = #if !defined (LCD_CON5).lcdcon5= S3C2410_LCDCON5_FRM565 | S3C2410_LCDCON5_INVVLINE | S3C2410_LCDCON5_INVVFRAME | S3C2410_LCDCON5_PWREN | S3C2410_LCDCON5_HWSWP,#else.lcdcon5= LCD_CON5,#endif.type= S3C2410_LCDCON1_TFT,.width= LCD_WIDTH,.height= LCD_HEIGHT,.pixclock= LCD_PIXCLOCK,.xres= LCD_WIDTH,.yres= LCD_HEIGHT,.bpp= 16,.left_margin= LCD_LEFT_MARGIN + 1,.right_margin= LCD_RIGHT_MARGIN + 1,.hsync_len= LCD_HSYNC_LEN + 1,.upper_margin= LCD_UPPER_MARGIN + 1,.lower_margin= LCD_LOWER_MARGIN + 1,.vsync_len= LCD_VSYNC_LEN + 1,;static struct s3c2410fb_mach_info arm2440_fb_info _initdata = .displays= &arm2440_lcd_cfg,.num_displays= 1,.default_display = 0,.gpccon = 0xaa955699,.gpccon_mask = 0xffc003cc,.gpcup = 0x0000ffff,.gpcup_mask = 0xffffffff,.gpdcon = 0xaa95aaa1,.gpdcon_mask = 0xffc0fff0,.gpdup = 0x0000faff,.gpdup_mask = 0xffffffff,.lpcsel= 0xf82,;#endif然后还要在driver/video/Kconfig中加入如下配置信息:config FB_S3C2410_T240320Boolean “3.5 inch 240X320 Toppoly LCD”depends on FB_S3C2410Help 3.5 inch 240X320 Toppoly LCD接着可以使用make menuconfig命令进入内核配置,选择相应的选项并退出保存,然后重新编译内核即完成了LCD驱动的移植工作。3.3.4 UDA1341音频驱动的移植GQ2440开发板上使用的是UDA1341音频芯片,Linux-2.6.32.2已经完美的支持UDA1341的驱动,所以只要在mach-mini2440.c文件中注册UDA1341平台设备的控制端口就可以了,在mach-mini2440.c中添加如下代码:static struct s3c24xx_uda134x_platform_data s3c24xx_uda134x_data = .l3_clk = S3C2410_GPB(4),.l3_data = S3C2410_GPB(3),.l3_mode = S3C2410_GPB(2),.model = UDA134X_UDA1341,;static struct platform_device s3c24xx_uda134x = .name = s3c24xx_uda134x,.dev = .platform_data = &s3c24xx_uda134x_data,;此外还要把UDA1341设备添加到mini2440_devices数组中以UDA1341设备注册到内核中。接着我们只要使用make menuconfig命令,选择相应的选项并保存退出,再使用make zImage命令重新编译内核即可。3.4 根文件系统的制作对嵌入式系统来说,除了一个嵌入式操作系统以外,还需要一个嵌入式文件系统用来管理和存储数据、程序。在Linux文件系统结构中,内核层的文件系统实现是必须的,Linux启动时,第一个必须挂载的就是根文件系统8。若系统正常挂载根文件系统,则系统会出错而退出启动,所以要为嵌入式系统构建一个根文件系统。3.4.1 根文件系统介绍根文件系统是Linux操作系统运行需要的一个文件系统。在嵌入式领域,使用哪种文件系统需要根据存储芯片的类型来决定,在嵌入式Linux应用中,主要的存储设备为RAM(DRAM,SDRAM)和ROM(Flash存储器),常用的基于Flash存储设备的文件系统类型包括jffs2、Yaffs、Cramfs、Romfs、Ramdisk等,而作为根文件系统一般会选用Yaffs和Cramfs。Yaffs是第一个为NAND Flash存储器设计的嵌入式文件系统,适用于大容量的存储设备,并且在GPL协议下发布,可免费获得其代码9。Yaffs文件系统有4个主要优点:速度快、占用内存少、不支持压缩和只支持Yaffs存储器。Cramfs是Linux的创始人Linus Torvalds参与开发的一种只读的压缩文件系统,也是基于MTD驱动程序的。在Cramfs文件系统中,每一页(4k)被单独压缩,可随机页访问,其压缩比高达2:1,为嵌入式系统节省大量的Flash存储空间10。由于以上特性,Cramfs在前如斯系统中应用广泛,但由于是只读的属性,也使得用户无法进行扩充。基于以上比较本文将选用yaffs作为根文件系统。根文件系统以树形结构来组织目录和文件的结构,系统上电后,根文件系统被挂接到根目录“/”上。根文件系统应该包含的目录和文件遵循FHS标准(Filesystem Hierarchy Standard,文件系统层次标准),这个标准包含了根文件系统中最少应该包含哪些目录和文件,以及这些目录的组织原则13。按照FHS标准,根文件系统顶层目录至少要包含如下的目录:bin、sbin、boot、root、home、etc、dev、opt、mnt、lib、proc、tmp、usr、var。3.4.2 根文件系统构建根文件系统除了应该以FHS标准的格式组织外,还应该包含一些必要的命令。这些命令提供给用户使用,以使用户能方便地操作系统。一般来说构建根文件系统的方法有两种。一种是下载相应的命令的源代码,并移植到处理器架构平台上。第二种方法是使用一些开源的工具构建根文件系统,例如使用BusyBox、TinyLogin和Embutils。BusyBox是最常使用的一个工具,Busybox可以把常见的linux命令打包编译成一个单一的可执行文件7。本文就将使用BusyBox来构建一个根文件系统,下面将详细讲解如何使用BusyBox构建一个根文件系统。(1)配置编译Busybox。Busybox的源代码可以从上下载。本文选用的版本是Busybox-1.3.2版。先把下载到的代码使用如下命令解压:tar jxvf Busybox-1.3.2.tar.bz2然后进入解压后的Busybox-1.3.2目录执行make menuconfig命令对Busybox进行配置,Busybox的配置菜单如图3.5所示:图3.5 Busybox的配置菜单当选好配置选项后,保存并退出。然后打开Makefile文件找到如下内容:ARCH ? = $(SUBARCH)CROSS_COMPILE ? =这两行是表示需要移植的处理器架构和编译使用的交叉编译器,修改为:ARCH ? = armCROSS_COMPILE ? = arm-linux-然后分别执行如下命令:#make#make install执行make install后,可以看到在Busybox-1.3.2目录下多了个_install目录,入_install目录可以看到有如下目录:bin、linuxrc、sbin、usr。Bin目录和sbin目录中包含了系统命令,usr中包含的是用户命令。(2)创建其他目录和文件。先建立一个系统的根目录比如rootfs,然后把上一步生成的_install目录里的内容拷贝到rootfs目录。根据FHS的标准还要在rootfs目录里面添加如下几个目录:boot、root、home、etc、dev、opt、mnt、lib、proc、tmp、var。此外还要向etc目录中添加一些必要的配置文件,其中:etc/initttab、etc/init.d/tcS和etc/fstab这三个文件是必须的。此外还应该在dev目录下创建一些必要的设备文件。(3)制作根文件系统映像文件。最后还需要使用yaffs文件系统制作工具把rootfs目录生成根文件系统映像文件,才能下载到开发上。制作yaffs文件系统的工具是mkyaffs2image,我们可以从网上下载和安装好,然后使用如下命令:#makeyaffs2image rootfs rootfs.img即可生成rootfs.img根文件系统映像,把rootfs.img下载到开发板Flash存储器的指定位置即可工作。第四章 视频播放器的设计与实现4.1 MPlayer多媒体播放器介绍本设计是以嵌入式Linux作为程序的开发平台的,所以可以充分利用开源代码的特性,对与应用程序的设计可以通过移植目前已有的成熟稳定的开源软件来实现,这样不仅极大的降了低产品的设计难度,提高研发速度,还能大大的降低产品开发的成本。MPlayer是Linux下的一款优秀的开源播放器软件,MPlayer不仅支持X86平台,也支持ARM平台,所以本文选择了移植MPlayer播放器进行移植。MPlayer是一款开源的多媒体播放器,以GNU通用公共许可证发布,MPlayer具有占用资源低、支持格式广泛和输出设备支持多的特点。MPlayer几乎能播放所有流行的音视频格式文件,例如MPEG、AVI、WMV、MOV、FLV、RMVB、VOB、OGG等14 15 16。MPlayer具有广泛的输出设备支持,它可以在X11、Xv、DGA、OpenGl、SVGAlib、fbdev、AAlib、DirectFB下工作,而且也能使用GGI和SDL以及一些低级的硬件相关的驱动模式。4.2 MPlayer的移植要使MPlayer能运行在ARM平台上,需要在宿主机上对MPlayer源代码进行针对性的配置和编译,在进行移植工作之前首先应该获得MPlayer的源代码,可以到MPlayer的官方网站:http:/www.mplayerhq.hu/下载需要的版本代码,本文选用的版本为MPlayer-1.0rc2。下面将详细的介绍MPlayer的移植过程。(1)配置MPlayer。 因为要使MPlayer在ARM平台上工作,所以需要根据硬件进行配置。先把下载的MPlayer源代码解压,进入解压后得到的Mplayer-1.0rc2目录,如果对MPlayer的配置选项不熟悉,可以如下执行命令:#./configure help系统将列出MPlayer的所有配置选项,并附有简要的介绍,了解MPlayer的配置选项后就可以根据自己的需求对MPlayer进行配置了,本文的配置为:./configure -prefix=/home/player -host-cc=gcc -cc=arm-linux-gcc -target=arm -enable-static -disable-win32dll -disable-ivtv -disable-dvdread -disable-dvdread-internal -disable-dvdnav -disable-libdvdcss-internal -enable-fbdev -disable-mencoder -disable-live -disable-mp3lib -enable-mad -with-extraincdir=/opt/toolchains/arm920t-eabi/lib/include -with-extralibdir=/opt/toolchains/arm920t-eabi/lib/lib -enable-libavcodec_a -disable-live 2&1 | tee logfile(2)配置好MPlayer就可以对MPlayer进行编译了,这时候只要执行make命令就可以了。(3)编译好后,执行make install命令将会在指定的目录下生成MPlayer的可执行文件mplayer,只要把mplayer下载到开发板上就能使用它来播放多媒体文件了。当把mplayer下载到开发板后可以先利用串口终端对mplayer进行测试,看看是否能正常播放视频文件,在mplayer所在的目录执行如下命令即可播放相应的视频文件了:#./mplayer filename4.3播放器按键驱动程序设计移植好MPlayer后,还应该为其编写一个控制程序,这样才能方便地操作和使用视频播放器。本文将利用GQ2440上的按键来控制播放器的工作,例如控制视频播放器开始播放或者是停止播放等。要使按键能正常工作,首先还需要为按键编写一个驱动程序。GQ2440开发板有6个按键,它们均从CPU中断引脚直接引出,属于低电平触发,下表为各按键和中断源的对应关系。表4.1 按键和中断源的对应关系按键KEY 1KEY 2KEY 3KEY 4KEY 5KEY 6中断EINT8EINT11EINT13EINT14EINT15EINT19对应GPIOGPG0GPG3GPG5GPG6GPG7GPG11在按键驱动程序中将通过中断来实现按键的检测,按键检测的流程如图4.1所示。在驱动程序中会注册每个按键所对应的中断,每当有按键按下的时候就会进入到中断处理函数,在中断处理函数里将记录具体是哪个按键被按下。应用程序可以通过对按键驱动的设备文件进行读取来获知按键的状态,并根据相应的按键状态进视频播放器进行控制。申请中断等待中断中断到来?初始化记录按键状态NY图4.1 按键检测流程图4.4播放器控制程序的设计视频播放器将通过按键来实现开始播放、暂停播放、继续播放、播放下一个文件和播放上一个文件的功能。图4.2为程序设计的流程图:第一次按下?1键按下?开始读取音视频文件1键按下开始或暂 停开始播放监听按键2键 按下播放下一文件3键按下播放上一文件4键按下停止播放NYNY图4.2 播放器控制程序流程图如流程图所示本视频播放器将使用4个按键进行控制,其中1键用于控制视频播放器的开始和暂停,及第一次按下1键时,视频播放器将播放当前目录的第一个多媒体文件,如果视频播放器正在工作时1键被按下,播放器将暂停当前文件的播放,重新按下1键时可恢复播放。按下2号键时播放器会自动的播放下一个文件,按下4号键则将播放上一文件。4键为停止键,当被按下时播放器将停止工作,需要重新按1键才能开始工作。详细的程序设计请参考参考附件A。4.5视频播放器的测试在前面已经分别移植好了Bootload、Linux内核,构建了根文件系统,并且移植了MPlayer,为视频播放器编写了按键驱动和控制应用程序,我们先把他们分别下到开发板Nand Flash存储器的指定位置,这样就完成了视频播放器的总体的设计工作了,接下来将对播放器的整体功能进行测试。主要测试的是播放器的应用程序能否按要求工作,对于常见的视频格式是否能支持,为此准备了以下几种多媒体格式的文件进行测试:MP4、MP3、AVI、WMV、MOV、。经过测试按键控制程序是能正常工作的,并且对于以上几种视频格式也能正常的播放,总体上达到了视频播放器的设计要求。下图为视频播放器播放视频的画面。图4.3 播放效果第五章 总结本文主要介绍的是基于ARM处理器硬件平台,结合嵌入式Linux的开源特性,通过移植MPlayer多媒体播放器软件设计出一款性能稳定的便携式视频播放器。其中详细的介绍了如何把Linux移植到ARM平台上,这当中包括Bootload的移植,Linux内核的移植和根文件系统的制作等内容,也详细的介绍了如何的移植MPlayer播放器,并且为视频播放器编写了按键控制程序,本文基本完成了一个嵌入式视频播放器的设计工作。虽然本文基本完成了设计要求,但由于个人能力不足,本设计作品还是有很多的不足,最主要的一点是没有为视频播放器设计一个友好的图形用户界面。要完成这一步工作本人还需要进一步的学习。参考文献1 弓雷.ARM嵌入式linux系统开发详解M.北京.清华大学出版社,2010.1:10.2 韦东山.嵌入式Linux应用开发完全手册M.北京.人民邮电出版社,2008.8:3 李伟强.嵌入式多媒体播放器的设计与实现D.吉林大学,2009 .4 郑强.Linux驱动开发入门与实战M.北京.清华大学出版社,2011.1:65.5 张绮文,王廷广.ARM嵌入式应用开发完全自学手册M.北京:电子工业出版社,2009.6 张协国.嵌入式Linux在ARM9上的移植研究与实现D.哈尔滨工程大学,2007 . 7 王新.朱鹏飞.万时华. 家庭智能多媒体终端的设计与应用J.广播与电视术,2011,(09)38-40 .8 白玉霞.基于嵌入式Linux的多媒体信息终端技术的研究与应用D.西安电子科技大学,2006.9 王卫东.嵌入式系统中多媒体播放器的设计与实现D.东南大学,2006 .10 颜回中.基于ARM的AVS-M视频播放器的设计与实现D.暨南大学,2011. 附录A#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define MAX 40#define WORD 40#define FORMAT_NUM 10/支持的视频格式总数i
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 压缩资料 > 基础医学


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!