基于ARM的程序移植

上传人:仙*** 文档编号:31797542 上传时间:2021-10-12 格式:DOC 页数:40 大小:370KB
返回 下载 相关 举报
基于ARM的程序移植_第1页
第1页 / 共40页
基于ARM的程序移植_第2页
第2页 / 共40页
基于ARM的程序移植_第3页
第3页 / 共40页
点击查看更多>>
资源描述
兰州工业学院毕业设计说明书(论文)兰州工业学院毕业设计说明书(论文)1兰州工业学院毕业设计(论文)题题目目: : 基于基于 ARMARM 的程序移植的程序移植 系系 别别 电子信息工程系电子信息工程系 专专 业业 应用电子技术应用电子技术 班班 级级 * 姓姓 名名 * 学学 号号 * 指导教师(职称)指导教师(职称) *(讲师)(讲师) 日日 期期 20132013 年年 3 3 月月 兰州工业学院毕业设计说明书(论文)兰州工业学院毕业设计说明书(论文)2摘要摘要多媒体技术是当今信息技术领域发展最快,最活跃的技术,新一代的电子技术的发展,竞争与高速信息网络,多媒体技术,全球计算机网络和信息资源共享的焦点,被广泛应用在许多行业中。嵌入式系统是目前最有前途的应用程序 S3C2410 是新一代的移动应用处理器,该处理器拥有出色的多媒体处理能力。本文介绍了 嵌入式 Linux 软件开发环境的设计和开发过程 ,S3C2410 平台的多媒体播放器,设计的 Mplayer 移植到 S3C2410 平台,实现多格式的视频文件播放。最后 Mplayer 的高性能嵌入式平台的测试对比, 得到最终可行的解决方案。关关键键词词: 嵌入式; Mplayer; S3C2410,软件迁移兰州工业学院毕业设计说明书(论文)兰州工业学院毕业设计说明书(论文)1 Abstract Multimedia technology is the field of information technology development is the fastest, the most active technology, the development of electronic technology of the new generation, competition and high-speed information network, multimedia technology, the focus of global computer networks and information resource sharing, is widely applied in many industries. Embedded system is the most promising application of S3C2410 is a new generation of mobile application processor, the processor has the multimedia processing ability outstanding.This paper describes the design and development process of embedded Linux software development environment, S3C2410 platform multimedia player, the design of the Mplayer transplanted to S3C2410 platform, realize multiple format video files playback. Test of high performance embedded platform and Mplayer, to get the final solution.Keywords: embedded system; Mplayer; S3C2410, software migration兰州工业学院毕业设计说明书(论文)兰州工业学院毕业设计说明书(论文)2目目录录第一章 绪 论 .11.1 选题的背景及意义 .11.2 嵌入式数据库的移植应用 .21.3 多媒体播放器的移植 .3第二章 嵌入式开发环境 .42.1 硬件平台的设计方案.42.1.1 核心板设计 .42.1.2外设电路设计 .72.2 嵌入式软件开发环境 .92.2.1 引导装载程序 .102.2.2 宿主机开发环境配置.112.2.3 交叉开发环境的建立.122.2.4 内核的编译 .132.2.5 烧制内核映像和文件系统.142.3 MINIGUI 在 S3C2410 开发板上的移植过程.15第三章 数据库移植的设计与实现 .193.1 嵌入式数据库 .193.1.1 嵌入式数据库的设计.193.1.2 嵌入式数据库 SQLite.203.2 SQLITE 内部结构及开发技术 .213.2.1 SQLite 内部结构 .213.2. 2 SQLite 开发技术 .233.3SQLITE 在 ARM-LINUX 平台上的实现 .24兰州工业学院毕业设计说明书(论文)兰州工业学院毕业设计说明书(论文)3第四章 多媒体播放器的设计.264.1 嵌入式播放器 MPLAYER的设计 .264.1.1 播放器的工作流程 .264.1.2 播放器的逻辑结构 .274.1.3 Mplayer 播放器的目录文件组织结构 .284.1.4 播放器对解码器和输出设备的管理方式.284.2 MPLAYER的移植 .294.2.1 安装交叉编译工具及解压源代码.294.2.2 编译 Mplayer.304.2.3 调试 .30总结.32参考文献 .33致谢.34兰州工业学院毕业设计说明书(论文)兰州工业学院毕业设计说明书(论文)1第一章 绪 论1.1 选题的背景及意义随着科技的发展和社会的进步,嵌入式计算机系统获得了越来越广泛的应用。在办公自动化领域,消费领域,通信领域,工业控制领域和军事领域等等领域中,都可以见到嵌入式系统的影子。尤其是在办公自动化、消费电子和通信领域中,可以说嵌入式系统应用得非常普遍。毫无疑问,伴随着嵌入式市场的蓬勃发展,会有越来越多的嵌入式设备希望得到嵌入式数据库管理系统的支持,进行数据的统一管理。今天嵌入式系统 尤其是 ARM 及 ARM 的程序移植 带来的工业年产值已超过了1万亿美元 ,1997年来自美国嵌入式系统大会 (Embedded System Conference)的报告指出 ,未来5年仅基于嵌入式计算机系统的全数字电视产品,就将在美国产生一个每年 1500亿美元的新市场 .美国汽车大王福特公司的高级经理也曾宣称,福特出售的 计算能力 已超过了 IBM,由此可以想见嵌入式计算机工业的规模和广度 .1998年11月在美国加州举行的嵌入式系统大会上 ,基于 RTOS 的Embedded Internet 成为一个技术新热点 .在国内,维纳斯计划 和女锅计划一度闹得沸沸扬扬 ,机顶盒、信息加电这两年更成了 IT 热点,而实际上这些都是嵌入式系统在特定环境下的一个特定应用.据调查,目前国际上已有两百多种嵌入式操作系统 ,而各种各样的 开发工具 、应用于嵌入式开发的 仪器设备更是不可胜数 .在国内,虽然嵌入式应用、开发很广 ,但该领域却几乎还是空白 ,只有三两家公司和极少数人员在从事这方面工作.由此可见 ,嵌入式系统技术发展的空间真是无比广大 (ARM 及 ARM 的程序移植) 。在一定程度上,对当代的办公自动化、工业控制、无限通信领域、网络方面提供了极大的方便。对嵌入式领域注入了血液,也对编程人员带来了便利。兰州工业学院毕业设计说明书(论文)兰州工业学院毕业设计说明书(论文)21.2 嵌入式数据库的移植应用嵌入式数据库的名称来自其独特的运行模式。这种数据库嵌入到了应用程序进程中,消除了与客户机 服务器配置相关的开销。嵌入式数据库实际上是轻量级的,在运行时,它们需要较少的内存。它们是使用精简代码编写的,对于嵌入式设备,其速度更快,效果更理想。嵌入式运行模式允许嵌入式数据库通过 SQL 来轻松管理应用程序数据,而不依靠原始的文本文件。嵌入式数据库还提供零配置运行模式,这样可以启用其中一个并运行一个快照。在嵌入式系统中,对数据库的操作具有定时限制的特性,这里把应用于嵌入式系统的数据库系统称为嵌入式数据库系统或嵌入式实时数据库系统(ERTDBS) 。可靠性要求是毋庸置疑的,嵌入式系统必须能够在没有人工干预的情况下,长时间不间断地运行。同时要求数据库操作具备可预知性,而且系统的大小和性能也都必须是可预知的,这样才能保证系统的性能。嵌入式系统中会不可避免地与底层硬件打交道,因此在数据管理时,也要有底层控制的能力,如什么时候会发生磁盘操作,磁盘操作的次数,如何控制等。底层控制的能力是决定数据库管理操作的关键 。目前嵌入式软件系统开发的挑战之一,体现在对各种数据的管理能否建立一套可靠、高效、稳定的管理模式,嵌入式数据库可谓应运而生。嵌入式数据库是嵌入式系统的重要组成部分,也成为对越来越多的个性化应用开发和管理而采用的一种必不可少的有效手段。嵌入式数据库用途广泛,如用于消费电子产品、移动计算设备、企业实时管理应用、网络 存储与管理以及各种专用设备,这一市场目前正处于高速增长之中。举简单例子,手机原来只用来打电话、发短信,现在手机增加了很多新的功能,比如彩信、音乐、摄影、视频等等,应用的功能多了,系统就变得复杂。兰州工业学院毕业设计说明书(论文)兰州工业学院毕业设计说明书(论文)31.3 多媒体播放器的移植多媒体播放器的移植随着人们生活水平的提高,消费结构发生了巨大变化,消费者用于娱乐方面的支出在总支出中所占的比例正在不断扩大。掌上多媒体系统可以满足人们对于试听以及便携的需求,另外还可以实现一些其他功能,如图片浏览、网络下载、以及影音录制等。目前市场上的掌上多媒体系统多是Windows CE、Symbian、Palm OS等商用操作系统,其开放的程序不够高,而且价格偏高,不适于第三方应用软件的移植。 ARM体系作为专用嵌入式系统设计的通用处理器内核,具备高性能、低功耗、易扩展的特点。本系统基于ARM9、嵌入式Linux操作系统设计并实现了一个更为开放的嵌入式平台,来实现掌上多媒体系统的诸多功能 。兰州工业学院毕业设计说明书(论文)兰州工业学院毕业设计说明书(论文)4第二章 嵌入式开发环境2.1 硬件平台的设计方案参考华恒 HHARM9-EDU-R3 教学实验平台的硬件电路设计,为了减小难度,增加通用性,我们可以选用跟实验平台相似的设计,把整个硬件电路设计成两个主要部分:核心板和外设板,两者通过插槽接口相接,功能的扩展只需通过对外设板的修改来达到。2.1.1 核心板设计1.存储部分构成核心板内存由图 2-2 中两块 HY57V561620CT 为 16M*16 位数据宽度的SDRAM 构成,两片拼成 32 位模式,公用 nGCS6 片选空间,共 64MRAM。通过参考 s3c2410 技术手册的内存映像地址,如图2-3,可以知道内存的起始地址为 0 x3000000012。核心板还集成有一片 8M*16 位数据宽度的 INTEL 28F128J3C FLASH,通过nGCS0 作为片选 。根据地址的分配与片选设置,我们设计的核心板存储部分电路图如图 2-3 和图 2-4 所示,从图 2-3 中可以看到, FLASH 使用的地址线为MA1 到 MA24,而使最高位 A0 接地,这 样使得 FLASH 的 0 地址为 0 x01000000,以后内核等的烧写地址也是以此为准。数据地址线为MD0 到 MD15,正好为 16位的数据宽度 。从图 2-4 可见,两片内存使用的地址线为MA2 到 MA25,而数据线分别为MD0-MD15 和 MD16-MD31,由于共用地址线和片选 nGCS6,而分别使用 32 位数据线,所以这两片 16 位宽度的内存共同组成了 32 位宽度的内存存储空间。兰州工业学院毕业设计说明书(论文)兰州工业学院毕业设计说明书(论文)5图 2-3 FLASH 电路接线图 2-4 内存电路接线2. 供电部分构成核心板的供电部分由 LV14A 六角施密特触发倒相器 (HEX SCHMITT-TRIGGER INVERTERS)和 AMS 1117800mA 低门限稳压器 (800mA Low Dropout 兰州工业学院毕业设计说明书(论文)兰州工业学院毕业设计说明书(论文)6Voltage Regulator)构成,具体电路如图 2-5 和图 2-6 所示:图 2-5 LV14A 电路图 2-6 AMS1117 电路从图 2-5 中还可以看到,核心板还有相应的电源指示灯D5LED,当核心板接收到 reset 信号时,指示灯灭,而正常工作状态,指示灯亮。3. 振荡电路部分构成核心板的振荡电路由两个晶振电路组成,如图2-7。12MHz 的晶振与 s3c2410 的 XTIpll、XTOpll 两个管脚相接,为内部振荡电路提供振荡源 (for internal OSC circuit)。32.768KHz 晶振与XTIrtc、XTOrtc 两个管脚相接,作为实时时钟 (Real Time Clock,RTC)振荡源11。兰州工业学院毕业设计说明书(论文)兰州工业学院毕业设计说明书(论文)7图 2-7 振荡电路4. 与外设板接口部分核心板与外设板是通过 144 针的插槽相接的,主要把核心板电路中的16根存储数据线 DM0-DM16、24 根存储地址线 MA0-MA23、8 根外部中断引线EINT0-EINT7、两路 UART 数据线与控制线、通用接口GPIO、IIC、SPI 以及其它的读写信号、控制线等引出供外设板调用。详细请参见图2-9。这里只使用到了 144 针的插槽接口,而没有使用168 线的内存条接口插槽或者 PCI 插槽,是由于 168 线需要用到金手指,走线很密,而且工艺要求高,两层板布线很难实现,可能需要4 层板才能完成,对于学校项目设计来说难度很大,而这样增加难度是没有必要的,因为144 针的接线已经基本能够满足实际需要,通过以上的接口可以连接通常使用的器件,如本项目需要使用到的LCD 和触摸屏等。2.1.2外设电路设计本设计中需要使用到的外设有LCD 显示屏和触摸屏,并且作为一个应用平台,外设电路不再包括有调试用的COM 接口和网络接口。因为软件的调试可以兰州工业学院毕业设计说明书(论文)兰州工业学院毕业设计说明书(论文)8先在 HHARM9-EDU-R3 平台上测试好后,再把核心板放到外设电路板上进行实测。1.LCD 显示屏模块接口基于电路设计的模块化,我们把LCD 显示屏与外设板分开,使用40 针的数据线进行联接,因为 LCD 屏及其外围电路通常可以整块地进行购买,这样设计也即省下了不必要的电路设计的麻烦。 LCD 屏我们选用 HHARM9-LCD-R4 模块,屏幕的大小为 240 x320 象素, LCD 屏模块接口电路如图 2-8 所示。图 2-8 LCD 屏模块接口电路2.触摸屏电路触摸屏控制器选用 ADS7846,由于触摸屏与 LCD 显示屏是贴在一起的,所以 ADS7846 的采集信号输入也是通过 LCD 显示屏模块接口引线接出来的,如图2-8 中的 RIGHT、LEFT 、UPPER、DOWN 引脚。通过对这四路输入信息的转换,即可把触摸屏上响应的电压信息转换成相应的坐标信息。ADS7846 电路如图2-9 所示。兰州工业学院毕业设计说明书(论文)兰州工业学院毕业设计说明书(论文)9图 2-9 触摸屏控制器 ADS7846 电路2.2 嵌入式软件开发环境本文设计的播放器是基于嵌入式Linux 操作系统进行设计。嵌入式Linux是按照嵌入式操作系统的要求而设计的一种小型操作系统。相对于WinCE、pSOS、palm05 等商用实时操作系统 (RTOS)它具有源码开放、易移植、模块化、资源丰富等优势。支持多线程、多进程;支持多种平台,如x86、PowerPC、ARM、MIPS 等等。如图 2-9 所示,它是由一个内核和一些可以定制系统模块组成,如文件模块,网络模块,各种驱动模块等。针对本应用,对其进行了裁剪和配置,只包含了系统所需的模块支持ext2jffs2 等文件系统;内存驱动模块提供内存管理功能;网络接口模块支持以太网接口;GPIO驱动模块主要是提供给键盘和触摸屏使用;图形驱动模块是图形用户界面(GUI)和图像显示的底层支撑模块;音频设备输出驱动模块支持音频数据的数模转换。兰州工业学院毕业设计说明书(论文)兰州工业学院毕业设计说明书(论文)10应用程序文件系统驱动模块内存驱动模块网络驱动模块GPIO驱动模块图形驱动模块音频输出驱动模块嵌入式 Linux 内核硬件平台图 2-10 嵌入式 Linux 体系结构2.2.1 引导装载程序BootLoader 就是在操作系统内核运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。最终,bootloader 把操作系统内核映像加载到RAM 中,并将系统控制权传递给它。Bootloader 程序与硬件平台有很强相关性,不同开发板需要不同的bootloader。与 Linux 一样,网上有很多开放源代码的bootloader,在为自己的开发板写 bootloader 程序时,可以先找到与硬件平台相类似的bootloader,然后只要做一些改动就可以在开发板上运行了。Bootloader 的功能相当于一个通信控制器,有了它之后,才可以通过串口或网口完成内核的加载和应用程序的烧写。当然,利用JTAG 技术也可以完成上述任务,但是, JTAG 烧写速度很慢12。本系统采用的是 ppcboot,ppcboot 在嵌入式系统中相当于 PC 机的 BI0S加上操作系统引导头部的内容,并且引导操作系统进行装载和运行,ppcboot启动后有一系列的命令,使得我们能够方便地对FLASH、RAM 进行操作,同时ppcboot 己经对系统的频率、定时器进行了设置,初始化了一个调试串口,这样可以通过串口或以太网进行数据的下载。 PPCBoot 的主要特点如下表所示1:兰州工业学院毕业设计说明书(论文)兰州工业学院毕业设计说明书(论文)11表 2-1 PPCBoot 的主要特点2.2.2 宿主机开发环境配置1.安装 Linux 系统宿主开发环境,我们选用在windows 下安装 VMware WorkStation 虚拟机+RedHat Linux 9.0 的组合来组建2。在虚拟机中安装 Linux 系统,我们选择自定义安装 (Custom),安装过程中先不用指定 PC 机上网卡的 IP 地址,在配置防火墙( Firewall)时,选择不安装防火墙( No Firewall) ,在选择软件 Package 时选择完全安装,即最后一项: Everything,这一项非常重要,这样安装会装上一些无用的东西而浪费一点磁盘空间,但是却可以避免以后使用中找不到某个程序的烦恼。2.NFS 和 TFTP 服务器的配置这里设置开发环境的网络环境,首先设置PC 机的 IP 地址为功能描述系统加载支持 NFS、以太网挂载操作系统和根文件系统内存操作支持内存查看、修改和比较设备驱动支持串口、 FLASH、外部SDRAM、EEP、ROM、LCD、USB、PCI 等驱动上电自检自动检测 FLASH、SDRAM 选型及使用情况, CPU 类型交互命令通过设定和访问环境变量灵活配置系统各项参数,灵活升级其他特点支持在线读写 Flash,支持 SCC/FCC 以太网、 TFTP 引导、IP 和 MAC 的预置功能兰州工业学院毕业设计说明书(论文)兰州工业学院毕业设计说明书(论文)12192.168.2.111,因为 HHARM9 开发平台在烧写时默认的 IP 为192.168.2.222,所以建议 PC 机也在此网段 (192.168.2.X),故我们选择了此IP 地址。然后配置 NFS 服务器,它是用于网络文档的共享之用的,可以把网络上的某个服务器的内容 mount 到本 PC 上,达到在本机访问网络服务器的目的。最后配置 TFTP 服务器,它是用于在网络中传送大型文件时用的,通过它可以方便进行文件的传输。以上的详细配置可以参见参考文献1中“NFS 和TFTP 服务器的配置 ”一节。开发板上程序的调试与这两个服务器分不开,需要使用NFS 的 mount 命令来共享宿主机目录的,而把宿主机上的镜像文件下载到开发板的内存中去则需要使用 TFTP 服务器,所以这两个配置非常重要。3.minicom 的配置minicom 是一个 RedHat Linux9.0 自带的通信终端程序,通过minicom 可以设置、监视串口工作状态,接收、显示串口收到的信息,并且在主机和开发板之间传递数据和控制指令,从而实现通过主机上调试开发板的目的。首先在 shell 下运行 ln -sf /dev/ttyS0 /dev/modem 来设置使用第一个串口,然后设置 minicom 的配置文件 /etc/minirc.dfl 为pr port /dev/ttyS0pu baudrate 115200pu minit pu mreset pu rtscts No它表示端口为 /dev/ttyS0、波特率为 115200、数据位 8 位、停止位 1 位、无奇偶校验位、无数据流控制。兰州工业学院毕业设计说明书(论文)兰州工业学院毕业设计说明书(论文)132.2.3 交叉开发环境的建立PC Linux 上的编译器安装于 /usr/bin 目录下,这是在完全安装 RedHat Linux 时已经安装好的,但是对于交叉编译,需要交叉编译器来生成可以在ARM 开发板上执行的二进制应用程序。我们安装的是 ARM 板的交叉编译器,可以上网去下载编译器,也可以使用华恒实验箱自带的编译工具。这里我们使用后者,安装华恒的光盘后,即可在/opt/host/armv4l/bin 目录下安装了交叉编译器2。 为了以后使用的方便,我们还可以在可执行程序的路径加入到PATH 中去:#vim /.bashrc在.bashrc 最后面加上一句export PATH=”$PATH:/opt/host/armv4l/bin”再执行#source .bashrc重启环境变量。当需要使用时就可指出编译器的位置。2.2.4 内核的编译安装华恒提供的光盘时,嵌入式 Linux 内核及设备驱动源代码(光盘安装后建立完备的开发环境)被安装到 /HHARM2410/kernel 目录下,交叉编译的工具如下表 2-4 所示被放置到 /opt/host/armv4l 目录下。表 2-4 交叉编译的工具GNU 工具集armv4l-unknown-linux-gccarmv4l-unknown-linux-cc1plusarmv4l-unknown-linux-ranlibarmv4l-unknown-linux-asarmv4l-unknown-linux-objcopyarmv4l-unknown-linux-stringsarmv4l-unknown-linux-ldarmv4l-unknown-linux-objdumpmv4l-unknown-linux-gdbarmv4l-unknown-linux-g+armv4l-unknown-linux-stripArmv4l-unknown-linux-gasparmv4l-unknown-linux-cc1armv4l-unknown-linux-nmArmv4l-unknown-linux-size兰州工业学院毕业设计说明书(论文)兰州工业学院毕业设计说明书(论文)14cd /HHARM2410-R3/kernel make zImage 编译完成后,就会自动把 zImage 复制到/tftpboot/目录下以供 TFTP 下载。 如果需要对内核进行配置和裁剪,可以在 /HHARM2410/kernel 目录下键入 make menuconfig 则出现如下界面,可逐项对内核和驱动模块进行选择和配置: 可见内核版本为: Linux Kernel v2.4.18-rmk7-pxa1一些关键的设置: System Type - (S3C2410-based) ARM system type - S3C2410 Implementation * SMDK (MERI TECH BOARD) * change AIJI S3C2410 USB function support - Processor Type * ARM920T CPU idle * ARM920T I-Cache on * ARM920T D-Cache on Force write through caches on ARM920T Support Thumb instructions (experimental) 完成自己的设置后,退出,保存配置,然后执行 make zImage 即可编译生成自己定制的内核映像文件,并自动被复制到/tftpboot/目录下以供烧写 。2.2.5 烧制内核映像和文件系统内核映像和文件系统烧写的大致过程如下:(1)在 PC 机启动 minicom,按复位键重启开发板,在minicom 中应该有启动信息,立即按空格键或回车键,让开发板停留在ppcboot 的提示符“SMDK2410 #” ,进行以下烧写; (2)下载、烧写内核zImage,tftp 0 x30008000 zImage /通过 TFTP 下载内核 armv4l-unknown-linux-cpparmv4l-unknown-linux-arArmv4l-unknown-linux-addr2line兰州工业学院毕业设计说明书(论文)兰州工业学院毕业设计说明书(论文)15fl 0 x40000 0 x30008000 0 xe0000 /烧写刚下载的文件到指定的位置。(3)下载、烧写文件系统 ramdisk.image.gz; tftp 0 x30800000 ramdisk.image.gz /通过 TFTP 下载 ramdisk 文件系统fl 0 x140000 0 x30800000 0 x240000(4)下载、烧写 cramfs 文件系统和 JFFS2 文件系统,tftp 0 x30008000 cramfs.img /通过 TFTP 下载 cramfs 文件系统 fl 0 x540000 0 x30008000 0 x200000 tftp 0 x30008000 jffs2.img /通过 TFTP 下载 jffs2 文件系统 fl 0 x700000 0 x30008000 0 x200000烧完后重新启动开发板,便可以从flash 里面读出配置的内核以及根文件系统并运行Linux。2.3 MiniGUI 在在 S3C2410 开发板上的移植过程开发板上的移植过程(1) 交叉编译 MiniGUI首先,从网上下载三个源码包( http:/www.minigui.org/访问网址超出本站范围,不能确定是否安全 继续访问 取消访问http:/www.minigui.org/) ,同时可以下载到相应 的用户手册15。libminigui-1.3.x.tar.gz:MiniGUI 函数库源代码,其中包括libminigui、libmgext 和 libvcongui。 minigui-res-1.3.x.tar.gz: MiniGUI 所使用的资源, 包括基本字体、图标、位图和鼠标光标。 mde-1.3.x.tar.gz:MiniGUI 的综合演示程序。先安装 MiniGUI 的函数库,我们先在 PC 的根目录下建立一个名为minigui 的目录,将下载的三个源码包全部复制到minigui 目录下,再在minigui 目录下建立一个名为 miniguitmp 的目录,用来存放生成的文件和兰州工业学院毕业设计说明书(论文)兰州工业学院毕业设计说明书(论文)16minigui 库函数。解压 libminigui-1.3.x.tar.gz(tar zxf libminigui-1.3.x.tar.gz )生成 libminigui-1.3.x.目录,编写脚本文件配置 lib 内容如下:./configurehost=arm-unknown-linuxenable=jpgsupport=no-enable-pngsupport=noenable-gifsupport=no disable-lite-prefix=/minigui/miniguitmp enable-smdk2410ial=yes保存为 setup.shhost 用于指明宿主机的类型 disable-lite 用来指定生成基于线程的minigui 版本而不是生成基于进程的minigui 版本 prefix 用于指定 MiniGUI函数库的安装路径 /minigui/miniguitmp,进入该目录运行 ./configure 脚本文件,我们为了适合我们的开发板做了适当的修改,其他的开发板类似。根据 PC 机的交叉编译环境安装的路径修改libminigui-1.6.x.目录下的configure 文件,在文件的开头处加入编译器的安装路径,然后保存,笔者主机上交叉编译器安装路径是 /usr/local/arm/,所以修改如下:CC=/usr/local/arm/3.3.2/bin/arm-linux-gccCPP=/usr/local/arm/3.3.2/bin/cppLD=/usr/local/arm/3.3.2/bin/arm-linux-ldAR=/usr/local/arm/3.3.2/bin/arm-linux-arRANLIB=/usr/local/arm/3.3.2/bin/arm-linux-ranlibSTRIP=/usr/local/arm/3.3.2/bin/arm-linux-strip然后运行脚本文件./ setup.shmakemake install如果运行成功,就会生成定制的MakeFile文件,执行 make 和 make install 后相应的函数库就安装到 /minigui/miniguitmp/lib 下,在执行 make install 命令是用户一定要具有 root 权限。兰州工业学院毕业设计说明书(论文)兰州工业学院毕业设计说明书(论文)17下面安装 MiniGUI 资源,这些资源包括基本字体、图标、位图和鼠标光标等等。解压 minigui-res- 1.3.x tar.gz(ar zxf minigui-res-1.3.x tar.gz) ,进入生成目录,修改 configure.linux 文件,指明 TOPDIR= /minigui1.3.3/miniguitmp执行make install就可以把相关文件拷贝到 /minigui/miniguitmp/目录下的相关目录中去。执行后会在 /minigui/miniguitmp/ 下生成 usr/local/lib/minigui/res 相关目录,以下为 res 目录下的子目录,用户有兴趣可以进入以下目录查看其中的内容。bmp cursor font icon imetab(2) 制作带有 MiniGUI 的文件系统映象( root_minigui.cramfs)CRAMFS 是 Linus Torvalds 撰写的只具备基本特性的文件系统。 CRAMFS 是一个简单的,经压缩以及只读的文件系统,通常要为文件系统建立映象,首先要建立并安装 CRAMFS 工具,在这里我们使用 mkcramfs 工具建立自己的文件系统映象。开发板上的 linux,自带有 VESA FrameBuffer 设备驱动程序,并且初始状态已经激活,这样 MiniGUI 就可以使用 FrameBuffer 作为图象引擎来显示图象。将/minigui/miniguitmp/lib 中所有的库文件复制到 root_minigui 的/usr/lib 中,将 /minigui/miniguitmp/usr/local/lib/minigui 目录复制到 root_minigui 的/usr/lib 目录中,在 /root_dir/root_minigui/usr/local 下执行 ln s /usr/lib lib,生成一兰州工业学院毕业设计说明书(论文)兰州工业学院毕业设计说明书(论文)18个链接文件。修改/minigui/miniguitmp/etc/MiniGUI.cfg 文件,找到ial_engine=consolemdev=/dev/mouse改为ial_engine=SMDK2410mdev=/dev/ts然后保存退出。把/minigui1.3.3/miniguitmp/etc/MiniGUI.cfg 文件复制到/root_dir/root_minigui/usr/local/目录中。以上把 MiniGUI 运行库和其它资源环境已经拷贝到root_minigui 文件系统中,同时把 mde-1.3.0/src/下可执行文复制到 /usr/local/bin 下。然后编译文件系统,在 /root_dir 执行rootlocalhost root_dir# mkcramfs root_minigui root_minigui.cramfs就可以生成 root_minigui.cramfs 文件系统映象,把 root_minigui.cramfs 复制到 PC 机的/tftproot 下,通过 tftp 命令把文件系统下载到 2410 开发板上。重启开发板后执行:#cp /usr/local/bin/* /tmp /将可执行文件复制到 /tmp 临时目录下#cd /tmp /用 cd 命令去到 /tmp 目录下经过以上工作,用户就可以在 /tmp 目录下执行自己的应用程序了。例如:执行#chmod 777 helloworld /改变权限 ,使兰州工业学院毕业设计说明书(论文)兰州工业学院毕业设计说明书(论文)19其为可执行#./helloworld /执行 helloworld这样就成功的将带有 minigui 界面的文件系统成功的移植到了我们的开发板上了。第三章 数据库移植的设计与实现3.1 嵌入式数据库3.1.1 嵌入式数据库的设计嵌入式数据库系统是指支持某种特定计算模式或移动计算的数据库管理系统,它通常与操作系统和具体应用集成在一起,运行在智能型嵌入式设备或移动设备上。嵌入式数据库的使用是采用程序驱动,即由程序调用相应的API 来实现数据的存取。具有体积小巧、快速高效、稳定可靠、可移植性等特点,非常适用于嵌入式环境下的数据管理 .。嵌入式数据库的主要设计思想如 图 3-1 所示,在向上层应用提供标准的数据库接口的同时,摆脱传统数据库仅仅由软件驱动的束缚,根据嵌入式系统的实际情况用 SOC 技术同时实现硬件驱动。软件部分按SQL92 标准实现 SQL 语句的解析,实现事务管理功能、数据同步机制、数据的备份和恢复,软件部分不关心数据的实际存储,用标准C 实现,能同任何嵌入式操作系统内核一同编译,能支持各嵌入式操作系统的安装格式,由数据库硬件驱动专用芯片实现对实际数据的访问功能(存储器读写, I/O 通讯,异构数据库接驳)。兰州工业学院毕业设计说明书(论文)兰州工业学院毕业设计说明书(论文)20SQL 标准应用接口数据库软件及驱动 APL数据库硬件驱动专用芯片数据实际存储器应用程序图 3-1 嵌入式数据库驱动结构图3.1.2 嵌入式数据库 SQLiteSQLite 是 D. Richard Hipp 在 2000 年开发的一个小型嵌入式数据库。他是完全独立的,不具有外部依赖性,可以较为方便地应用于嵌入式系统中。其源代码完全开放,可以免费用于任何用途,包括商业目的。SQLite 虽然是个极端轻量级的关系数据库,却保留了数据库的大部分特征,他提供了对SQL92 标准的大多数支持 :支持多表和索引、事务、视图、触发和一系列的用户接口及驱动。其主要特征如下: :(1) 支持原子的、一致的、独立的和持久的 (ACID) 事务特性,即使系统崩溃和掉电。(2) 零配置(Zero2configuration),无需安装和管理。(3) 一个完整的数据库存储在单一磁盘文件中。兰州工业学院毕业设计说明书(论文)兰州工业学院毕业设计说明书(论文)21(4) 数据库文件可以在不同字节顺序的机器间自由共享。(5) 支持数据库大小至 2 TB。(6) 字符串和二进制大对象 (BLOBs) 的大小仅被有效内存限制。(7) 源码体积小,编译后低于 250 kB。(8) 大部分的操作比关系型数据库引擎要快。(9) 简单易用的 API。SQLite 由于小、快、简单、可靠 ,而且作者完全放弃版权,从他一发布出来,便深受欢迎。对于嵌人式环境 ,管理、执行、维护的简单化比企业数据库引擎提供的许多复杂应用更重要 ,因此 SQLite 数据库是一个很好的选择。3.2 SQLite 内部结构及开发技术3.2.1 SQLite 内部结构SQLite 采用模块化的设计,主要由4 个部分组成 :内核(Core)、SQL 编译器( SQL Compiler)、后端(Backend)以及附件 (Accessories)。内部结构如图3-2 所示。兰州工业学院毕业设计说明书(论文)兰州工业学院毕业设计说明书(论文)22Virtual MachinecoreB-TreepagerOS InterfaceTokenizerparserCode GeneratorSQL CompilerTest CodeAccessoriesUtilitiesSQL Command processorIntfaceBackend SQLite 的接口是一些已经编写好的C 库,即使使用不同语言的 API,在底层仍然使用 C 库执行。 SQL 语句通过接口进入到高效的SQL 编译器,由标记处理器 ( tokeni2zer)分解成柠檬分析器 (par ser) 可以识别的各个标志符,然后由分析器重新组合标志符并调用代码生成器(code generator) 生成虚拟机器码,交由虚拟机 ( virtual machine)去执行,最终完成 SQL 语句指定的任务。虚拟机是 SQLite 内部结构的核心,不仅完成与数据操作相关的全部操作,而且还是客户和存储之间信息进行交换的中间单元。数据库按照B 树(B2t ree) 的形式存储在磁盘上,通过可调整的页面缓冲(pager) 获得对数据的快速查找和存储。为了方便移植 ,SQLite 使用一个抽象层接口 (OS in2terfac 与不同操作系统进 行对接。图 3-2 内部结构图兰州工业学院毕业设计说明书(论文)兰州工业学院毕业设计说明书(论文)233.2. 2 SQLite 开发技术 SQLite 本身提供了 C 语言的 API 接口,使得对数据库的操作十分简单,主要是对 3 个 API 函数的调用。1. 打开数据库int sqlite3 open (const char 3 filename , / 3 数据库文件名(U TF28) 3 /sqlite3 3 3 ppDb / 3 输出 SQLite 数据库句柄 3 /) ;2. 执行SQLint sqlite3 exec (sqlite3 3 , / 3 已经打开的数据库句柄 3 /const char 3 sql , / 3 要执行的 SQL 语句 3 /sqlite callback , / 3 回调函数 3 /void 3 , / 3 回调函数的第一个参数 3 /char 3 3 errmsg / 3 错误信息返回 3 /) ;3. 关闭数据库int sqlite3 close ( sqlite3 3 ) ; / 3 参数就是打开时的结构体 ,即数据库句柄 3 /其中,sglite3 exec ( ) 函数的第二个参数用来处理一条或多条SQL 语句,语句间必须用 “;”号隔开。如果是查询 (SEL ECT) 语句,查询结果的每一条记录都必须调用第三个参数的Callback 函数,第四个参数则为 Callback 函数的第一个参数指针。如果不是查询语句,第三、四个参数为NULL。所有SQL 执行完毕后返回 0,否则返回错误代码 ,可通过第五个参数值来查看详细错误信息。兰州工业学院毕业设计说明书(论文)兰州工业学院毕业设计说明书(论文)243.3SQLite 在 ARM-Linux 平台上的实现 SQLite 嵌入式数据库提供了以源码发布的方式,要在众多的硬件平台进行移植,可以根据不同平台对源码进行交叉编译来实现。编译主要有以下几个步骤:1.到 http :/ / www. sqlite. org/ 的 cvs 中下载最新的源代码包,解压并根据需要进行适当的修改后将生成sqlite 目录,另外新建并转到一个与sqlite 目录平行的同级目录,如 make 目录。2.用“echo PATH”命令查看 PATH 中是否已经包含交叉编译工具arm linux gcc。为了在 ARM Linux 下能正常运行 sqlite,需要对 sqlite/ src/ sqliteInt . h 作一定的修改,以确保 bt ree (B 树)有正确的变量大小,如 “pt r”和“char 3 ”。不同体系结构的 Linux,如 x86 和 ARM,会有些差别。对于ARM2Linux 可以找到如下部分:# ifndef IN TPTR_ TYPE# if SQL ITE_PTR_SZ = = 4# define IN TPTR_ TYPE int# else# define IN TPTR_ TYPE long long# endif在上面的代码前加上一句# define SQL ITE_PTR_SZ 4这样后面的 “typedef INTPTR_ TYPE pt r ;”就是定义的 “int”类型,而不是“long long”。兰州工业学院毕业设计说明书(论文)兰州工业学院毕业设计说明书(论文)25准备使用 configure 进行一些配置。请在 sqlite 目录下的 configure 中找到如下 4 处,并将他们注释掉,这样可以让configure 不去检查你的交叉编译环境。 修改 Makefile 文件。将代码行 BCC = arm linux gcc g O2 改成 BCC = gcc g O2 。另外,一般是以静态链接的形式将sqlite 放到 ARM Linux 的硬件板上运行的,所以继续修改Makefile ,找到标记为 sqlite :的代码段,将其中的 libsqlite. la 改成. libs/ libsqlite. a 。做完上述修改,用make 生成 sqlite 、libsqlite. a 、libsqlite. so 。为了减小执行文件大小可以用 st rip 处理,去掉其中的调试信息。在 ARM 板上运行 sqlite。将 sqlite 拷贝到 ARM 板上,方法很多,需要根据具体的情况来选择。如 ftp 、cm2 dftp 、wget 等。将 sqlite 下载到ARM 板的/ tmp 目录,因为此目录是可写的。修改权限并运行:chmod + wx sqlite. / sqlite test . sqlite会出现sqlite 如果一切正常,现在 sqlite 已经在 ARM Linux 下跑了起来,然后就可以基于此进行进一步的应用开发了。兰州工业学院毕业设计说明书(论文)兰州工业学院毕业设计说明书(论文)26第四章 多媒体播放器的设计4.1 嵌入式播放器 Mplayer 的设计4.1.1 播放器的工作流程媒体播放器要具备解码、音视频同步、播放的功能,其工作流程图如下图4-1 所示。首先,播放器进行自身的初始化,包括检测硬件平台、出错信息处理,打开实时时钟等等。然后读入媒体数据文件,并对文件格式进行解析。通过解析文件格式选择相应的分流器对音视频数据进行分流,并将分流后的数据存入到音视频各自的缓冲区中等待处理。下一步读取缓冲区中音、视频各自的头信息,分别将初始化音、视频的过滤器及解码器,开始进行解码。解码后收集时间戳,音、视频做同步处理。最后,将处理后的音、视频分别送到各自的输出设备上进行播出。兰州工业学院毕业设计说明书(论文)兰州工业学院毕业设计说明书(论文)27系统初始化读入媒体文件并分析媒体类型将音视频数据分流到不同的缓冲区音视频同步将音视频送入到相应的输出设备播放音视频分别进行解码开始处理完所有帧?结束YesNo图 4-1 播放器工作流程图4.1.2 播放器的逻辑结构下图 4-2 展示了嵌入式播放器 Mplayer 的逻辑结构,该结构主要分为4 个功能层,它们分别是: (1) 输入层(input layer) (2) 分流层(demuxer layer) (3) 解码层( decoder layer)(4) 输出层(output layer)兰州工业学院毕业设计说明书(论文)兰州工业学院毕业设计说明书(论文)28媒体文件读取媒体文件数据分流音频解码器选择音频解码音视频同步音频输出视频输出视频解码视频解码器选择图 4-2 播放器的逻辑结构4.1.3 Mplayer 播放器的目录文件组织结构为了实现 Mplayer 媒体播放器的强大功能,其源代码的文件非常庞杂,其中一部分功能是嵌入式播放器所不需要的,因此我们要对其进行必要的删改。考虑到嵌入式播放器的的需求 ,去掉其对 TV、VCD、DVD 支持的功能。播放器开始运行后,主程序文件mplayer.c 负责分流、解码、输出三个功能模块的文件调度 。4.1.4 播放器对解码器和输出设备的管理方式媒体文件格式的多样性决定了媒体播放器要处理各种类型的音、视频数据,媒体播放器高效的全局变量调用关系,使其能够为特定的音、视频数据快速准确地找到对应的解码器,为不同的输出设备安装相应的设备驱动。播放器将解码相关函数的指针放入一个结构体中,这个结构体在设计模式的意义上讲就是一个接口,这些接口被链在了一起,形成了一个接口表,通过对接口表的查询找出恰当的解码接口参与解码操作。播放器通过分析输入进来的兰州工业学院毕业设计说明书(论文)兰州工业学院毕业设计说明书(论文)29媒体文件头信息,从数据流列表( auto_open_streams)中选取对应的数据流类型,进而在分流器列表当中选择正确的分流器(demuxer)来对媒体文件进行音、视频分流。以视频 ffmpeg 解码器为例,这个解码器本身支持多种解码格式。播放器首先从视频驱动解码列表( mpcodecs_vd_drivers)中选择ffmpeg 视频库解码驱动( mpcodecs_vd_ffmpeg) ,ffmpeg 对每种压缩格式所提供的解码接口函数都被记录到一个叫AVCodec 的结构之中,所有的这些结构被链成一个链表,表头存放在一个静态变量之中,可以通过avcodec_find_decoder()函数来查找链表中的结构取得需要的AVCodec 结构进行解码。在这种方式下,要添加一个或一系列新的解码器是非常容易的,只需要将解码器的解码接口函数加入一个新的AVCodec 结构之中并将这个结构添加到链表之中,这样就可以通过同样的方法使用新加入的解码器了。对输入设备的管理与对解码器的管理十分的相似,它将所有的输出函数指针都存放到一个 vo_functions_t 的结构体中,这些结构被统一存放于数组video_out_drivers 之中,播放器提供了一个 init_best_video_out 方法来查询这个数组,如果成功的话会返回一个指定vo_functions 结构的指针,通过这个结构,可以操作特定的输出设备(如framebuffer) 。4.2 Mplayer 的移植4.2.1 安装交叉编译工具及解压源代码首先下载交叉编译工具及 Mplayer 源代码(其实华恒提供的实验资料的application 里面就有 Mplayer-0.91 的源代码) ,其实可以选择到 Mpl
展开阅读全文
相关资源
相关搜索

最新文档


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


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

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


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