毕业设计(论文)基于ARM的MP3播放器设计.doc

上传人:laozhun 文档编号:3978502 上传时间:2023-03-30 格式:DOC 页数:41 大小:348.50KB
返回 下载 相关 举报
毕业设计(论文)基于ARM的MP3播放器设计.doc_第1页
第1页 / 共41页
毕业设计(论文)基于ARM的MP3播放器设计.doc_第2页
第2页 / 共41页
毕业设计(论文)基于ARM的MP3播放器设计.doc_第3页
第3页 / 共41页
毕业设计(论文)基于ARM的MP3播放器设计.doc_第4页
第4页 / 共41页
毕业设计(论文)基于ARM的MP3播放器设计.doc_第5页
第5页 / 共41页
点击查看更多>>
资源描述

《毕业设计(论文)基于ARM的MP3播放器设计.doc》由会员分享,可在线阅读,更多相关《毕业设计(论文)基于ARM的MP3播放器设计.doc(41页珍藏版)》请在三一办公上搜索。

1、目 录摘 要IABSTRACTII引 言11MP3播放器概述31.1MP3播放器的工作原理31.2MP3的文件结构41.3MP3播放器的历史与发展41.4MP3播放器设计的可行性分析51.4.1技术可行性分析51.4.2经济可行性分析62系统硬件平台介绍72.1系统硬件特性介绍72.1.1ARM9处理器介绍72.1.2RISC微处理器S3C2440介绍72.2硬件平台工作原理83平台搭建的总体设计103.1嵌入式系统概述103.2软件平台的设计103.3U-BOOT分析与移植113.3.1BootLoader简介113.3.2U-BOOT启动流程分析113.3.3U-BOOT的详细设计123.

2、4Linux内核分析与文件系统移植173.4.1Linux启动过程173.4.2Linux内核的移植173.5文件系统的设计183.5.1Jffs2文件系统介绍193.5.2文件系统的制作194MP3播放器的设计与实现224.1播放模块的设计224.1.1声卡驱动的设计224.1.2MADPLAY播放器的移植234.2同步歌词模块的设计254.3USB驱动模块的设计264.4按键控制模块的设计314.4.1创建歌曲列表314.4.2播放MP3文件314.4.3暂停播放334.4.4停止播放334.4.5歌曲切换335MP3播放器的界面设计355.1界面设计工具的选择355.2图形界面的设计35

3、致 谢39参考文献40引 言随着计算机技术的发展和微处理器工艺的改进,社会正在一天天的步入信息化,嵌入式系统的应用也越来越广泛,计算机和网络已经全面渗透到了我们日常生活中的每个角落,任何人都可以拥有从小到大的各种采用了嵌入式技术的产品,小到MP3,PDA等微型数字化产品,大到许多的家用电器,车载设备等,嵌入式系统及其应用在电子市场占有了一定的份额,并起了一定的主导作用。由于嵌入式系统是建立在特定的硬件系统之上,系统的开发和硬件的关系十分密切,且入市开发板为开发者提供了丰富的设为设备和接口,通过接口可以调试应用程序和打印输出调试信息。嵌入式开发板已经成为了嵌入式开发和移植的有力工具。基于ARM内

4、核的微控制器芯片不但占据了高端微控制器市场的大部分是成份额,同时也逐渐向低端微控制器应用领域扩展,ARM微控制器的低功耗、高性价比使其以70%左右的市场占有率成为嵌入式解决方案中主流处理器。Linux近几年在嵌入式领域异军突起,成为了非常有潜力的操作系统。Linux操作系统的代码的开放性、系统的稳定性、强大的网络功能以及优秀的文件系统支持,在嵌入式设备特别是网络设备中得到了广泛的应用。因此,选择Linux操作系统作为设计的操作系统。随着计算机和多媒体技术的不断发展以及个人计算机的普及,各种各样的媒体文件、媒体播放器层出不穷,而MP3(MPEG Audio Layer3)格式以其体积小、音质也有

5、保证的特点成为使用最为广泛的音频格式,得到了绝大多数软件和硬件媒体播放器的支持。如今,软件市场上的媒体播放器层出不穷,如:酷狗音乐、千千静听、QQ音乐播放器等。高音质播放和低内存消耗是各种媒体播放器所追求的目标。嵌入式系统具有巨大的市场需求前景,可广泛应用于移动计算设备、网络设备、信息电器、工控设备、车载设备、娱乐设施、仪器仪表等场合。而MP3具有巨大的市场需求。为适应当前发展趋势,开发基于嵌入式LINUX的MP3音乐播放器系统。为了对嵌入式系统的开发过程能够熟练的掌握,学习了一些有关嵌入式系统开发技术的方法,掌握了开发的基本步骤。在设计时构建了一个ARM9开发平台、使用嵌入式Linux操作系

6、统进行了具体的设计,最终实现了在ARM上的简易MP3播放器的设计。本设计探索性地设计实现了一个支持LRC歌词显示的MP3播放器的软件。该播放器实现了在播放MP3的同时实时地显示LRC歌词,并实现歌曲的暂停、停止以及歌曲的切换功能。论文首先介绍了嵌入式系统以及开发环境,然后,介绍了一些设计过程中的准备工作,接着介绍了MP3播放器的开发平台,阐述了系统各功能的详细设计与实现。最后,论文介绍了系统的运行环境及运行效果,并对各个部分进行了图示说明。最后介绍了本设计的设计目标,划分并设计了系统功能模块,包括:系统初始化模块、播放模块、同步歌词模块、按键切换模块等,设计了媒体文件和歌词文件的处理流程。1

7、MP3播放器概述MP3的全称应为MPEG1 Layer-3音频文件,MPEG(Moving Picture Experts Group)在汉语中译为活动图像专家组,特指活动影音压缩标准,MPEG音频文件是MPEG1标准中的声音部分,也叫MPEG音频层,它根据压缩质量和编码复杂程度划分为三层,即Layer-1、Layer2、Layer3,且分别对应MP1、MP2、MP3这三种声音文件,并根据不同的用途,使用不同层次的编码。1.1 MP3播放器的工作原理MP3播放器是利用数字信号处理器DSP(Digital Sign Processer)来完成处理传输和解码MP3文件的任务的。DSP掌管随身听的数

8、据传输,设备接口控制,文件解码回放等活动。DSP能够在非常短的时间里完成多种处理任务,而且此过程所消耗的能量极少,这也是它适合于便携式播放器的一个显著特点。 一个完整MP3播放机要分几个部分:中央处理器、解码器、存储设备、主机通讯端口、音频DAC和功放、显示界面和控制键。其中中央处理器和解码器是整个系统的核心。这里的中央处理器我们通常称为MCU,简称单片机。它运行MP3的整个控制程序,也称为fireware,或者固件程序。它控制了MP3的各个部件的工作,例如从存储设备读取数据送到解码器解码;与主机连接时完成与主机的数据交换;接收控制按键的操作,显示系统运行状态等。解码器是芯片中的一个硬件模块,

9、或者说是硬件解码,它可以直接完成各种格式的MP3数据流的解码操作,并输出PCM或I2S格式的数字音频信号。 存储设备是MP3播放机的重要部分,通常的MP3随身听都是采用半导体存储器(FLASH MEMORY)或者硬盘(HDD)作为储存设备的。它通过接受储存主机通讯端口传来的数据,回放的时候MCU读取存储器中的数据并送到解码器。数据的存储是要有一定格式的,众所周知,PC管理磁盘数据是以文件形式,MP3也不例外,最常用的办法就是直接利用PC的文件系统来管理存储器。 主机通讯端口是MP3播放器与PC机之间交换数据的重要途径,PC机通过该端口操作MP3播放器存储设备中的数据,对数据进行拷贝、删除、复制

10、文件等操作。目前最广泛使用的是USB总线,并且遵循微软定义的大容量移动存储协议规范,将MP3播放器作为主机的一个移动存储设备。这里需要遵循几个规范:1、USB通信协议,2、大容量移动存储器规范,3、SCSI协议。 音频DAC是将数字音频信号转换成模拟音频信号,以推动耳机、功放等模拟音响设备。在这里,本文需要介绍一下数字音频信号。数字音频信号是相对模拟音频信号来说的。我们知道声音的本质是波,人说能听到的声音的频率在20Hz到20kHz之间,称为声波。模拟信号对波的表示是连续的函数特性,基本的原理是不同频率和振幅的波叠加在一起。数字音频信号是对模拟信号的一种量化,典型方法是对时间坐标按相等的时间间

11、隔做采样,对振幅做量化。单位时间内的采样次数称为采样频率。这样一段声波就可以被数字化后变成一串数值,每个数值对应相应抽样点的振幅值,按顺序将这些数字排列起来就是数字音频信号了。这是ADC(模拟-数字转换)过程,DAC(数字-模拟转换)过程相反,将连续的数字按采样时候的频率顺序转换成对应的电压。MP3解码器解码后的信息属于数字音频信号(数字音频信号有不同的格式,最常用的是PCM和I2S两种),需要通过DAC转换器变成模拟信号才能推动功放,被人耳所识别。 MP3播放器的显示设备通常采用LCD或者OLED等来显示系统的工作状态。控制键盘通常是按钮开关。键盘和显示设备合起来构成了MP3播放机的人机交互

12、界面。 MP3播放器的软件结构跟硬件是相对应的,即每一个硬件部分都有相应的软件代码,这是因为大多数的硬件部分都是数字可编程控制的。 通过以上分析,一个最简化的MP3播放器的工作原理可以概括如下:首先将MP3歌曲文件从内存中取出并读取存储器上的信号,然后到解码芯片对信号进行解码操作,然后通过数模转换器将解出来的数字信号转换成模拟信号,再把转换后的模拟音频放大,经过低通滤波后到耳机输出口,最后输出的就是我们所听到的音乐了。1.2 MP3的文件结构MP3的文件大体分为三部分:TAG_V1(ID3V1),Frame,TAG_V2(ID3V2)。TAG_V1(ID3V1)包含了作者,作曲,专辑等信息,长

13、度为128BYTE。Frame是一系列的帧,个数由文件大小和帧长来决定,帧是MP3文件中最小的组成单位,每个Frame的长度可能不固定,有bitrate(比特率)来决定。每个Frame又分有帧头和数据实体两部分,帧头几率MP3的位率,采样率和版本信息等。TAG_V2(ID3V2)到现在共有4个版本,但流行的播放软件一般只支持第3版本,它存放在文件的首部,包含了作者,作曲,专辑等信息,但是长度不固定,同时扩展了ID3V1的信息量。1.3 MP3播放器的历史与发展世界上第一台MP3的诞生,其实是有一个小故事的,故事追溯到1997年3月的一天,韩国三星公司一位部门经理Moon先生,出差在美国回到汉城

14、的飞机上,在他的笔记本电脑上看他的同事给他发出的一分报告。这是一份图象、文字和MP3音乐合成的简报。当Moon阅读完毕摘下耳机,发现他身旁的旅客正在听着MD,Moon顿时受到启发:要是电脑上的MP3音乐文件也能够直接取出来,用一个独立的播放器来播放,那不就是最好的音乐随身听吗?回到韩国后,他将这个想法提给当时的总裁尹钟龙。可惜的是,当时三星正在进行组织重整,无暇兼顾Moon的发展提案。半年后,亚洲金融风暴的发生使三星公司受到巨大的冲击,Moon先生也被迫提早退休。离开三星公司后,Moon先生进入了另一家韩国企业Saehan(世韩)出任总裁,并将他的想法在Saehan公司转变成为了现实,于199

15、8年推出了世界上第一台的MP3播放器MPMan F10。 MPMan,取意于MP3与WALKMAN的结合。MPMan F10的体积为70x90x16.5mm,约有四个1.44M软盘堆叠起来这么大,体重为65克,可谓非常轻巧。MPMan F10没有任何的机械部件,信噪比达到70dB,失真率为0.01-0.1%。播放时可显示音轨、播放时间,可编排播放顺序,支持低音/中音放大,电池状态检测和显示,依靠2个镍氢电池也能维持8小时播放,即使在现在也并不会显得落后。MPMan F10当时开发出来的目的是为了让使用者从收费音乐网站下载歌曲,可惜Saehan公司没有足够的实力进行大范围的推广,加上MPMan

16、F10采用的是而且采用的是当时极为昂贵的闪存,很快便在与MD的较量中败下阵来。 虽然没有引起人们太多的注意,但MPMan F10的出现从此便启动了MP3市场,韩国的许多公司都开始了对MP3的研发和生产。直到今日,韩国依然在MP3领域处于领先地位。MP3随身听已经经历了数年的发展,而随身听市场的竞争亦趋于白热化,几乎每个星期甚至每天都会有新品MP3的推出,其发展的速度实在惊人。与此同时,在各种媒体上,无论是IT网站还是报纸杂志,MP3厂商们的广告铺天盖地,各种各样的解码芯片,支持的媒体格式,还有MP3屏幕的发色数以及分辨率令消费者目不暇接,不知所措。然而,在众多的广告当中,有一条却特别引起了笔者

17、的注意,那就是以艾诺为首的厂商所提出的”音画双绝”的概念,在笔者看来,这不仅仅是一个概念,一个名称,它更是一种潮流的趋势。此外MP3的制作和交流也很方便,有很多音乐播放软件都提供MP3的制作,转换等功能。基于MP3的上述优点,他很快成为了深受人们喜爱的音乐媒体,而携带方便,小巧精致的MP3播放器,也在最近几年风靡一时,成为了广大消费者茶余饭后的音乐伴侣。1.4 MP3播放器设计的可行性分析本文设计的是MP3播放器。该播放器是基于嵌入式Linux操作系统、以S3C2440为硬件平台。1.4.1 技术可行性分析本设计因为采用了嵌入式Linux,所以该Mp3播放器可以很容易的移植到其他微控制器系统中

18、,使设备兼具MP3播放的功能,同时使用Linux操作系统可以使设计出来的MP3播放器的性能更加的稳定。另外硬件电路以Samsung公司的ARM9处理器S3C2440为中心。这是一款基于ARM920T内核的16位/32位RISC嵌入式处理器。ARM920T核由ARM9TDMI、存储管理单元(MMU)和高速缓存三部分组成。下面对这三部分进行简要的概述。ARM9TDMI是ARM9的处理器核,它采用了哈弗结构,将指令存储器和数据存储器分开,在数据中止模式时,ARM9TDMI采用的是基地址重新载入的模式,当出现访问存储器数据中止时,处理器硬件在数据中止指令执行前,自动保存相应发生数据中止时基地址寄存器的

19、值。MMU是用来管理虚拟内存系统的硬件,用于完成将虚拟地址转换成物理地址,并控制存储器的存储权限。主要对ARM9TDMI的指令和数据地址接口提供传输和访问允许检查,提供地址信号的传输和保护规划。高速缓存由独立的16KB地址和16KB数据高速Cache组成。采用了64路相连的分段式CAM-RAM组织,每个cache分为8段,每段64行。S3C2440芯片集成了大量的功能单元,让设计出的MP3播放器拥有低功耗的特性。1.4.2 经济可行性分析本设计是在Linux环境下的进行编程实现的,Linux是免费、开源的,使用的硬件平台是S3C2440,价格便宜,运行稳定,也可方便的移植到其他平台。这点让设计

20、出来的MP3播放器能够降低设计成本,同时也可以让开发者在开发过程中进一步完善MP3播放器的功能。综上所述,本文以S3C2440为硬件平台,基于嵌入式Linux操作系统,设计出了MP3播放器。2 系统硬件平台介绍2.1 系统硬件特性介绍嵌入式系统总是面向特定应用的,与通用PC的硬件相比,它的硬件系统具有以下特性:1、 对实时多任务有很强的支持能力,能完成多任务并且有较短的中断响应时间,从而使内部的代码和实时内核的执行时间减少到最低的限度。2、 具有功能很强的存储区保护功能。这是由于嵌入式系统的软件结构已模块化,为了避免在软件模块之间出现错误的交叉作用,需要设计强大的存储区保护功能,同时也有利于软

21、件诊断。3、 可扩展的处理器结构,以便能够迅速地开发出满足各种应用需求的高性能嵌入式微处理器。2.1.1 ARM9处理器介绍相比于ARM7,ARM9系列微处理器在性能和功耗方面表现更佳,具有以下特点:(1)5级整数流水线,指令执行效率更高;(2)提供11MIPSMHz的哈佛结构;(3)支持32位ARM指令集和1 6位Thumb指令集;(4)支持32位的高速AMBA总线接口;(5)全性能的MMU,支持Windows CE、Linux、Palm OS等多种主流嵌入式操作系统;(6)MPU支持实时操作系统;(7)支持数据Cache和指令Cache,具有更高的指令和数据处理能力。ARM9系列微处理器主

22、要应用于无线设备、仪器仪表、安全系统、机项盒、高端打印机、数字照相机和数字摄像机等。ARM9系列微处理器包含ARM920T、ARM922T和ARM940T三种类型。2.1.2 RISC微处理器S3C2440介绍三星公司推出的16/32位RISC微处理器S3C2440A, 为手持设备和一般类型应用提供了低价格、低功耗、高性能小型微控制器的解决方案。 为了降低整体系统成本,S3C2440A 提供了一下丰富的内部设备 S3C2440A 采用了 ARM920t 的内核, 0.13um 的 CMOS标准宏单元和存储器单元。其低功耗,简单,优雅,且全静态设计特别适合于对成本和功率敏感型的应用。它采用了新的

23、总线架构Advanced Micro controller Bus Architecture (AMBA). 。 S3C2440A 的杰出的特点是其核心处理器(CPU),是一个由 Advanced RISC Machines 有限公司设计的 16/32 位 ARM920T 的 RISC 处理器。ARM920T 实现了 MMU, AMBA BUS 和Harvard 高速缓冲体系结构构。这一结构具有独立的 16KB 指令 Cache 和 16KB 数据 Cache。每个都是由具有 8 字长的行组成。通过提供一套完整的通用系统外设, S3C2440A 减少整体系统成本和无需配置额外的组件。2.2 硬

24、件平台工作原理S3C2440ResetJTAG电源转换SDRAMFLASH音频放大电路UARTUSB图 2-1 系统硬件原理图硬件平台使用了三星公司的S3C2440微处理器作为CPU,主频为400Hmz,其中有64M SDRAM内存,32BIT数据总线,并且其时钟频率高达100MHz,在这个开发板上有2个Flash存储器,一个是64M Nand Flash,掉电非易失。另外一个是2M Nor Flash,掉电易失。 系统硬件说明:USB接口:通过USB,同开发板进行数据传输。JTAG接口:在Linux系统下,通过JTAG接口烧写程序到Nandflash中。复位键:让系统复位。开关键:搬动开关键

25、,让开发板运行或关闭。串口:通过串口能够让开发板与PC宿主机进行通信。音频输出:将播放的MP3歌曲输出到音频输出端口FLASH是一种在可编程期间,存储的信息在系统掉电后不会丢失的存储器,具有低功耗,大容量,擦写速度快等特点。在系统中通常用于存放程序代码、以及一些在系统掉电后需要保存的用户数据等。SDRAM存取速度远远大于FLASH存储器,而且具有读、写属性。在系统中主要用作程序的运行空间、数据、及堆栈区,当系统启东市,CPU从复位地址0X0处读取启动代码,完成系统初始化后,程序代码调入到SDRAM中运行,以提高系统的运行速度。UART能够实现PC与开发板间的串口通信。UART在程序运行期间需要

26、向终端输出信息,以便用户获取系统状态信息。S3C2440的UART提供了三个同步串行IO口,第一个串口都可以使用中断模式和DMA模式,换句话说就是UART可以产生一个中断或者是DMA请求使数据在CPU和UART之间进行传递。DMA全称是Direct Memory Access(存储器直接访问)。这是指一种高速的数据传输操作,允许在外部设备和存储器之间直接读写数据,既不通过CPU,也不需要CPU干预。整个数据传输操作在一个称为”DMA控制器”的控制下进行的。CPU除了在数据传输开始和结束时做一点处理外,在传输过程中CPU可以进行其他的工作。这样,在大部分时间里,CPU和输入输出都处于并行操作。因

27、此,使整个计算机系统的效率大大提高。3 平台搭建的总体设计3.1 嵌入式系统概述嵌入式系统是以应用为中心、以计算机技术为基础、软件硬件可裁剪、对功能、可靠性、成本、体积、功耗有严格要求的专用计算机系统。它包括硬件和软件两部分。在嵌入式系统中,计算机系统一般作为智能终端控制部件嵌入到整个应用系统中,是整个系统的控制中心,主要用于对系统的信息处理部件和用户交互界面加以控制。在这种情况下,用户并不知道嵌入式系统的存在,系统控制软件一般被固化在嵌入式计算机中,嵌入式计算机一般不需要被用户重新编程,通过特殊的输入、输出设备与系统进行交互。任何嵌入式系统都包括硬件和软件两个方面。硬件包括处理器微处理器、存

28、储器及外设器件和IO端口、图形控制器等。软件部分包括操作系统软件(OS)(要求实时和多任务操作)和应用程序。应用软件控制着嵌入式系统的运作和行为,而操作系统则为应用程序提供必要的底层支持,它一般是通过提供应用编程接口(API)来实现的。因为嵌入式系统是面向应用、产品和用户的,具体的应用将决定对硬件和软件的需求,如芯片、存储器、IO扩展和操作系统、应用程序编制等。和通用计算机不同,嵌入式系统的硬件和软件都必须高效率的设计,量体采用,去除冗余,尽量以最小的系统、最低的成本去实现目标功能。它通常都具有低功耗、体积小、集成度高等特点,能够把通用CPU中许多由板卡完成的任务集成在芯片内部,从而有利于嵌入

29、式系统设计趋于小型化,移动能力大大增强,跟网络的结合也越来越紧密。3.2 软件平台的设计本文设计的软件平台包括如下4个方面的内容:1、 Boot Loader引导程序2、 Linux 内核3、 设备驱动程序4、 应用程序Boot Loader引导程序能实现系统的快速引导,首先完成对CPU环境的最初初始化,如:芯片引脚、外部控制器、输入输出设备等,然后负责将Linux内核加载到内存,将控制权交给内核初始化程序。具体工作包括:寻找或将指定的内核映像文件解压至内存,然后解压文件系统,将控制权移交给内核。在本设计中采用了U-BOOT作为Boot Loader引导程序,当打开MP3播放器的电源开关时,系

30、统会自动加载Linux引导程序。Linux是一个单一内核操作系统,但可以动态装入和卸载内核中的部分源代码。Linux内核由内存管理、进程管理、定时器中断管理、模块管理、虚拟文件系统、接口文件系统、设备驱动程序、进程间通信、网络管理、系统启动等构成。在本设计中,针对设计的功能,对Linux内核进行了剪裁。设备驱动程序是内核的一部分,它像内核中其它代码一样运行在内核模式。Linux设备驱动程序的主要功能有:对设备进行初始化;使设备投入运行和退出服务;从设备接收数据并将它们送回内核;将数据从内核送到设备;检测和处理设备出现的错误。在本设计中,主要进行了字符设备的驱动,声卡驱动,以及USB驱动等。嵌入

31、式应用软件是针对特定应用领域,基于某一固定的硬件平台,用来达到用户预期目标的计算机软件,由于用户任务可能有时间和精度上的要求,因此有些嵌入式应用软件需要特定嵌入式操作系统的支持。在本次设计中,对于设计的MP3播放器的基本功能,例如播放器进行歌曲的播放、暂停、停止、以及歌曲的切换等进行了设计与优化,让播放器尽可能的满足准确性、安全性和稳定性以及实际应用的需要,以减少对系统资源的消耗,降低硬件成本。下面本文将对MP3播放器的设计进行详细的论述。 3.3 U-BOOT分析与移植3.3.1 BootLoader简介引导加载程序是系统加电后运行的第一段代码。它一般在系统启动时运行非常短的一段时间,但对于

32、嵌入式系统来说,这是一个非常重要的组成部分。通过这段小程序,初始化必要的硬件设备,创建内核需要的一些信息,并将一些信息通过相关机制传递给内核,真正起到引导和加载内核的租用。BootLoader和硬件密切相关,一般来说都要对BootLoader的源代码进行修改才可以在自己的硬件平台上运行起来,目前嵌入式领域里出现了很多种类的BootLoader,如armboot、U-BOOT等,其中U-BOOT是功能最完善的,所以在设计中采用了U-BOOT作为引导程序。3.3.2 U-BOOT启动流程分析U-BOOT分为两个阶段,其中依赖于CPU体系结构的代码都存放在阶段一中,而且通常用汇编语言来实现。而阶段二

33、通常用C语言来实现,这样可以实现复杂的功能,而且有更好的可读性和移植性。U-BOOT的第一阶段功能是:1、 定义入口2、 设置异常向量3、 本地硬件设备初始化4、 初始化内存控制器5、 设置堆栈、同时跳转到第二阶段的程序入口U-BOOT的第二阶段主要完成:1、 调用一系列的设备初始化函数2、 确定目标板是进入下载操作模式还是启动加载模式3、 如果是启动加载模式,则将内核映像和根文件系统映像从FLASH上独到RAM空间中。4、 为内核设置启动参数5、 调用内核。如图3-1所示,图中从基本硬件初始化到跳转到STAGE2的入口处为第一阶段,初始化硬件设备是第二阶段。图 3-1 U-BOOT启动流程图

34、3.3.3 U-BOOT的详细设计首先对U-BOOT进行配置,具体步骤如下:1、进入U-BOOT的board 目录,在board目录下每一个子目录都包含一个u-boot支持的硬件开发板的支持代码,其中有smdk2410子目录,但没有smdk2440目录。这表明U-BOOT支持S3C2410,但不支持S3C2440。S3C2440 与S3C2410非常相似,因此可以用S3C2410的支持代码作为基础,为S3C2440移植U-BOOT。2、为了将QQ2440V3开发板的信息编译进u-boot,需要修改当前目录下的Makefile。具体修改内容是:COBJS := QQ2440V3.o flash.

35、o3、复制更名原smdk2410的头文件为QQ2440V3的头文件4、修改/opt/ u-boot-1.1.6.tar.bz2/Makefile,为接下来make命令作准备。 在Makefile的中模仿smdk2410_config目标增加新目标QQ2440V3_config QQ2440V3_config : unconfig $(MKCONFIG) $(:_config=) arm arm920t QQ2440V3 NULL s3c24x0这样,系统就会在执行make命令时,显示QQ2440V3的标签,供操作者选择。5、在u-boot根目录下键入命令:make QQ2440V3_confi

36、g 系统会根据这条命令找寻当前目录下的Makefile文件,然后在该文件内查找”QQ2440V3_config”这个标志,找到后会执行其下代码,代码含义为将用户输入的make命令后的参数中的“_config”去掉,执行MKCONFIG所指向的脚本(mkconfig,就在u-boot的根目录下)并且传递参数“arm arm920t QQ2440V3 NULL s3c24x0”,故“make QQ2440V3_config” 会被替换为“./mkconfig QQ2440V3 arm arm920t QQ2440V3 NULL s3c24x0”这条命令。键入命令后,如显示“Configuing f

37、or QQ2440V3 board.”则说明上述配置修改成功。6、如果现在键入make,系统就会在当前目录下编译生成“u-boot.bin”文件。但这个文件烧写到开发板上后,开发板却没有任何反映。这是由于这个U-BOOT是用于S3C2410的,虽然名字改成了QQ2440V3,但也只是改了名字而已,其中对开发板的一些硬件的初始化都没有修改。故而,需要修改源代码,将其对开发板硬件的初始化适用于QQ2440V3。修改过程如下:A、 因为QQ2440的HCLK=100Mhz,修改内存刷新时间#define REFCNT 1268B、 修改时钟频率,使其中的MPLL、分频、机器ID符合实际的开发板#de

38、fine S3C2440_MPLL_400MHz (0x5c12) | (0x014) | (0x01)#define S3C2440_UPLL_48MHz (0x3812) | (0x02MPLLCON = S3C2440_MPLL_400MHz;clk_power-UPLLCON = S3C2440_UPLL_48MHz;C、 修改机器码gd-bd-bi_arch_number = MACH_TYPE_S3C2440;D、 S3C2440设置时钟频率和CAMDIVN有关系,S3C2410里没有CAMDIVN,所以添加文件:include/s3c24x0.h 中的 结构体:S3C24X0_C

39、LOCK_POWER添加CAMDIVN S3C24X0_REG32 CAMDIVN;E、 针对S3C2440特性添加以下FCLK:HCLK:PCLK的换算关系在vim cpu/arm920t/s3c24x0/speed.c中进行修改: 增加以下宏定义:#define S3C2440_CLKDIVN_PDIVN (10)#define S3C2440_CLKDIVN_HDIVN_MASK (31) #define S3C2440_CLKDIVN_HDIVN_1 (01) #define S3C2440_CLKDIVN_HDIVN_2 (11) #define S3C2440_CLKDIVN_HD

40、IVN_4_8 (21) #define S3C2440_CLKDIVN_HDIVN_3_6 (31) #define S3C2440_CAMDIVN_CAMCLK_MASK (0xf0) #define S3C2440_CAMDIVN_CAMCLK_SEL (14) #define S3C2440_CAMDIVN_HCLK3_HALF (18) #define S3C2440_CAMDIVN_HCLK4_HALF (19) #define S3C2440_CAMDIVN_DVSEN (112) 在函数static ulong get_PLLCLK(int pllreg)修改: return(

41、CONFIG_SYS_CLK_FREQ * m * 2) / (p CLKDIVN; camdiv = clk_power-CAMDIVN; switch(clkdiv & S3C2440_CLKDIVN_HDIVN_MASK) case S3C2440_CLKDIVN_HDIVN_1: hdiv = 1; break; case S3C2440_CLKDIVN_HDIVN_2: hdiv = 2; break; case S3C2440_CLKDIVN_HDIVN_4_8: hdiv = (camdiv & S3C2440_CAMDIVN_HCLK4_HALF) ? 8 : 4; break

42、; case S3C2440_CLKDIVN_HDIVN_3_6: hdiv = (camdiv & S3C2440_CAMDIVN_HCLK3_HALF) ? 6 : 3; break; return get_FCLK() / hdiv;在函数ulong get_PCLK(void)中修改:unsigned long clkdiv, camdiv; int hdiv = 1; clkdiv = clk_power-CLKDIVN; camdiv = clk_power-CAMDIVN; switch(clkdiv & S3C2440_CLKDIVN_HDIVN_MASK) case S3C2

43、440_CLKDIVN_HDIVN_1: hdiv = 1; break; case S3C2440_CLKDIVN_HDIVN_2: hdiv = 2; break; case S3C2440_CLKDIVN_HDIVN_4_8: hdiv = (camdiv & S3C2440_CAMDIVN_HCLK4_HALF) ? 8 : 4; break; case S3C2440_CLKDIVN_HDIVN_3_6: hdiv = (camdiv & S3C2440_CAMDIVN_HCLK3_HALF) ? 6 : 3; break; return get_FCLK() / hdiv / (c

44、lkdiv & S3C2440_CLKDIVN_PDIVN) ? 2 : 1);F、 添加NANDFLASH驱动,来启用nand命令在vim include/configs/QQ2440V3.h中修改CFG_CMD_NAND | CFG_CMD_PING | 增加如下Nand相关配置项:#define CFG_NAND_BASE 0#define CFG_MAX_NAND_DEVICE 1#define NAND_MAX_CHIPS 1以下这两行代码是为了支持u-boot可以传参数给Linux内核,例如告诉Linux内核”root=/dev/mtdblock2”)#define CONFIG_

45、SETUP_MEMORY_TAGS1#define CONFIG_CMDLINE_TAG1G、 修改NANDFLASH相关寄存器:定义2440的nand flash控制器寄存器的数据结构,以供board_nand_init函数使用/* NAND FLASH (see S3C2440 manual) */typedef struct S3C24X0_REG32 NFCONF; S3C24X0_REG32 NFCONT; S3C24X0_REG32 NFCMD; S3C24X0_REG32 NFADDR; S3C24X0_REG32 NFDATA; S3C24X0_REG32 NFMECCD0; S3C24X0_REG32 NFMECCD1;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 办公文档 > 其他范文


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号