毕业设计(论文)-基于ARM的MP3播放器设计.doc_第1页
毕业设计(论文)-基于ARM的MP3播放器设计.doc_第2页
毕业设计(论文)-基于ARM的MP3播放器设计.doc_第3页
毕业设计(论文)-基于ARM的MP3播放器设计.doc_第4页
毕业设计(论文)-基于ARM的MP3播放器设计.doc_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

北京联合大学 毕业设计 i 目目 录录 摘 要 i abstractii 引 言1 1mp3 播放器概述3 1.1mp3 播放器的工作原理.3 1.2mp3 的文件结构.4 1.3mp3 播放器的历史与发展.4 1.4mp3 播放器设计的可行性分析.5 1.4.1技术可行性分析5 1.4.2经济可行性分析6 2系统硬件平台介绍.7 2.1系统硬件特性介绍7 2.1.1 arm9 处理器介绍7 2.1.2 risc 微处理器 s3c2440 介绍.7 2.2硬件平台工作原理8 3平台搭建的总体设计.10 3.1嵌入式系统概述10 3.2软件平台的设计10 3.3u-boot 分析与移植11 3.3.1 bootloader 简介11 3.3.2 u-boot 启动流程分析11 3.3.3 u-boot 的详细设计12 3.4linux 内核分析与文件系统移植.17 3.4.1 linux 启动过程.17 3.4.2 linux 内核的移植.17 3.5文件系统的设计18 3.5.1 jffs2 文件系统介绍.19 3.5.2文件系统的制作19 4mp3 播放器的设计与实现22 北京联合大学 毕业设计 ii 4.1播放模块的设计22 4.1.1声卡驱动的设计22 4.1.2 madplay 播放器的移植.23 4.2同步歌词模块的设计25 4.3usb 驱动模块的设计.26 4.4按键控制模块的设计31 4.4.1创建歌曲列表31 4.4.2播放 mp3 文件.31 4.4.3暂停播放33 4.4.4停止播放33 4.4.5歌曲切换33 5mp3 播放器的界面设计35 5.1界面设计工具的选择35 5.2图形界面的设计35 致 谢39 参考文献40 北京联合大学 毕业设计 1 引引 言言 随着计算机技术的发展和微处理器工艺的改进,社会正在一天天的步入信息化, 嵌入式系统的应用也越来越广泛,计算机和网络已经全面渗透到了我们日常生活中 的每个角落,任何人都可以拥有从小到大的各种采用了嵌入式技术的产品,小到 mp3,pda 等微型数字化产品,大到许多的家用电器,车载设备等,嵌入式系统及 其应用在电子市场占有了一定的份额,并起了一定的主导作用。 由于嵌入式系统是建立在特定的硬件系统之上,系统的开发和硬件的关系十分 密切,且入市开发板为开发者提供了丰富的设为设备和接口,通过接口可以调试应 用程序和打印输出调试信息。嵌入式开发板已经成为了嵌入式开发和移植的有力工 具。 基于 arm 内核的微控制器芯片不但占据了高端微控制器市场的大部分是成份 额,同时也逐渐向低端微控制器应用领域扩展,arm 微控制器的低功耗、高性价比 使其以 70%左右的市场占有率成为嵌入式解决方案中主流处理器。 linux 近几年在嵌入式领域异军突起,成为了非常有潜力的操作系统。linux 操 作系统的代码的开放性、系统的稳定性、强大的网络功能以及优秀的文件系统支持, 在嵌入式设备特别是网络设备中得到了广泛的应用。因此,选择 linux 操作系统作 为设计的操作系统。 随着计算机和多媒体技术的不断发展以及个人计算机的普及,各种各样的媒体 文件、媒体播放器层出不穷,而 mp3(mpeg audio layer3)格式以其体积小、音 质也有保证的特点成为使用最为广泛的音频格式,得到了绝大多数软件和硬件媒体 播放器的支持。如今,软件市场上的媒体播放器层出不穷,如:酷狗音乐、千千静 听、qq 音乐播放器等。高音质播放和低内存消耗是各种媒体播放器所追求的目标。 嵌入式系统具有巨大的市场需求前景,可广泛应用于移动计算设备、网络设备、 信息电器、工控设备、车载设备、娱乐设施、仪器仪表等场合。而 mp3 具有巨大的 市场需求。为适应当前发展趋势,开发基于嵌入式 linux 的 mp3 音乐播放器系统。 为了对嵌入式系统的开发过程能够熟练的掌握,学习了一些有关嵌入式系统开 发技术的方法,掌握了开发的基本步骤。在设计时构建了一个 arm9 开发平台、使 用嵌入式 linux 操作系统进行了具体的设计,最终实现了在 arm 上的简易 mp3 播 放器的设计。 本设计探索性地设计实现了一个支持 lrc 歌词显示的 mp3 播放器的软件。该 北京联合大学 毕业设计 2 播放器实现了在播放 mp3 的同时实时地显示 lrc 歌词,并实现歌曲的暂停、停止 以及歌曲的切换功能。 论文首先介绍了嵌入式系统以及开发环境,然后,介绍了一些设计过程中的准 备工作,接着介绍了 mp3 播放器的开发平台,阐述了系统各功能的详细设计与实现。 最后,论文介绍了系统的运行环境及运行效果,并对各个部分进行了图示说明。最 后介绍了本设计的设计目标,划分并设计了系统功能模块,包括:系统初始化模块、 播放模块、同步歌词模块、按键切换模块等,设计了媒体文件和歌词文件的处理流 程。 北京联合大学 毕业设计 3 1mp3 播放器概述播放器概述 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 掌管随身听的数据传输,设备接口控制,文件解 码回放等活动。dsp 能够在非常短的时间里完成多种处理任务,而且此过程所消耗 的能量极少,这也是它适合于便携式播放器的一个显著特点。 一个完整 mp3 播放机要分几个部分:中央处理器、解码器、存储设备、主机通 讯端口、音频 dac 和功放、显示界面和控制键。其中中央处理器和解码器是整个系 统的核心。这里的中央处理器我们通常称为 mcu,简称单片机。它运行 mp3 的整 个控制程序,也称为 fireware,或者固件程序。它控制了 mp3 的各个部件的工作, 例如从存储设备读取数据送到解码器解码;与主机连接时完成与主机的数据交换; 接收控制按键的操作,显示系统运行状态等。 解码器是芯片中的一个硬件模块,或者说是硬件解码,它可以直接完成各种格 式的 mp3 数据流的解码操作,并输出 pcm 或 i2s 格式的数字音频信号。 存储设备是 mp3 播放机的重要部分,通常的 mp3 随身听都是采用半导体存储 器(flash memory)或者硬盘(hdd)作为储存设备的。它通过接受储存主机 通讯端口传来的数据,回放的时候 mcu 读取存储器中的数据并送到解码器。数据 的存储是要有一定格式的,众所周知,pc 管理磁盘数据是以文件形式,mp3 也不 例外,最常用的办法就是直接利用 pc 的文件系统来管理存储器。 主机通讯端口是 mp3 播放器与 pc 机之间交换数据的重要途径,pc 机通过该 端口操作 mp3 播放器存储设备中的数据,对数据进行拷贝、删除、复制文件等操作。 目前最广泛使用的是 usb 总线,并且遵循微软定义的大容量移动存储协议规范,将 mp3 播放器作为主机的一个移动存储设备。这里需要遵循几个规范:1、usb 通信 协议,2、大容量移动存储器规范,3、scsi 协议。 音频 dac 是将数字音频信号转换成模拟音频信号,以推动耳机、功放等模拟音 响设备。在这里,本文需要介绍一下数字音频信号。数字音频信号是相对模拟音频 北京联合大学 毕业设计 4 信号来说的。我们知道声音的本质是波,人说能听到的声音的频率在 20hz 到 20khz 之间,称为声波。模拟信号对波的表示是连续的函数特性,基本的原理是不同频率 和振幅的波叠加在一起。数字音频信号是对模拟信号的一种量化,典型方法是对时 间坐标按相等的时间间隔做采样,对振幅做量化。单位时间内的采样次数称为采样 频率。这样一段声波就可以被数字化后变成一串数值,每个数值对应相应抽样点的 振幅值,按顺序将这些数字排列起来就是数字音频信号了。这是 adc(模拟-数字 转换)过程,dac(数字-模拟转换)过程相反,将连续的数字按采样时候的频率顺 序转换成对应的电压。mp3 解码器解码后的信息属于数字音频信号(数字音频信号 有不同的格式,最常用的是 pcm 和 i2s 两种) ,需要通过 dac 转换器变成模拟信 号才能推动功放,被人耳所识别。 mp3 播放器的显示设备通常采用 lcd 或者 oled 等来显示系统的工作状态。 控制键盘通常是按钮开关。键盘和显示设备合起来构成了 mp3 播放机的人机交互界 面。 mp3 播放器的软件结构跟硬件是相对应的,即每一个硬件部分都有相应的软件 代码,这是因为大多数的硬件部分都是数字可编程控制的。 通过以上分析,一个最简化的 mp3 播放器的工作原理可以概括如下:首先将 mp3 歌曲文件从内存中取出并读取存储器上的信号,然后到解码芯片对信号进行解 码操作,然后通过数模转换器将解出来的数字信号转换成模拟信号,再把转换后的 模拟音频放大,经过低通滤波后到耳机输出口,最后输出的就是我们所听到的音乐 了。 1.2 mp3 的文件结构的文件结构 mp3 的文件大体分为三部分:tag_v1(id3v1),frame,tag_v2(id3v2)。 tag_v1(id3v1)包含了作者,作曲,专辑等信息,长度为 128byte。 frame 是一系列的帧,个数由文件大小和帧长来决定,帧是 mp3 文件中最小的 组成单位,每个 frame 的长度可能不固定,有 bitrate(比特率)来决定。每个 frame 又分有帧头和数据实体两部分,帧头几率 mp3 的位率,采样率和版本信息等。 tag_v2(id3v2)到现在共有 4 个版本,但流行的播放软件一般只支持第 3 版本, 它存放在文件的首部,包含了作者,作曲,专辑等信息,但是长度不固定,同时扩 展了 id3v1 的信息量。 1.3 mp3 播放器的历史与发展播放器的历史与发展 世界上第一台 mp3 的诞生,其实是有一个小故事的,故事追溯到 1997 年 3 月 北京联合大学 毕业设计 5 的一天,韩国三星公司一位部门经理 moon 先生,出差在美国回到汉城的飞机上, 在他的笔记本电脑上看他的同事给他发出的一分报告。这是一份图象、文字和 mp3 音乐合成的简报。当 moon 阅读完毕摘下耳机,发现他身旁的旅客正在听着 md,moon 顿时受到启发:要是电脑上的 mp3 音乐文件也能够直接取出来,用一 个独立的播放器来播放,那不就是最好的音乐随身听吗?回到韩国后,他将这个想 法提给当时的总裁尹钟龙。可惜的是,当时三星正在进行组织重整,无暇兼顾 moon 的发展提案。半年后,亚洲金融风暴的发生使三星公司受到巨大的冲击, moon 先生也被迫提早退休。离开三星公司后,moon 先生进入了另一家韩国企业 saehan(世韩)出任总裁,并将他的想法在 saehan 公司转变成为了现实,于 1998 年推出了世界上第一台的 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 f10 采用的是而且采 用的是当时极为昂贵的闪存,很快便在与 md 的较量中败下阵来。 虽然没有引起人们太多的注意,但 mpman f10 的出现从此便启动了 mp3 市场, 韩国的许多公司都开始了对 mp3 的研发和生产。直到今日,韩国依然在 mp3 领域 处于领先地位。 mp3 随身听已经经历了数年的发展,而随身听市场的竞争亦趋于白热化,几乎每 个星期甚至每天都会有新品 mp3 的推出,其发展的速度实在惊人。与此同时,在各 种媒体上,无论是 it 网站还是报纸杂志,mp3 厂商们的广告铺天盖地,各种各样 的解码芯片,支持的媒体格式,还有 mp3 屏幕的发色数以及分辨率令消费者目不暇 接,不知所措。然而,在众多的广告当中,有一条却特别引起了笔者的注意,那就 是以艾诺为首的厂商所提出的”音画双绝”的概念,在笔者看来,这不仅仅是一个概 念,一个名称,它更是一种潮流的趋势。 此外 mp3 的制作和交流也很方便,有很多音乐播放软件都提供 mp3 的制作, 转换等功能。基于 mp3 的上述优点,他很快成为了深受人们喜爱的音乐媒体,而携 带方便,小巧精致的 mp3 播放器,也在最近几年风靡一时,成为了广大消费者茶余 饭后的音乐伴侣。 1.4 mp3 播放器设计的可行性分析播放器设计的可行性分析 北京联合大学 毕业设计 6 本文设计的是 mp3 播放器。该播放器是基于嵌入式 linux 操作系统、以 s3c2440 为硬件平台。 1.4.1技术可行性分析技术可行性分析 本设计因为采用了嵌入式 linux,所以该 mp3 播放器可以很容易的移植到其他 微控制器系统中,使设备兼具 mp3 播放的功能,同时使用 linux 操作系统可以使设 计出来的 mp3 播放器的性能更加的稳定。 另外硬件电路以 samsung 公司的 arm9 处理器s3c2440 为中心。这是一款 基于 arm920t 内核的 16 位/32 位 risc 嵌入式处理器。arm920t 核由 arm9tdmi、存储管理单元(mmu)和高速缓存三部分组成。下面对这三部分进行简 要的概述。 arm9tdmi 是 arm9 的处理器核,它采用了哈弗结构,将指令存储器和数据 存储器分开,在数据中止模式时,arm9tdmi 采用的是基地址重新载入的模式,当 出现访问存储器数据中止时,处理器硬件在数据中止指令执行前,自动保存相应发 生数据中止时基地址寄存器的值。 mmu 是用来管理虚拟内存系统的硬件,用于完成将虚拟地址转换成物理地址, 并控制存储器的存储权限。主要对 arm9tdmi 的指令和数据地址接口提供传输和 访问允许检查,提供地址信号的传输和保护规划。 高速缓存由独立的 16kb 地址和 16kb 数据高速 cache 组成。采用了 64 路相连 的分段式 cam-ram 组织,每个 cache 分为 8 段,每段 64 行。s3c2440 芯片集成 了大量的功能单元,让设计出的 mp3 播放器拥有低功耗的特性。 1.4.2经济可行性分析经济可行性分析 本设计是在 linux 环境下的进行编程实现的,linux 是免费、开源的,使用的硬 件平台是 s3c2440,价格便宜,运行稳定,也可方便的移植到其他平台。这点让设 计出来的 mp3 播放器能够降低设计成本,同时也可以让开发者在开发过程中进一步 完善 mp3 播放器的功能。 综上所述,本文以 s3c2440 为硬件平台,基于嵌入式 linux 操作系统,设计出 了 mp3 播放器。 北京联合大学 毕业设计 7 2系统硬件平台介绍系统硬件平台介绍 2.1 系统硬件特性介绍系统硬件特性介绍 嵌入式系统总是面向特定应用的,与通用 pc 的硬件相比,它的硬件系统具有 以下特性: 1、 对实时多任务有很强的支持能力,能完成多任务并且有较短的中断响应时间, 从而 使内部的代码和实时内核的执行时间减少到最低的限度。 2、 具有功能很强的存储区保护功能。这是由于嵌入式系统的软件结构已模块化, 为了避免在软件模块之间出现错误的交叉作用,需要设计强大的存储区保护 功能,同时也有利于软件诊断。 3、 可扩展的处理器结构,以便能够迅速地开发出满足各种应用需求的高性能嵌入 式微处理器。 2.1.1arm9 处理器介绍处理器介绍 相比于 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 系 列微处理器主要应用于无线设备、仪器仪表、安全系统、机项盒、高端打印机、数 字照相机和数字摄像机等。arm9 系列微处理器包含 arm920t、arm922t 和 arm940t 三种类型。 2.1.2risc 微处理器微处理器 s3c2440 介绍介绍 三星公司推出的 16/32 位 risc 微处理器 s3c2440a, 为手持设备和一般类型应 用提供了低价格、低功耗、高性能小型微控制器的解决方案。 为了降低整体系统成本,s3c2440a 提供了一下丰富的内部设备 s3c2440a 采 北京联合大学 毕业设计 8 用了 arm920t 的内核, 0.13um 的 cmos 标准宏单元和存储器单元。其低功耗, 简单,优雅,且全静态设计特别适合于对成本和功率敏感型的应用。它采用了新的 总线架构 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 硬件平台工作原理硬件平台工作原理 图图 2-1 系统硬件原理图系统硬件原理图 硬件平台使用了三星公司的 s3c2440 微处理器作为 cpu,主频为 400hmz,其 中有 64m sdram 内存,32bit 数据总线,并且其时钟频率高达 100mhz,在这个 开发板上有 2 个 flash 存储器,一个是 64m nand flash,掉电非易失。另外一个是 2m nor flash,掉电易失。 系统硬件说明: usb 接口:通过 usb,同开发板进行数据传输。 jtag 接口:在 linux 系统下,通过 jtag 接口烧写程序到 nandflash 中。 复位键:让系统复位。 开关键:搬动开关键,让开发板运行或关闭。 串口:通过串口能够让开发板与 pc 宿主机进行通信。 音频输出:将播放的 mp3 歌曲输出到音频输出端口 flash 是一种在可编程期间,存储的信息在系统掉电后不会丢失的存储器,具 s3c2440 reset jtag 电源转换 sdramflash 音频放大电路 uart usb 北京联合大学 毕业设计 9 有低功耗,大容量,擦写速度快等特点。在系统中通常用于存放程序代码、以及一 些在系统掉电后需要保存的用户数据等。 sdram 存取速度远远大于 flash 存储器,而且具有读、写属性。在系统中主 要用作程序的运行空间、数据、及堆栈区,当系统启东市,cpu 从复位地址 0x0 处 读取启动代码,完成系统初始化后,程序代码调入到 sdram 中运行,以提高系统 的运行速度。 uart 能够实现 pc 与开发板间的串口通信。uart 在程序运行期间需要向终 端输出信息,以便用户获取系统状态信息。s3c2440 的 uart 提供了三个同步串行 io 口,第一个串口都可以使用中断模式和 dma 模式,换句话说就是 uart 可以产 生一个中断或者是 dma 请求使数据在 cpu 和 uart 之间进行传递。 dma 全称是 direct memory access(存储器直接访问) 。这是指一种高速的数据 传输操作,允许在外部设备和存储器之间直接读写数据,既不通过 cpu,也不需要 cpu 干预。整个数据传输操作在一个称为”dma 控制器”的控制下进行的。cpu 除 了在数据传输开始和结束时做一点处理外,在传输过程中 cpu 可以进行其他的工作。 这样,在大部分时间里,cpu 和输入输出都处于并行操作。因此,使整个计算机系 统的效率大大提高。 北京联合大学 毕业设计 10 3平台搭建的总体设计平台搭建的总体设计 3.1 嵌入式系统概述嵌入式系统概述 嵌入式系统是以应用为中心、以计算机技术为基础、软件硬件可裁剪、对功能、 可靠性、成本、体积、功耗有严格要求的专用计算机系统。它包括硬件和软件两部 分。在嵌入式系统中,计算机系统一般作为智能终端控制部件嵌入到整个应用系统 中,是整个系统的控制中心,主要用于对系统的信息处理部件和用户交互界面加以 控制。在这种情况下,用户并不知道嵌入式系统的存在,系统控制软件一般被固化 在嵌入式计算机中,嵌入式计算机一般不需要被用户重新编程,通过特殊的输入、 输出设备与系统进行交互。 任何嵌入式系统都包括硬件和软件两个方面。硬件包括处理器微处理器、存 储器及外设器件和 io 端口、图形控制器等。软件部分包括操作系统软件(os)(要 求实时和多任务操作)和应用程序。应用软件控制着嵌入式系统的运作和行为,而操 作系统则为应用程序提供必要的底层支持,它一般是通过提供应用编程接口(api)来 实现的。因为嵌入式系统是面向应用、产品和用户的,具体的应用将决定对硬件和 软件的需求,如芯片、存储器、io 扩展和操作系统、应用程序编制等。和通用计 算机不同,嵌入式系统的硬件和软件都必须高效率的设计,量体采用,去除冗余, 尽量以最小的系统、最低的成本去实现目标功能。它通常都具有低功耗、体积小、 集成度高等特点,能够把通用 cpu 中许多由板卡完成的任务集成在芯片内部,从而 有利于嵌入式系统设计趋于小型化,移动能力大大增强,跟网络的结合也越来越紧 密。 3.2 软件平台的设计软件平台的设计 本文设计的软件平台包括如下 4 个方面的内容: 1、boot loader 引导程序 2、linux 内核 3、设备驱动程序 4、应用程序 boot loader 引导程序能实现系统的快速引导,首先完成对 cpu 环境的最初初 始化,如:芯片引脚、外部控制器、输入输出设备等,然后负责将 linux 内核加载 到内存,将控制权交给内核初始化程序。具体工作包括:寻找或将指定的内核映像 文件解压至内存,然后解压文件系统,将控制权移交给内核。在本设计中采用了 u- boot 作为 boot loader 引导程序,当打开 mp3 播放器的电源开关时,系统会自动 北京联合大学 毕业设计 11 加载 linux 引导程序。 linux 是一个单一内核操作系统,但可以动态装入和卸载内核中的部分源代码。 linux 内核由内存管理、进程管理、定时器中断管理、模块管理、虚拟文件系统、 接口文件系统、设备驱动程序、进程间通信、网络管理、系统启动等构成。在本设 计中,针对设计的功能,对 linux 内核进行了剪裁。 设备驱动程序是内核的一部分,它像内核中其它代码一样运行在内核模式。 linux 设备驱动程序的主要功能有:对设备进行初始化;使设备投入运行和退出服 务;从设备接收数据并将它们送回内核;将数据从内核送到设备;检测和处理设备 出现的错误。在本设计中,主要进行了字符设备的驱动,声卡驱动,以及 usb 驱动 等。 嵌入式应用软件是针对特定应用领域,基于某一固定的硬件平台,用来达到用 户预期目标的计算机软件,由于用户任务可能有时间和精度上的要求,因此有些嵌 入式应用软件需要特定嵌入式操作系统的支持。在本次设计中,对于设计的 mp3 播 放器的基本功能,例如播放器进行歌曲的播放、暂停、停止、以及歌曲的切换等进 行了设计与优化,让播放器尽可能的满足准确性、安全性和稳定性以及实际应用的 需要,以减少对系统资源的消耗,降低硬件成本。下面本文将对 mp3 播放器的设计 进行详细的论述。 3.3 u-boot 分析与移植分析与移植 3.3.1bootloader 简介简介 引导加载程序是系统加电后运行的第一段代码。它一般在系统启动时运行非常 短的一段时间,但对于嵌入式系统来说,这是一个非常重要的组成部分。通过这段 小程序,初始化必要的硬件设备,创建内核需要的一些信息,并将一些信息通过相 关机制传递给内核,真正起到引导和加载内核的租用。bootloader 和硬件密切相关, 一般来说都要对 bootloader 的源代码进行修改才可以在自己的硬件平台上运行起来, 目前嵌入式领域里出现了很多种类的 bootloader,如 armboot、u-boot 等,其中 u-boot 是功能最完善的,所以在设计中采用了 u-boot 作为引导程序。 3.3.2u-boot 启动流程分析启动流程分析 u-boot 分为两个阶段,其中依赖于 cpu 体系结构的代码都存放在阶段一中, 而且通常用汇编语言来实现。而阶段二通常用 c 语言来实现,这样可以实现复杂的 功能,而且有更好的可读性和移植性。 u-boot 的第一阶段功能是: 1、 定义入口 北京联合大学 毕业设计 12 2、 设置异常向量 3、 本地硬件设备初始化 4、 初始化内存控制器 5、 设置堆栈、同时跳转到第二阶段的程序入口 u-boot 的第二阶段主要完成: 1、 调用一系列的设备初始化函数 2、 确定目标板是进入下载操作模式还是启动加载模式 3、 如果是启动加载模式,则将内核映像和根文件系统映像从 flash 上独到 ram 空间中。 4、 为内核设置启动参数 5、 调用内核。 如图 3-1 所示,图中从基本硬件初始化到跳转到 stage2 的入口处为第一阶段, 初始化硬件设备是第二阶段。 图图 3-13-1 u-bootu-boot 启动流程图启动流程图 3.3.3u-boot 的详细设计的详细设计 首先对 u-boot 进行配置,具体步骤如下: 基本硬件初始化 准备ram空间 拷贝stage2到ram 中 设置堆栈指针 跳转到stage2的入 口处 初始化硬件设备 检查内存映射 加载内核和根文件系 统映像 设置内核启动参数 调用内核 北京联合大学 毕业设计 13 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.o 3、复制更名原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_config 系统会根据这条命令找寻当前目录下的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 for qq2440v3 board.”则说明上述配置修改 成功。 6、如果现在键入 make,系统就会在当前目录下编译生成“u-boot.bin”文件。 但这个文件烧写到开发板上后,开发板却没有任何反映。这是由于这个 u-boot 是 用于 s3c2410 的,虽然名字改成了 qq2440v3,但也只是改了名字而已,其中对开 发板的一些硬件的初始化都没有修改。故而,需要修改源代码,将其对开发板硬件 的初始化适用于 qq2440v3。 修改过程如下: a、因为 qq2440 的 hclk=100mhz,修改内存刷新时间 #define refcnt 1268 b、修改时钟频率,使其中的 mpll、分频、机器 id 符合实际的开发板 #define s3c2440_mpll_400mhz (0x5cmpllcon = 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_clock_power添加 camdivn s3c24x0_reg32 camdivn; e、针对 s3c2440 特性添加以下 fclk:hclk:pclk 的换算关系 在vim cpu/arm920t/s3c24x0/speed.c中进行修改: 增加以下宏定义: #define s3c2440_clkdivn_pdivn (1clkdivn; camdiv = clk_power-camdivn; switch(clkdiv break; case s3c2440_clkdivn_hdivn_2: hdiv = 2; break; case s3c2440_clkdivn_hdivn_4_8: hdiv = (camdiv break; case s3c2440_clkdivn_hdivn_3_6: hdiv = (camdiv 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 break; case s3c2440_clkdivn_hdivn_2: hdiv = 2; break; case s3c2440_clkdivn_hdivn_4_8: hdiv = (camdiv break; case s3c2440_clkdivn_hdivn_3_6: hdiv = (camdiv break; return get_fclk() / hdiv / (clkdiv 北京联合大学 毕业设计 16 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_setup_memory_tags1 #define config_cmdline_tag1 g、修改 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; s3c24x0_reg32 nfmeccd; s3c24x0_reg32 nfstat; s3c24x0_reg32 nfestat0; s3c24x0_reg32 nfestat1; s3c24x0_reg32 nfsecc; s3c24x0_reg32 nfmecc0; s3c24x0_reg32 nfmecc1; s3c24x0_reg32 nfsblk; s3c24x0_reg32 nfeblk; /*_attribute_(_packed_)*/ s3c2440_nand; 北京联合大学 毕业设计 17 h、添加 nand_flash.c 里要使用的函数 static inline s3c2440_nand * const s3c2440_getbase_nand(void) return (s3c2440_nand * const)s3c2410_nand_base; i、将 nand_flash.c 加入到目录 cpu/arm920t/s3c24x0/下,为上层提供 nandflash 驱 动接口函数,让 u-boot 使用 j、修改 makefile 编译进 image 里 k、执行 make 编译 u-boot,生成 u-boot.bin 执行到这里时,说明 u-boot 已经加载完成,只需要将生成的 u-boot.bin 烧写 到开发板中的 0x000000 地址处,就可以在启动时自动加载这段程序了。 3.4 linux 内核分析与文件系统移植内核分析与文件系统移植 3.4.1linux 启动过程启动过程 在 bootloader 将 linux 内核映像拷贝到 ram 中以后,通过 call_linux(0,machin e_type,kernel_params_base)这句代码启动 linux 内核。一般的嵌入式系统均采用压缩 内核的方式,对 arm 系列处理器来说 zimage 的入口程序即为 arch/arm/boot/compre ssed/head.s。它依次成了 mmu 和 cache 的开启,并且调用函数解压内核,最后通 过调用 call_kerne()函数进入非压缩内核 image 的启动。 3.4.2linux 内核的移植内核的移植 在 linux 内核部分,也要根据设计需要进行相应的修改 a)修改顶层 makefile,用来指定体系结构和交叉编译器 arch ?= arm cross_compile ?= arm-linux- b) 修改晶振频率 s3c24xx_init_clocks(16934400)改为 s3c24xx_init_clocks(12000000) 用 make s3c2410_defconfig 先配置系统默认的 2410 配置,linux 内核具备一个 现代操作系统的所有功能,并能对绝大多数硬件提供支持,但是对于每个设计来说, 并不是所有的功能都会被用到,所以要在配置内核时,对所需要的功能进行相应的 配置。 用 make menuconfig 配置 linux 内核,即保留需要的内容,这样可以减少内核文 件的大小。 在 linux-/arch/arm/plat-s3c24xx 目录下的 common-smdk.c 中对系统进行分 北京联合大学 毕业设计 18 区,我将系统分为了 4 个区,分别是引导区,内核区,文件系统区和保留区,代码 如下: 0 = .name = “boot loader”, .size = sz_1m, .offset = 0, , 1 = .name = “linux kernel”, .size = sz_4m - sz_1m, .offset = sz_1m, , 2 = .name = “file system”, .size = sz_8m, .offset = sz_4m, , 3 = .name = “reserved”, .size = sz_64m - sz_8m - sz_4m, .offset = sz_4m + sz_8m, 这些代码为对 nand flash 的分区代码,它会显示在内核启动信息中。在之后设 置的 u-boot 引导参数,要将其设置为内核所在分区的地址;最后制作的文件系统也 要放到相应分区。 .name 为分区名;.size 为分区大小;.offset 为分区起始地址相对于 0 的偏移。可 根据自己喜好设定。 编译内核,当出现这些信息时,代表编译成功: image name: linux- created: wed mar 16 09:56:26 2011 image type: arm linux kernel image (uncompressed) data size: 1910332 bytes = 1865.56 kb = 1.82 mb load address: 0x30008000 entry point: 0x30008000 image arch/arm/boot/uimage is ready 编译成功后将在 arch/arm/boot 中生成可用于 u-boot 加载的 linux 内核 uimage 文件。 3.5 文件系统的设计文件系统的设计 北京联合大学 毕业设计 19 linux 支持多种文件系统,不同的文件系统类型也有着各自的特点。所以在选 择文件系统类型的时候,就需要根据存储设备的硬件特性和系统的需求进行相应的 选择。 在 linux 系统中,主要的存储设备分为随机存取存储器 ram 和只读存储器 rom。而常用的基于这两种存储设备的文件类型有:jffs2,yaffs,ramfs/tmpfs 等。 在本设计中采用了 jffs2 作为文件系统 3.5.1jffs2 文件系统介绍文件系统介绍 jffs2 文件系统主要应用与 nor 型的存储设备中,它最主要的特点是可读写、 支持数据压缩,掉电不易失,在掉电时会自动保存数据,为系统提供了一种安全的 保护模式。jffs2 的数据压缩方式和 cramfs 一样,其数据可存放在全部的闪存区 域中,数据的写入和删除分布在很大一片区域中以防止同样的块会被重复使用。但 是当文件系统已经接近饱和是,jffs2 会因为垃圾收集的关系,导致系统运行速度的 降低。 下面列举文件系统中应该包含的重要目录: /bin 目录:该目录下存放所有用户(包括系统管理员和一般用户)都可以使用的基 本命令。 /sbin 目录:该目录下存放系统命令,即只有管理员能够适用的命令。 /dev 目录:该目录下存放的是设备文件(字符设备和块设备) 。 /etc 目录:该目录下存放各种配置文件。 /lib 目录:该目录下存放共享库和可加载模块(即驱动程序) 。 /home 目录:即用户目录,它是可选的.在该目录下有一个以用户名命名的子目录,用 于存放用户相关的配置文件。 /root 目录:根用户(即 root)的目录。 /usr 目录:该目录下存放的是可以在多个主机间共享,只读的程序和数据。 /var 目录:与/usr 目录相反,里面存放可变的数据。 /proc 目录:这是一个空目录,常作为 porc 文件系统的挂接点。 /mnt 目录:用于临时挂接某个文件系统的挂接点,通常是空目录。 /tmp 目录:用于存放临时文件,通常是空目录。 3.5.2文件系统的制作文件系统的制作 在 boot loader 中,将文件系统映像烧录到 fla

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论