基于嵌入式Linux的MP3播放器的设计与实现毕业设计论文

更新时间:2024-06-06 04:42:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

Design and Implementation for a MP3 Player Based on Embeded Linux

A Dissertation Submitted to Nanjing Institute of Technology

For the Academic Degree of Bachelor of Science

By MinXian Zheng

Supervised by

Lecturer AiJun Sha

KangNi College Nanjing Institute of Technology

Jun 2013

摘 要

伴随嵌入式系统的持续发展以及普通用户对多媒体应用越来越旺盛的需求,具有多媒体播放功能设备逐渐成为嵌入式系统中必不可少的重要功能。此毕业设计将设计一个基于嵌入式Linux的MP3播放器,系统硬件采用基于ARM架构的开发板。

论文首先介绍了嵌入式操作系统的最新发展、嵌入式Linux、ARM的特点以及Qt等的相关知识。重点介绍了如何使用开源播放器MPlayer、解码库libmad、Qt Creator工具来开发一个有图形界面的MP3播放器。还介绍了如何移植U-boot、Linux内核、Qt和文件系统,并在移植好之后烧写到开发板之上,得到一个能独立运行在开发板上的MP3播放器。

系统测试表明,该MP3播放器能实现如下功能:“播放”、“暂停”、“停止”、“音量调节”、“退出程序”和“歌曲播放时间”,系统运行稳定,基本达到了设计要求。

关键词:嵌入式Linux;移植;Linux ;Qt

Abstract

Along with the sustainable development of the embedded system and the increasingly demands for multimedia applications, an electronic equipment has a functions of playing songs gradually become indispensably.This design will introduce an implemention for a MP3 player, based on embedded Linux system and an ARM architecture development board.

This Paper introduces the latest development for embedded operating system, embedded Linux, the characteristics of the ARM, Qt and other related knowledges.Especially,this paper displays how to use the open source player MPlayer, a decoding library called libmad, Qt Creator tools to develop a graphical interface of an MP3 player.In this paper, the work of transplant the boot, the Linux kernel, Qt, and file systems is also introduced. After all system images are burned into the development board, one development board can run a MP3 player is obtained.

System test shows that this MP3 player can realize the following function:

\\,\\Control\\and \Songs Playing State\

Keywords: embeded Linux;transplant;Linux;Qt

目 录

第一章 绪 论 .................................................... 1

1.1 课题研究背景和意义 ....................................... 1 1.2 嵌入式系统发展和现状 ..................................... 2

1.2.1 嵌入式操作系统 ..................................... 2 1.2.2 嵌入式Linux和Linux ................................ 3 1.2.3 ARM的介绍 .......................................... 3 1.2.4 Qt的介绍 ........................................... 4 1.3 论文所做的工作和结构 ..................................... 5

1.3.1 论文所做的工作 ..................................... 5 1.3.2 论文结构 ........................................... 6

第二章 系统总体方案设计 ......................................... 7

2.1 系统框架概述 ............................................. 7 2.2 开发板硬件介绍 ........................................... 7

2.2.1 主要硬件及其参数 ................................... 8 2.2.2 接口资源 ........................................... 8 2.2.3 NAND和NOR Flash的相关介绍: ....................... 9 2.2.4 S3C2440的启动方式说明 ............................. 10 2.3 用于本设计MP3播放器的硬件架构 .......................... 10 第三章 嵌入式Linux的开发流程 ................................... 12

3.1 开发环境的搭建概述 ...................................... 12

3.1.1 硬件平台 .......................................... 12 3.1.2 软件平台 .......................................... 12 3.2 安装软件平台和搭建开发环境的步骤 ........................ 12

3.2.1 虚拟化平台的介绍与安装 ............................ 13 3.2.2 RedHat介绍及其在VMware中的安装 ................... 14 3.2.3 安装VMware Tools .................................. 16

3.2.4 安装交叉编译器 .................................... 17 3.3 Bootloader和U-boot的介绍 ........................... 18 3.3.1 烧写U-boot ........................................ 19 3.3.2 向NAND Flash烧写U-boot ........................... 21 3.4 使用FTP下载工具 ........................................ 23 第四章 系统详细设计 ............................................. 24

4.1 关于移植的原理和介绍 .................................... 24 4.2 U-boot、内核和文件系统的移植。 .......................... 24 4.3 开源播放软件MPlayer的安装和移植 ........................ 25

4.3.1 在X86平台上安装MPlayer ........................... 25 4.3.2 向ARM平台移植MPlayer ............................. 26 4.4 设计基于Qt/E的播放器图形 ............................... 30

4.4.1 Qt的实现原理和优势 ................................ 30 4.4.2利用Qt Creator 开发应用程序流程 ................... 32 4.4.3 程序模块间关系图 .................................. 33 4.4.4 程序的编写和实现 .................................. 33 4.4.5 关键代码分析 ...................................... 35 4.4.5 编译和运行 ........................................ 41

第五章 系统调试和解决 ........................................... 43

5.1 系统调试及运行 .......................................... 43 5.2 本次毕业设计中遇到的问题和解决 .......................... 44 第六章 总结与展望 ............................................... 46 参考文献 ........................................................ 47 致谢 ............................................ 错误!未定义书签。 附录 A 源代码 ................................................... 48

附录A.1 main.cpp ............................................ 48 附录A.2 mplayer.h ........................................... 48 附录A.3 mplayer.cpp ......................................... 49

南京工程学院毕业设计说明书(论文)

(2)开发平台的搭建:包括交叉编译环境的建立、环境变量的配置等; (3)掌握Linux内核的移植、开源MP3音乐播放器的移植、用Qt开发的程序及其移植;

(1)了解Bootloader的功能和作用;

(2)掌握嵌入式Linux的程序开发,以及编译、调试方法和步骤。

需要解决的关键性问题:

(1)熟悉嵌入式Linux和其开发流程中涉及的的裁剪和移植; (2)开源播放器MPlayer的移植和播放测试;

(3)用Qt实现对播放器的图形界面的开发,并实现相应的功能。 1.3.2 论文结构 本论文共分六章:

论文的第一章,是绪论部分。主要是对课题的研究目的及意义,课题现

状以及作者所做的工作进行简略的介绍;对嵌入式操作系统进行梳理和介绍和以比较;介绍ARM体系的基本发展和特性;对Qt进行基本的介绍。 第二章主要介绍了本系统的硬件平台。首先是对系统的整体架构进行了介绍;对系统的硬件电路和功能模块进行了介绍。

第三章主要是搭建嵌入式开发平台 。介绍RedHat、VMware Station及

其相关的使用和技巧。

第四章主要是详细MPlayer的编译和移植工作,以及Qt程序的开发和移

植工作。

第五章主要是实验结果和毕业设计过程中遇到的一些问题。

6

第六章是总结与展望,回顾了本次毕业设计及其中的不足之处。

南京工程学院毕业设计说明书(论文)

第二章 系统总体方案设计

2.1 系统框架概述

根据嵌入式MP3媒体播放器系统的需求分析,本文选择了基于ARM 9内核的处理器的开发板作为本系统的实现的平台,下文将对其中硬件设备做介绍。软件平台选择嵌入式Linux操作系统。毕业设计中的开发平台是Red Hat Enterprise Linux 6.3操作系统,其是安装在VMware Station 9.0虚拟化平台中的,可以方便的与Windows操作系统进行数据共享和传输。为了搭建整个开发环境,还需要交叉建立交叉编译环境。播放器系统的整体结构由下到上为:应用层(Qt 、MPlayer)、操作系统层(Linux)、驱动层(音频驱动、液晶屏幕驱动等)和物理层(ARM芯片以及外围电路)。

2.2 开发板硬件介绍

本次毕业设计使用XC2440开发板,如图2.1所示:包括 S3C2440处理器、NAND Flash、NOR Flash、SDRAM、串口、下载接口、音频解码芯片和接口、LCD和触摸屏接口、时钟电路、复位电路等。

7

南京工程学院毕业设计说明书(论文)

图2.1 XC2440开发板

2.2.1 主要硬件及其参数

? CPU:主频为400MHz的三星S3C2440A ? 内存:64M Bytes SDRAM

? 闪存: 256M Bytes Nandflash + 2M Bytes Norflash ? 板载复位电路 ? 板载电源管理芯片

? 内部 RTC(Real-Time Clock,实时时钟)功能 ? 180Pin 管脚以 1.27mm 间距排针形式引出

? 4.3 寸 TFT LCD ,带触摸屏,分辨率 480×272

2.2.2 接口资源

? 1个100M 以太网接口

8

南京工程学院毕业设计说明书(论文)

? 1个RS232 电平串口 ? 2个TTL 电平串口 ? 1个USB HOST 接口 ? 1个USB DEVICE 接口 ? 1个LCD 接口 ? 1个Camera 接口 ? 1个microSD/TF 卡接口

? 2个音频接口,uda1341音频芯片,使用IIS和L3总线,一路立体

声输入,一路立体声输出 ? 1个温度传感器 ? 1个红外接收管 ? 2个电位器 ? 4个用户 LED ? 4个用户按键 ? 1个蜂鸣器 ? 1个JTAG 接口 ? 1个mircoSD/TF 卡接口 ? 板载EEPROM ? 板载RTC供电电池

2.2.3 NAND和NOR Flash的相关介绍:

“NAND”这个名称表示其是由“与非”逻辑门电路构成,而“NOR”则表

明其内部有“或非”逻辑门电路构成。从对数据传输速率来看,NAND要比NOR快很多,因为NAND是按页操作的而NOR是按字节操作的。NOR 是和SRAM一样的可随机存储的,也不需要驱动,因此,其受限于地址线,地址就是有限的,所以容量普遍较小;NOR的优点则表现在读取速度快,而且程序可以直接在芯片内部运行,不需要再读入SDRAM中了。再从价格上来看,NOR的价格更高。从实际应用来看,NOR较多的用在工业领域,特别是用于程序存储等少量数据存储的需求;NAND较多使用再在消费领域中,适合大量数据存储。

9

南京工程学院毕业设计说明书(论文)

U-boot程序不支持从Nand flash启动,但是S3C2440支持从Nand flash

启动。开发板加电后S3C2440将Nand flash的前4k(保存有U-boot的部分功能)中的内容拷贝到SDRAM。这就需要修改U-boot源码,使得U-boot在得到执行权后能够将其自身拷贝到开发板上SDRAM中,以便处理器能够执行U-boot。幸好这些工作已经由开发板厂商完成了,不需要用户自行开发。 2.2.4 S3C2440的启动方式说明

如果把S3C2440配置成从NAND Flash启动(开发板启动开关拔至NAND

端)S3C2440的NAND控制器会自动把NAND flash中的前4K代码数据复制至内部SRAM中(地址为0x40000000),同时还把这块SDRAM的地址映射为0x00000000(CPU总是从0x00000000地址开始运行程序)。

如果将S3C2440配置成从NOR Flash启动(开发板启动开关拔至NOR端),

0x00000000就是NOR Flash实际的起始地址,Norflash中的程序就从这里开始运行,不会涉及到数据拷贝和地址映射。

2.3 用于本设计MP3播放器的硬件架构

该MP3播放器系统总体框图如图2.2 所示:包括基于ARM价格的三星 S3C2440处理器,NAND、SDRAM存储器、音频处理模块、LCD和触摸屏接口、复位按键、J-link接口等。

NOR FLASH NAND FLASH SDRAM

S3C2440 (ARM9) 液晶触摸屏 RJ-45 以太网接口 音频处理模块

图2.2 MP3播放器硬件框图

10

南京工程学院毕业设计说明书(论文)

本方案的说明:采用基于ARM S3C2440的开发板。XC2440开发板采用ARM9系列芯片S3C2440作为核心芯片,搭配4.3英寸液晶触摸屏,以及自带音频解码芯片UDA1341,完全胜任MP3文件的解码工作。NOR Flash用来存放着引导程序U-boot;NAND中除了放着U-boot还有系统内核及文件系统,以及歌曲文件;SDRAM用于存放着系统的运行中产生的数据;液晶触摸屏可以让用户进行操作,播放视频时还可以看到视频;

系统采用嵌入式Linux系统,Linux操作系统具有很多优点,如内核可裁

剪、高度的可移植性等,支持几乎所有的主流芯片,并且还在不断地被移植至新的芯片上。此外采用开源Linux系统,不需要像其它一些系统那样需要缴纳专利授权费用。

11

南京工程学院毕业设计说明书(论文)

第三章 嵌入式Linux的开发流程

3.1 开发环境的搭建概述

3.1.1 硬件平台

ARM开发板,主机,局域网。 3.1.2 软件平台

(1)操作系统

本次毕业设计使用虚拟化平台VMware Station,并在其中建立虚拟机,进

而在该虚拟机之中安装Red Hat Enterprise Linux系统。

(2)交叉编译环境

交叉编译是指:在PC机上编译,在目标板上直接可以执行,不需要重新在目标平台上面进行编译了。交叉编译环境主要包括:目标板操作系统、目标板CPU体系架构、编译器等。

目标板操作系统:经过裁剪的Linux系统。

目标板使用的CPU:基于ARM9架构的ARM920t内核。 编译器:gcc,arm-linux-gcc、makefile工具、库函数等。 3. 主机和开发板之间的通信接口

串口:用串口控制板子。可用DNW软件设置好要控制的串口、波特率。使用串口线也可以传输文件至开发板,但是速率较慢。

USB下载线:可以使用DNW软件下载U-boot、系统内核、文件系统镜像文件到开发板,传输速率较快。

RJ-45以太网接口:设置好开发板、PC网卡的IP地址后,可以用NFS挂载的方式来共享主机需要下载到开发板上编译好的代码,也可以使用FTP、TFTP工具来传输文件,这样速率非常快,并且很方便使用。在配置好网络后,就可以用Telnet客户端控制开发板,这样就可以免去频繁的切换目录了。

3.2 安装软件平台和搭建开发环境的步骤

12

南京工程学院毕业设计说明书(论文)

3.2.1 虚拟化平台的介绍与安装

毕业设计中的开发平台是Linux操作系统,其是安装在VMware Station 9.0这

个虚拟化平台中的,可以方便的与Windows操作系统进行数据共享和传输。目前,Windows操作系统中的很多常用软件并不支持在Linux平台上运行,如果直接安装Linux,那么在纯粹的Linux环境中,将会有很多不便。

VMware Workstation 是一款功能强大的提供桌面虚拟化功能的软件,使

用户可在单一的桌面上同时运行多个操作系统,是进行开发测试部署新的应用、服务、程序等的最佳解决方案。可在一台真实机器上模拟完整的网络环境,其更佳的灵活性与先进的虚拟化技术胜过了市面上其它厂商的的虚拟化软平台。利用该软件,可以建立许多虚拟机。可以认为虚拟机是运行在同主机操作系统平行的底层硬件环境中的。

快照功能介绍和使用:VMware快照功能是虚拟机磁盘文件(VMDK)在某个时间点的复本。万一某些东西出错了,你可以通过使用恢复到快照来保持磁盘文件系统和系统存储。如果你创建了多于一个的虚拟机快照,那么,你将有多个还原点可以用于恢复。

简单说来,其实VMware快照就是将当前VMware虚拟环境里的系统所有环境做个备份(即照个相),让我们虚拟机里的系统出问题之后可以马上恢复。这个功能就有点类似于我们系统备份功能!但是VMware的快照比系统备份功能更强一些,如硬件及一些设置都可以保存下来。

在开发环境中,使用的是root账号,常常进行一些比较危险的操作,为了避免误操作而是得系统受损坏,或者要撤销之前所做的重大更改等。比如为了安装不同版本的多个交叉编译器,就可以使用该功能。在本次毕业设计中,就使用了几次快照进行还原。建立的快照如图3.1所示。

13

南京工程学院毕业设计说明书(论文)

图3.1 本次毕业设计中建立的快照

3.2.2 RedHat介绍及其在VMware中的安装

Linux是一类Unix计算机操作系统的统称。Linux操作系统内核的名字也是“Linux”。Linux操作系统同时也是自由软件运动中和开放源代码社区发展中最著名的例子。严格地来讲,Linux这个词本身只表示Linux内核,但在实际上人们已经习惯了用Linux来形容整个基于Linux内核,并且使用GNU 项目中的各种工具和数据库的操作系统。

Red Hat公司创建于1993年,是世界上最资深的Linux和开放源代码提

供商,同时由Red Hat 公司发行的Red Hat Linux系统也是最获得市场认可的Linux发行版本。Red Hat Linux是商业上运作最成功的一个Linux发行套件,普及程度很高。Red Hat Linux自9.0之后不再发布个人用户版,从此专注于企业级用户:2004年4月30日,Red Hat公司正式停止对Red Hat Linux 9.0版本的支持,标志着Red Hat Linux的正式完结。原本的桌面版Red Hat Linux发行包则与来自民间的Fedora开源社区合并,成为Fedora Core发行版本。Red Hat公司不再开发桌面版的Linux发行包,而将全部力量集中在企业版的开发上,也就是Red Hat Enterprise Linux(如图3.2所示)版本,但仍然公开源码。

14

南京工程学院毕业设计说明书(论文)

图3.2 RedHat Enterprise Linux 6 安装界面截图

2005年10月Red Hat Enterprise Linux 4.0发布。Fedora是Redhat

桌面版本的延续,其是与开源社区合作的。另一个Linux 发行版本CentOS,也是CentOS社区完全使用Red Hat原代码创新编译,仅仅更改LOGO等极少部分。2007年3月,Red Hat Enterprise Linux 5.0发布。2011年11月10日RedHat Enterprise Linux 6.0正式版发布。目前最新版本已经到6.4版本。本次毕业设计使用RedHat Enterprise Linux 6.3版本。

注意点:在安装时需要选择“桌面”,这样开机就有GUI界面了,方便

使用。如图3.3 所示 。RedHat Enterprise Linux的详细的安装过程就不在赘述了。

图3.3 选择“桌面”选项

15

南京工程学院毕业设计说明书(论文)

Red Hat Enterprise Linux系统有一个优点,就是方便安装软件:将安

装光盘或者镜像文件挂载为本地的“软件源”,这样就以直接搜索一些常用的软件包,搜索到之后可以直接安装,不需要再进行下载了。如果这些包需要再安装一些存在依赖关系的软件,就自动安装了。这是比Ubuntu等Linux发行版本的一个优势,至少可以节约开发人员的时间。本次毕业设中,有几次都在编译时报错,并提示缺少如ncurses libraries、autoconf、g++等软件,使用这个方法可以快速安装这些软件。注意,必须要将操作系统光盘镜像文件改名为“Red Hat Enterprise Linux 6.3” 挂载为“软件源”,这样才能成功。 3.2.3 安装VMware Tools

点击“VM”-“Install VMware Tools” ,会自动下载Vmware Tools 软

件(当然前提是正确配置虚拟机的网络,在此就不进行详细的介绍了),作者使用的版本是VMwareTools-9.2.3-1031360.tar.gz

VMware Tools是VMware虚拟机中自带的一种增强工具,是VMware提供

的增强虚拟显卡和硬盘性能、以及同步虚拟机与主机时钟的驱动程序。只有在VMware虚拟机中安装好了VMware Tools,才能实现主机与虚拟机之间的文件共享,同时可支持自由拖拽的功能,鼠标也可在虚拟机与主机之前自由移动(不用再按Ctrl+Alt),且虚拟机屏幕也可实现全屏化。有时需要将Windows下面的文件和Linux共享起来,这样就可以方便的在Linux下面编译运行代码,然后把编译后的数据通过Windows下的工具传到开发板里面。依次点击VMware Setting - Option - Shared Folders,选择“Always Enabled”,并添加准备共享给虚拟机的文件夹。共享文件后,就可以在RedHat的 /mnt/hgfs/目录下看到共享的文件。

下面讲述如何详细装VMware Tools的过程:

(1)点击菜单“VM”选项卡,选择Install vmware tools 这个时候会出来一个可以安装的.gz格式的压缩文件包 (2)cd /media/VMware\\ Tools/ 就会看见这个压缩包

16

南京工程学院毕业设计说明书(论文)

(3)tar -zxvf VMwareTools-9.2.3-1031360.tar.gz /tmp/ 将这个压缩包解压到 /tmp 目录下面 (4)cd /tmp/vmware-tools-distrib/ (5) ./vmware-install.pl

这样就进入安装vmware-tools的界面了,在安装的过程中,会出现许多可选功能让用户进行选择,直接按回车键就可以了。

(6)安装完VM Tool之后,再进入/mnt/hgfs/目录下,就可以看到已经共享的文件了。 3.2.4 安装交叉编译器

本次毕业设计所使用的交叉编译器版本是 arm-linux-gcc-4.1.2 ,其源码包为:arm920t-eabi-4.1.2.tar.gz。

安装和验证的步骤如下:

(1)使用解压命令:tar zxvf arm920t-eabi-4.1.2.tar.gz -C /opt,将该文件解压到/opt下;

(2)接着修改/etc目录下了profile文件来设置环境变量: vi /etc/profile ;

然后向该文件中最后面加入一行:

export PATH=/opt/toolchains/arm920t-eabi/bin:$PATH;

(3)随后用保存退出。执行命令source /etc/profile ,这样就不需要重新启动计算机就使得上述更改立即生效了。

(4)在控制台输入“arm-linux-gcc -v”,出现图3.4中的信息,最后一行信息表明安装成功。

17

南京工程学院毕业设计说明书(论文)

图3.4 查看安装的arm-linux-gcc相关信息

3.3 Bootloader和U-boot的介绍

启动一个计算机系统的第一步操作是加电,随后引导程序运行,读取硬

盘上的内核镜像进而载入RAM,然后才是启动操作系统。Windows系统中的引导程序就是称为BIOS的程序,而在Linux中的引导程序则称为Bootloader。通过这段程序,可以初始化硬件设备。Linux下的的开源Bootloader有GRUB、LILO、Loadlin、RedBoot、U-Boot、BLOB、LinuxBIOS、Etherboot和ROLO等。存储介质如磁盘、NOR Flash或NAND Flash,它们的物理地址起点开始放置着引导程序,即Bootloader程序。

18

南京工程学院毕业设计说明书(论文)

U-Boot是一个通用的引导程序(Universal Boot Loader),其通用性主

要体现在不仅支持对多种嵌入式操作系统的引导,包括Linux、QNX、LynxOS、NetBSD、VxWorks等;而且对多个体系架构的嵌入式处理器提供支持,如ARM、PowerPC、MIPS和XSCALE等。U-Boot是目前ARM平台使用最多、应用最广泛Bootloader了。

Bootloader(即U-boot)的功能:设置并初始化硬件如CPU、RAM 、中

断、时钟、串口;引导操作系统;下载程序、烧写系统、开机LOGO、、驱动管理和闪存分区管理等功能。 3.3.1 烧写U-boot

刚拿到开发板时,由于对烧写不够熟悉,操作错误,令NAND分区中的数

据受破坏,导致无法通过NAND中的U-boot启动。而XC2440开发板的NOR Flash中默认没有U-boot,所以需要重新烧写U-boot这一步骤。

烧写硬件工具:J-Link仿真器(如图3.5所示)。

图3.5 J-Link仿真器连接开发板

19

南京工程学院毕业设计说明书(论文)

烧写软件工具:Setup_JLinkARM_V408i (安装好之后,桌面出现多个快

捷方式,点击一个名为J-Flash ARM 的快捷方式)。

烧写流程:连接线路;由于J-Link仿真器只能烧写NOR Flash(J-TAG仿

真器才是既能烧写NOR Flash,又能烧写NAND Flash的,但是其价格更贵),所以先向NOR中烧U-boot,再从NOR启动U-boot,进而向NAND烧写U-boot。

烧写关键步骤的说明:打开J-Flash ARM——“Option”菜单——“Project

Setting”,进入工程配置界面。有一项对CPU的配置,如图3.6所示,其中的“Core”选项选择ARM9 ;“Check core ID”中填写 “00324090”,该数字表示的是S3C2440这一CPU的ID号;“Use target RAM Addr”表示SDRAM的起始地址为40000000;“Use following init sequence”表示将要设置SDRAM的初始化序列,该参数用来设置一些寄存器,如看门狗定时器控制寄存器、中断屏蔽寄存器、CPU时钟分频控制寄存器等。

图3.6 对CPU的配置

20

南京工程学院毕业设计说明书(论文)

设置好相关参数之后,在“File”菜单中,选择“Open”,打开要烧写的镜像文件,这里我们烧写 U-boot.bin 文件。目的地为NOR Flash。最终出现如图3.7的提示信息,表明烧写成功。

图3.7 烧写成功的提示信息

3.3.2 向NAND Flash烧写U-boot

首先将开关启动选择开关拨至“NOR”,从NOR启动,从DNW软件界面可

以看到U-boot的启动界面(如图3.8),注意方框中的信息,表明启动介质为NOR Flash。

图3.8 由NOR启动,U-boot界面

21

南京工程学院毕业设计说明书(论文)

从键盘输入“1”,按回车,向NAND进行烧写U-boot的工作,如图3.9所示。

图3.9 向NAND进行烧写U-boot

然后将开发板启动方式选择开关拨至“NAND”,加电启动,从终端中可以看到U-boot界面出现了“NandFlash Booting”的提示信息。如图3.10。

22

南京工程学院毕业设计说明书(论文)

图3.10 从NAND Flash启动后的界面

之后选择“6”;先把NAND格式化;完成后再选择“2”来烧写Linux内

核;完成之后选择 “3”进行文件系统的烧写。这些步骤就不进行详细叙述了。

3.4 使用FTP下载工具

使用串口线下载速率较低,每秒只能传输几十KB的数据;使用下载线传输的话,速率为每秒500KB左右;通过使用网线搭建局域网传输环境,传输的速率在1.5MB/s左右。可以看出使用网线进行传输,可以节约很多时间,并且操作方便(安装64位Windows系统的计算机由于不能安装下载线的驱动程序,导致无法正常使用下载线;除此之外下载线还不能传输普通文件)。在局域网环境中,使用“8UFTP”这个工具软件可以在开发板同PC之间方便地传输文件。

23

南京工程学院毕业设计说明书(论文)

第四章 系统详细设计

4.1 关于移植的原理和介绍

使某个平台的代码运行在其他平台上过程称为移植。根据实际的硬件平台,修改Linux内核目录中的Makefile文件、配置文件以及某些源代码,使之可以运行在ARM,PowerPC,X86、MIPS等平台上。本毕业设计中的软件,是需要移植到基于ARM9内核的三星S3C2440平台的。Makefile的作用就是根据./configure命令的情况,构造出需要编译的源文件列表,然后分别编译并把目标代码链接到一起,最终形成目标二进制镜像文件。

简单地说移植就是根据用户自行选择的硬件平台进行重新修改和编译源

代码,进而使源代码支持相应的硬件,使编译后的文件(如系统内核、文件系统、应用程序等)可以在该硬件平台上运行。假如源代码中缺少某对些硬件的支持,就可以根据自身需要进行相应的开发,并加入到源码中编译,最终实现对该硬件的支持。

构建一个完整的嵌入式系统涉及到的移植工作包含U-boot移植、内核移

植、文件系统移植以及Qt的移植。

4.2 U-boot、内核和文件系统的移植。

在U-boot是一种用于嵌入式系统中的开机引导程序。在移植工作中,要改动的工作主要有修改makefile文件、加入针对CPU的时钟配置、修改Norflash相关参数、加入对启动zImage内核镜像的支持等。

内核移植的主要工作主要是修改与CPU体系结构相关部分,即启动代码的修改,内核的链接及装入,参数传递,内核引导等几个部分。主要对下面这些进行修改:启动参数、Makefile文件,开发驱动程序等。还有其他需要修改的参数,比如根据开发板对机器码进行修改、指定闪存参数(例如关闭ECC校验)、设置晶振频率等。内核移植通常使用图形化界面工具“menuconfig”进行快速的操作。

根文件系统以树型结构组织,包含内核和系统管理所需要的各种文件和

程序即/bin、/sbin、/root、/lib、/tmp、/usr、/home、/mnt等文件夹。文

24

南京工程学院毕业设计说明书(论文)

件系统的移植就是要产生匹配开发板的这些文件夹。嵌入式Linux系统中,通常使用支持图形化操作的Busybox工具来移植根文件系统。为了支持Qt,在根文件系统的移植工作中还要加上Qt相关的一些配置,如移植tslib以支持使用触摸屏的Qt程序、qmake配置参数的设定、添加字体库等。

Bootloader的移植、内核和驱动的移植、文件系统的移植以及Qt的移植过程并不是本毕业设计的重点,本次毕业设计直接使用厂商提供的U-boot、内核镜像、支持QT/E的文件系统。本次设计,首要的一点是学习嵌入式Linux的开发流程,不需要太过于拘泥于这些细节的实现上,因为这些细节都是由厂商开发和完成的,用户在其上直接进行二次开发即可。

4.3 开源播放软件MPlayer的安装和移植

4.3.1 在X86平台上安装MPlayer

MPEG-1,MPEG-2标准中定义的第1,2,3层的音频压缩是流行的有损音频压缩方式[6]。利用第三层音频压缩方法,所产生的音乐文件就是我们生活中所常见的“MP3”。MPlayer是一款开源的媒体播放器,可以在Linux、UNIX、Mac OS X 甚至Windows操作系统下使用。该播放器的开发者们称其为MPlayer - The Movie Player,从其名称中就可以看出该播放器最初目的是是用于播放视频的,MPlayer也可以播放音频文件,比如MP3格式的音频文件。为了实现MP3音乐文件的播放,还需要解码库才能正常播放MP3音乐文件,比如libmad就是一个开源MP3解码库,对MP3解码算法做了很多优化。下面是详细的安装过程:

(1)准备源码包:MPlayer-1.0rc4.tar.gz;

(2)安装过程:将MPlayer-1.0rc4.tar.gz源码包复制到/opt目录下,在控制台中进入/opt目录,输入tar MPlayer-1.0rc4.tar.gz 命令进行解压。

(3)然后依次输入下面的三条命令:

./configure make

make install

(4)最终出现图4.1的提示信息,表明在PC上安装可在X86平台下运行的MPlayer最终成功安装。

25

南京工程学院毕业设计说明书(论文)

图4.1 安装Mplayer 成功

此时在MPlayer-1.0rc4目录下会生成可执行文件,名为“mplayer”,

该文件就是安装成功后的Mplayer 。将歌曲“1.mp3”复制到/opt/目录下,输入如下命令:mplayer /opt/songs/1.mp3 ,就进入播放界面了,如图4.2所示。如果没有声音的话,在播放命令之前输入如下命令:modprobe snd_pcm_oss,然后再进行播放。如果还是不出声音,请关注下VMware音频设置以及操作系统音频设定是否正确。

图4.2 用X86平台的MPlayer播放音乐

4.3.2 向ARM平台移植MPlayer

26

南京工程学院毕业设计说明书(论文)

MPlayer的移植过程主要包括源代码的获取,库的安装,详细过程如下所示:

(1)下载好下面的源代码:

MPlay-0.15.2b.tar.gz libid3tag-0.15.2b.tar.gz libmad-0.15.2b.tar.gz

(2)编译安装libid3tag-0.15.2b。

解压libid3tag-0.15.2b.tar.gz软件包,会生成libid3tag-0.15.2b目

录。进入该目录,在该目录下使用./configure命令配置这些库编译可选项,例如:指定交叉编译器、编译选项、打开生成静态库选项(--disable-shared表示不生成动态库)、关闭调试和安装路径等,然后用ARM交叉编译工具交叉编译。详细地命令如下:

tar xzvf libmad-0.15.1b.tar.gz cd libmad-0.15.1b ./configure

CC=arm-linux-gcc

--host=arm-linux

--disable-shared --disable-debugging --prefix=/tmp/libid3tag/id3

make

make install

完成后会在/tmp/libid3tag/id3/目录下生成包含头文件和库文件的文件夹include和lib。其中include文件夹下的头文件是“id3tag.h”; lib文件夹下的静态库文件是“libid3tag.a”

(4) 编译安装libmad-0.15.2b。

解压libmad-0.15.2b.tar.gz源码包之后,会在当前目录下生成的libmad-0.15.2b目录。进入该目录,在该目录下使用./configure命令配置这些库编译可选项,例如:指定交叉编译器、编译选项、生成静态库、关闭调试和安装路径等,然后用ARM交叉编译工具交叉编译libid3。详细的命令如下:

tar xzvf libmad-0.15.1b.tar.gz cd libmad-0.15.1b

./configure CC=arm-linux-gcc --host=arm-linux --disable-shared

27

南京工程学院毕业设计说明书(论文)

--disable-debugging --prefix=/tmp/libmad/mad

make

make install

完成后在/tmp/libmad/mad/目录下生成包含头文件和库文件的文件夹include和lib。其中include文件夹下的头文件是“mad.h”;lib文件夹下的静态库文件是“libmad.a”。为了方便下一步对MPlayer的编译,将一小节中生成的id3tag.h、libid3tag.a文件也对应地放到/tmp/libmad/mad/目录下的include和lib目录下面。

(5)编译安装MPlayer的步骤

将MPlayer-1.0rc4.tar.gz 源码包,放到 linux下, 解压 MPlayer 源

码tar xzvf MPlayer-1.0rc4.tar.gz;

在解压后的MPlayer 源码目录创建一个脚本文件,名为

“mplayer_config_file”。该文件的实质是对./congigure命令中的那些编译参数进行指定:vim mplayer_config_file ,向其中增加如下内容:

./configure \\

--prefix=/data/lost+found/mplayer_install \\ --disable-mp3lib \\ --disable-armv5te \\ --disable-armv6 \\ --disable-mencoder \\ --disable-iconv \\ --disable-live \\ --disable-dvdnav \\ --disable-dvdread \\

--disable-dvdread-internal \\ --disable-libdvdcss-internal \\ --enable-libavcodec_a \\

--enable-libavcodec_mpegaudio_hp \\ --disable-ivtv \\

28

南京工程学院毕业设计说明书(论文)

--enable-mad \\ --enable-fbdev \\ --enable-ossaudio \\ --enable-alsa \\

--enable-cross-compile \\ --cc=arm-linux-gcc \\ --host-cc=gcc \\ --target=arm-linux \\ --enable-static \\ --disable-network \\ --disable-inet6 \\ --disable-ftp \\ --disable-win32dll \\ --disable-vcd \\ --disable-tv \\

--extra-cflags=-I/tmp/libmad/mad/include \\ --extra-ldflags=-L/tmp/libmad/mad/lib \\ 2>&1 |tee logfile

保存后退出。(说明:第二行的--disable-mp3lib ,表示使编译的时候

不包含mp3lib解码器,因为本次毕业设计中的MPlayer播放器将使用解码性能更优秀的mad解码器,即15行的--enable-mad 参数。)

依次执行下面的命令:

./mplayer_config_file make make make install

(6)拷贝MPlayer可执行文件

将编译成功后生成的可执行文件mplayer放在开发板的/usr/bin目录下。

29

南京工程学院毕业设计说明书(论文)

方法:可以通过Windows系统中的ftp工具等,比如8uftp软件。然后将将编译好的可执行程序mplayer 复制到文件系统中的/usr/bin 目录下,并使用如下命令对其增加权限:

chmod 777 mplayer

(6)mplayer在开发板上的测试

进入/usr/bin在开发板终端输入: mplayer –ac mad

/var/ftp/pub/songs/2.mp3”,可以听到歌曲了。(说明,-ac mad 表示使用mad库来解码),如图4.3所示。

图4.3 使用mplayer播放MP3格式的歌曲

4.4 设计基于Qt/E的播放器图形

4.4.1 Qt的实现原理和优势

Qt/Embedded(简称Qt/E)是专门面向嵌入式产品中设计图形用户界面的

工具软件,简单说来的话QtE就是Qt的嵌入式版本。

使用Qt/E的话,开发者可以方便的移植程序到不同的平台上,主要的工

作就是重新编译代码,完全不需要对代码进行任何的修改,这是Qt移植同Bootloader移植、Linux内核移植、文件系统移植的最大区别,而这原因在于Qt是建立在应用层之上的,不需要同硬件直接接触,这样也减少了程序开发员的工作量。

30

南京工程学院毕业设计说明书(论文)

Qt提供了信号与插槽的组件化编程机制和多种多样的图形设计、事件处

理、进程控制的类[7]。而connect则是Qt中最重要的特征,其在Qt对象之间建立了一种单向的连接。每一个 Qt对象都拥有信号(Signals)和槽(Slots) , 信号用于发送消息,而槽则被用来接收消息。

从更高层次来看,信号与插槽是Qt自行定义的一种高级接口,应用于对

象之间的通信,独立于标准的C/C++语言。 在Qt中,信号和槽取代了C/C++语言中的函数和指针 [8]。编程时,信号(槽)之间会通过相互关联来实现类似于C/C++语言中的函数调用和交互。

基于Qt的MP3播放器的界面设计主要有以下两个方面:a.桌面突变的实现。Qt中有各种图形和按钮的类。Qt Creator是Qt自带的GUI设计工具,可以设置按钮的一些相关信息,如按钮位置,按钮大小,以及按钮名称和样式等。b.外部事件的响应。信号和槽是 QT 自行定义的一种通信机制,它独立于标准的 C/C++ 语言,因此要正确的处理信号和槽,须借助Qt中的MOC(Meta Object Compiler)工具。该工具是一个 C++ 预处理程序,它为高层次的事件处理自动生成所需要的附加代码。Qt/E体系结构如图4.4所示,深色斜体标出的三个层次代表Qt/E。

上层应用程序 Qt/E 提供的API Qt/E 内核 图形抽象层 FrameBuffer层 输入抽象层 输入设备驱动 操作系统内核 引导程序 底层硬件 图4.4 Qt/E体系结构

Qt/E作为GUI提供了用户界面,利用内核帧缓冲来向LCD屏幕输出,消

除对特定架构的依赖,从而保证可移植性,应用程序可以通过一组事先就定义

31

南京工程学院毕业设计说明书(论文)

好的接口来直接操作显示设备。比如,本次毕业设计众的MP3播放器这个个上层应用程序,可以方便地移植到不同平台。

Qt/E同Qt X11的架构是不同的,会直接操作Frame Buffer。Frame Buffer

实际上是对图形硬件设备的抽象,即将显示设备抽象为帧缓冲区。

QT/E可以直接操纵内核FrameBuffer,将解码后的数据通过FrameBuffer直接送到嵌入式Linux系统的帧缓冲区,这样LCD屏幕上就会显示相关的文字、图片或者视频了。

4.4.2利用Qt Creator 开发应用程序流程

Qt Creator 设计器是一个提供GUI的设计工具。基于 Qt/E的图形用户

界面应用程序的基本开发流程[9]如图 4.5 所示

利用Qt Creator创建工程 利用Qt Creator创建主窗体 生成头文件和实现文件 编写主函数 编辑工程生成Makefile文件 编译链接工程文件

图4.5利用Qt开发GUI程序的流程

使用make这个命令的相关功能可以进行编译过程的命令简化。make会在当前目录下搜索makefile这个文本文件,而makefile里面记录了源码如何编译的详细信息[10]。

生成Makefile文件由开发软件自动实现,不需用户手动生成。

32

南京工程学院毕业设计说明书(论文)

4.4.3 程序模块间关系图

本次毕业设计的MP3播放器模块间的工作关系如图4.6所示。

图形界面 输入和输出 解码库 图形用户接口 图4.6 有图形操作界面的播放器各模块间的关系图

4.4.4 程序的编写和实现

(1)建立工程文件

在桌面建立名为“player”,将在该文件夹中建立名为“Mplayer.pro”

的工程文件,同时所用的其它中间文件都保存在这个文件夹里面。如图4.7、4.8所示。

图4.7 建立工程

33

南京工程学院毕业设计说明书(论文)

图4.8指定文件名称

在本程序中,作者自行定义了一个名为“mplayer”的类,其继承于QWidget

类。QWidget类是所有GUI对象的基类。可以说,Qt极大部分的UI相关的类都从QWidget类继承过来的,而QWidget则继承于QObject。QObject类是所有Qt对象的基类,是Qt对象模型的中心。这个模型的核心就是之前所介绍的信号和槽机制。

(2)创建主窗体

Qt Creator创建主窗体,需要使用QSlider类、QPushButton类、QSinBox

类以及QWidget类。QWidget 类代表一般的窗口,其他窗口类都是从QWidget 类继承出来的,而QWidget类则同时继承了QObject类和QPaintDevice类,也就是说,窗口类都是Qt对象类。界面程序设计中需要使用2次QWidget类,一次用于整个界面,一次用于显示视频的窗口。如图4.9、4.10所示。各图标有对应的png格式的图片(放在/images目录中,这些图片是委托熟悉美工朋友制作的),在编译后的界面中的按钮会有所体现。

34

南京工程学院毕业设计说明书(论文)

图4.9 主窗体的设计

图4.10 主窗体中各对象及类

4.4.5 关键代码分析

mplayer.cpp文件的代码中实现播放器“开始播放”、暂停播放”、“停

止播放”、“静音”、“音量调节”、“播放进度”这些关键功能。在头文件mplayer.h中对信号和槽函数进行声明。

(1)从QWidget类继承的Mplayer类中存在一个以“Mplayer”命名的成

员。在该Mplayer内部实现界面、进度条等的初始化。通过定义一个 QProcess 对象调用已编译好的Mplayer播放器,在下文进一步叙述。 Mplayer::Mplayer(QWidget *parent):QWidget(parent)

setupUi(this);

//初始化界面

35

本文来源:https://www.bwwdw.com/article/bld6.html

Top