《基于arm的linux多媒体播放器mplayer的设计与实现---大学毕业(论文)设计.doc》由会员分享,可在线阅读,更多相关《基于arm的linux多媒体播放器mplayer的设计与实现---大学毕业(论文)设计.doc(39页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、题目:基于ARM的Linux多媒体播放器的设计与实现系 (部):光学与电子信息学院专 业 班:电子科学与技术姓 名:学 号:指导教师: 2013年 6 月III摘 要当今社会是一个信息化的社会。嵌入式技术在这个时代得到了日新月异的发展。嵌入式技术已经引起了世界各国的高度关注。在这个背景下,本文提出了一种基于嵌入式ARM9-Linux的多媒体播放器的设计与实现方案。本文首先介绍了S3C2440开发板的硬件情况,嵌入式Linux操作系统在ARM微处理器上的移植技术,包括Linux系统环境建立,交叉编译环境的建立、引导程序vivi的烧写、移植嵌入式Linux内核,以及添加了Qtopia的根文件系统的
2、建立。最终实现了Linux到S3C2440开发板的移植。在此基础上通过移植多功能视频播放器Mplayer实现视频文件的播放,最后列举了编译mplayer常见问题及解决方法,分析了mplayer的工作流程。关键词: 交叉编译环境 ARM9-Linux多媒体播放器 移植mplayer AbstractThe contemporary world is an informationalized society. Embeddedtechnology has achieved enormous development by leaps and bounds in this age, and raise
3、d great concerns of countries around the world. Under this background, this paper puts forward a scheme of design and implementation of the media player based on embedded ARM9-Linux of. The paper introduces the hardware of the S3C2440 development board and the technology of transplanting embedded Li
4、nux operating system into the ARM microprocessor, including the establishment of Linux system environment and cross-compiling environment, the establishment of the loader vivi and the application of the embedded Linux transplant kernel, and adds the Qt root file system building. On this basis, by tr
5、ansplanting versatile video player, the writer accomplish playing video files, list the frequently asked questions and the solutions of compiling mplayer and analyze the workflow of mplayer at last.Key Words:cross-compiling environment media player based on embedded ARM9-Linux transplant mplayer目录摘
6、要IABSTRACTII1 引言41.1研究背景41.2发展状况和研究意义41.3本文组织结构52 构建硬件平台53软件配置和建立主机开发环境83.1宿主机开发环境的配置83.2配置minicom133.3配置NFS 服务143.4编译Bootloader163.5编译Linux 内核183.6制作文件系统194 QT开发环境的搭建204.1 QT简介204.2 QTE简介214.3嵌入式图形开发环境QTE的搭建215 移植MPLAYER235.1安装libmad245.2交叉编译Mplayer255.3 移植Mplayer到开发板测试286 MPLAYER功能及实现306.1播放器的工作流程
7、306.2播放器的逻辑结构306.3Mplayer播放器的目录文件组织结构316.4播放器对解码器和输出设备的管理方式327 结论或总结33参 考 文 献351 引言1.1 研究背景伴随着半导体技术、计算机技术、网络技术和软件技术的飞速发展,现如今,我们已经进入了后PC时代。在这一阶段电子产品的发展趋势是智能化、数字化、网络化、便携轻巧、易于操作,而嵌入式技术(Embedded Technology)的发展为人们提供了一个很好的解决方案。所谓嵌入式是指以应用为中心,以计算机技术为基础,软件、硬件可裁剪,适用于应用系统对功能、可靠性、成本、体积、功耗有严格要求的专用计算机系统【1】。嵌入式技术已
8、经被广泛的应用于科学研究、工程设计、军事领域和文艺商业的方方面面,嵌入式产品更是随处可见,比如消费电子产品、车载电子设备、智能家电、MP3、MP4等。如今人们随着生活水平的提高,对视听享受方面的要求也越来越高,人们不单仅仅满足于在电脑上或电视上欣赏高品质的音视频,也渴望能够随时随地的欣赏音乐观看电影,所以基于嵌入式技术的便携式多媒体播放器也成为了现今IT界研究的热点之一。面对广阔的市场需求,海内外的各大厂商也在积极研发自己的产品以抢占市场。基于这一背景,本文提出了一款基于嵌入式Linux操作系统和ARM处理器的视频播放器设计方案。1.2 发展状况和研究意义自从2002年法国的爱可视推出全球第一
9、款MP4多媒体Jukebox以来,基于嵌入式技术的便携式视频播放器已经发展了十年,经过这十年的发展,视频播放器技术已日趋成熟,市面上的产品支持的视频格式也越来越多,功能也越来越强大,很多MP4都集成了上网、游戏、个人事务处理甚至是视频录制、数码照相等功能。目前。很多提供视频播放器处理器的半导体厂商都推出有自己的视频播放器硬件解决方案,这些方案可以概括为以下四类:一类是以德州仪器、飞利浦为代表的基于CPU+DSP芯片的解决方案;一类则是以Intel和AMD为代表的基于通用CPU的解决方案;第三种则是以飞思卡尔和深圳安凯为代表的基于MCU芯片的解决方案;第四种是基于双CPU的解决方案。在软件方面基
10、本上市面上的便携式视频播放器都带有嵌入式操作系统,主要的操作系统有Vxworks、Palm OS、Windows CE、Linux、Android以及厂家自己开发的操作系统【2】。生产厂商在设计自己的产品时如果采用上述的硬件方案,都要支付一笔不菲的授权费用,而在嵌入式操作系统的选择上也只有Linux是开源免费的,所以产品成本比较高。ARM处理器具有体积小、功耗低、低成本、高性能等优点,并且支持Linux系统。所以可以选用ARM处理器配合Linux进行产品的设计,这样可以充分的利用Linux开源的特性,根据需要修改和移植一些免费的开源软件,这样不仅能降低产品研发的难度,加快产品的上市时间,还能省
11、去一笔不菲的软硬件授权费用【3】。1.3本文组织结构本文介绍了一款便携式视频播放器的设计工作,该视频播发器是以ARM处理器为硬件开发平台,嵌入式Linux作为操作系统,通过移植Linux上的一款优秀的开源视频播放器软件MPlayer来实现的。本文共分五章,内容安排如下:第一章,引言。介绍了本文的选题背景,当前国内外的发展状况以及研究意义,并对论文的主要工作进行了简单介绍。第二章,播放器总体设计方案介绍。主要介绍播放器的硬件整体架构第三章,系统开发平台的构建。本章详细介绍了Linux系统移植到ARM处理器的过程,Linux的移植主要包括三个方面:Booterloader的移植、Linux内核的移
12、植和根文件的制作。第四章,嵌入式图形开发环境QTE的搭建第五章,视频播放器mplayer的移植。介绍MPlayer的移植过程以及移植过程中遇到的各种问题和解决方法。第六章,分析mplayer播放器的工作模式和框架。2 构建硬件平台本设计使用的硬件开发平台是北京奥尔斯电子科技有限公司的OURS-2410-RP嵌入式实验开发系统。S3C2410RP 是一款基于三星 S3C2410X 16/32位RISC处理器( ARM920T)的为满足嵌入式专业教学的新要求而设计研发的新一代嵌入式实验基础平台。该款实验平台是一款集教学实验、课程设计、本科毕业设计、研究生课题研究与企业产品开发于一体的综合平台。这款
13、设备主要包括核心板与底板两个部分,核心板采用 6 层PCB 板设计、底板采用 4 层PCB 板设计,核心处理器是基于目前行业内主流使用的 SAMSUNG ARM9 S3C2410 处理器,主频 202MHz ,配套的存储器,网卡等设备;底板主要是各种类型的接口与扩展口。图1 S3C2410方框图S3C2410A采用了ARM920T内核, 0.18um工艺的CMOS 标准宏单元和存储器单元。它的低功耗、精简和出色的全静态设计特别适用于对成本和功耗敏感的应用。同样它还采用了一种叫做Advanced Microcontroller Bus Architecture(AMBA)新型总线结构。 S3C2
14、410A的显著特性是它的CPU 核心,是一个由Advanced RISC Machines(ARM)有限公司设计的 16/32位ARM920T RISC 处理器,如图1所示。ARM920T实现了MMU,AMBA BUS和Harvard高速缓冲体系结构【4】。这一结构具有独立的 16KB指令Cache和16KB数据 Cache,每个都是由8字长的行(line)构成。 通过提供一系列完整的系统外围设备,S3C2410A大大减少了整个系统的成本,消除了为系统配置额外器件的需要。l 核心板( 6 层PCB 电路)系统包括: CPU : SAMSUNG S3C2410处理器(202MHz ) SDRAM
15、:64M FLASH: 8M Inter Nor Flash NET : 10/100M Ethernet controller (DM9000) 总线驱动器:若干 电源稳压器 LDO:2 个 音频控制芯片 UDA1341: 1 个 双排插座 2.0 X 80 Pin:2 个 4个发光二极管l 底板(4 层PCB 电路)包括: 接口部分: Etherne 100M网口、UART 、USB1.1、并口、JTAG 接口、SMC 显示部分: 4.3寸真彩TFT液晶屏、VGA接口、8段数码管、LED 、LCD AIDIO 部分: AC97耳机接、麦克风 其它部分: STN 触摸屏、EEPROM、温度传
16、感器、电位器等图2 S3C2410开发板外观图3软件配置和建立主机开发环境3.1 宿主机开发环境的配置3.1.1安装VMware Workstation软件VM主机简称VM, 又称VM服务器. VM主机是灵动网络利用虚拟机(Virtual Machine)技术,将一台服务器分割成多个虚拟机(VM主机)的优质服务. 这些VM主机以最大化的效率共享硬件、软件许可证以及管理资源。对其用户和应用程序来讲, 每一个VM主机平台的运行和管理都与一台独立主机完全相同, 因为每一个VM均可独立进行重启并拥有自己的root访问权限、用户、IP地址、内存、过程、文件、应用程序、系统函数库以及配置文件。每个VM主机
17、都可分配独立公网IP地址、独立操作系统、独立超大空间、独立内存、独立CPU资源、独立执行程序和独立系统配置等. VM主机用户除了可以分配多个虚拟主机及无限企业邮箱外, 更具有独立服务器功能,可自行安装程序,单独重启服务器VMware软件包含一个用于英特尔x86相容电脑的虚拟机套装,其允许用户同时创建和运行多个x86虚拟机。每个虚拟机实例可以运行其自己的客户机操作系统,如(但不限于)Windows、Linux、BSD变生版本。VMware 软件可以实现不需要重新开机就在同一台电脑上使用几个操作系统,安装完成后如图3所示。 VMware 主要的功能有: 1 、不需要分区或重开机就能在同一台 PC上
18、使用两种以上的操作系统OS。 2 、完全隔离并且保护不同 OS的操作环境以及所有安装在 OS上面的应用软件和资料。 3 、不同的 OS之间还能互动操作,包括网络、周边、文件分享以及复制贴上功能。 4 、有复原(Undo)功能。 5 、能够设定并且随时修改操作系统的操作环境,如:内存、磁盘空间、周边设备等等。 6 、安装 Linux 操作系统就是基于 VMware Workstation 软件进行安装的,也就是可以在一台PC机上同时运行Windows 操作系统和Linux 操作系统。 图3 VMware Workstation 9软件3.1.2安装RedHat 9.0 操作系统RedHat(红帽
19、公司)创建于 1993 年,是目前世界上最资深的 Linux 和开放源代码提供商,同时也是最获认可的 Linux 品牌。基于开放源代码模式,为全球企业提供专业技术和服务。他们的解决方案包括红帽企业 Linux 操作平台,以及其他内容广泛的服务。因此,Red Hat不仅是全球最大的开源技术厂家,其产品 Red Hat Linux 也是全世界应用最广泛的Linux。Red Hat公司总部位于美国北卡罗来纳州。在全球拥有 22 个分部。 Linux是一种自由和开放源码的类Unix操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、
20、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。Linux是一个领先的操作系统,世界上运算最快的10台超级计算机运行的都是Linux操作系统。严格来讲,Linux这个词本身只表示Linux内核,但实际上人们已经习惯了用Linux来形容整个基于Linux内核,并且使用GNU 工程各种工具和数据库的操作系统。Linux得名于天才程序员林纳斯托瓦兹。 从网络上下载的RedHat 9.0是3个iso文件在VM中依次加载这三个镜像文件就可以实现RedHat 9.0的安装。注意在硬件窗口中添加串口和并口。安装完成如图4所示。 图4 RedHat9.0操作系统3.1.3交叉编译环境的建立交
21、叉编译(cross-compilation)是指,在某个主机平台上(比如PC上)用交叉编译器编译出可在其他平台上(比如ARM上)运行的代码的过程。交叉编译这个概念的出现和流行是和嵌入式系统的广泛发展同步的。我们常用的计算机软件,都需要通过编译的方式,把使用高级计算机语言编写的代码(比如 C代码)编译(compile)成计算机可以识别和执行的二进制代码。比如,我们在 Windows 平台上,可使用 Visual C+开发环境,编写程序并编译成可执行程序。这种方式下,我们使用 PC 平台上的 Windows 工具开发针对 Windows 本身的可执行程序,这种编译过程称为 native compi
22、lation,中文可理解为本机编译。然而,在进行嵌入式系统的开发时,运行程序的目标平台通常具有有限的存储空间和运算能力,比如常见的 ARM 平台,其一般的静态存储空间大概是 16 到 32 MB,而 CPU 的主频大概在 100MHz 到 500MHz 之间。这种情况下,在 ARM 平台上进行本机编译就不太可能了,这是因为一般的编译工具链(compilation tool chain)需要很大的存储空间,并需要很强的 CPU 运算能力。为了解决这个问题,交叉编译工具就应运而生了。通过交叉编译工具,我们就可以在 CPU 能力很强、存储控件足够的主机平台上(比如 PC 上)编译出针对其他平台的可执
23、行程序。(一)armv4l-unknown-linux-gcc 2.95.2交叉编译器的安装我首先安装的是开发版自带的armv4l-unknown-linux-gcc交叉编译器,版本号是2.95.2,编译器安装在/opt/home/armv4l/bin目录下在挂载U盘之前可以通过fdisk l命令查看U盘的名称,如图5所示图5 fdisk l命令查看U盘安装步骤如下 mkdir /mnt /usb /*若有该目录,则可以不必创建 */ mount t vfat /dev/sdb1 /mnt/usb /* 挂载U盘*/ cd /mnt/usb/Linux /* 进入U盘的 Linux 安装目录*
24、/ ./Install /* 执行开发环境自动安装脚本*/ 当开发环境安装完毕后,会在根目录下生成一个目录/2410RP_linux : /* 该目录中包含以下目录*/ CDROM:该目录中包括光盘中的所有内容。 Experiment_Key:该目录中包含了所有 S3C2410-RP目标板所使用的实验代码。 JFLASH_vivi :该目录中包含了所有可以下载并烧写到 S3C2410-RP目标板上运行的内核和文件系统。 kernel :该目录中包含了嵌入式 Linux 操作系统的源码,在此目录中可以重新定制编译内核。 Qt:该目录中包含了嵌入式图形化界面应用程序开发所需要的软件安装包。 roo
25、t :该目录包含了 2410RP的文件系统。 vivi :该目录是BootLoader 的源码目录,在此目录中重新编译vivi 。注意在安装中如果报错“找不到/2410RP_linux/CDROM/root”进入/2410RP_linux文件夹后把所有文件夹的名字都改成大写字母就能通过,错误的原因可能是系统在复制U盘中文件时误把大写文件名变成了小写。安装成功后用armv4l-unknown-linux-gcc v 命令即可查看gcc版本信息,如图6图6 armv4l-unknown-linux-gcc版本信息(二)arm-linux-gcc 3.3.2编译器的安装在这之后我又安装arm-lin
26、ux-gcc 3.3.2版本,因为开发版自带的编译器版本太低,后面编译mplayer时会报错,新编译器安装在/usr/local/arm/3.3.2/bin下 下载arm-linux-gcc-3.3.2.tar.bz2(有71.3M) 解压在/usr/local中 修改环境 export PATH=/usr/local/arm/3.3.2/bin:$PATH 安装成功后用arm -linux-gcc v 命令即可查看gcc版本信息,如图7图7 arm -linux-gcc版本信息3.2配置minicomminicom是一个通信终端程序,通过minicom可以设置、监控串口工作状态,接受、显示串
27、口收到的信息,并且在主机和开发板之间传递数据和控制指令,实现通过主机调试开发板的目的。在PC终端输入命令#:minicom s 进行配置。 port /dev/ttyS1 baudrate 115200 minit mreset rtscts No它表示端口为/dev/ttyS1,波特率为115200、停止位1位、无奇偶验证位、无数据流控制,如图8所示。图8 minicom设置界面注意这里的ttyS1,首先由于笔记本电脑没有串口,我这里用的是usb转串口线,在win7系统下已经把usb转换为串口信息,所以在虚拟机中不能用ttyUSB0,用了会报错。其次“S”一定要大写,如果是小写系统因无法识别
28、而报错。最后ttyS0对应COM1口,ttyS1对应COM2口以此类推,如果使用ttyS0系统报错,可以尝试ttyS1和ttyS2。3.3配置NFS 服务NFS (Network File System)指网络文件系统,是 Linux 系统中经常使用的一种服务,NFS是一个 RPC service ,很像 windows 中的文件共享服务。它的设计是为了在不同的系统间使用, 所以它的通讯协议设计与主机及作业系统无关。当使用者想用远端档案时只要用mount就可把remote 档案系统挂接在自己的档案系统之下,使得远端的档案在使用上和 local 的档案没两样。 图9 setup图形化设置界面在N
29、FS 服务中,宿主机(Servers)是被挂载(mount)端,为了远端客户机(Clients )(如:S3C2410RP 目标板)可以访问宿主PC机的文件,我们需要配置宿主机两方面内容:打开NFS服务,允许“指定用户 ”访问宿主PC机。a) 在终端输入“steup”进入图形化设置界面,如图9所示。b) 在System services选项中使用空格键选中NFS服务去掉 ipchains 和iptables服务。c) 在Firewall configuration选项中选择No firewall关掉防火墙,注意这里RedHat有一个小BUG,就是无论选择哪个等级的防火墙,下次进来时防火墙等级还
30、是HIGH。不用管它,只要选择No firewall系统就已经关闭了防火墙,尽管下次进来时还是HIGH。如图10所示d) 在exports 文件写入以下命令允许“指定用户” 访问宿主PC机/192.168.0.* (rw,insecure,no_root_squash,no_all_squash)e)设置主机IP和开发板IP,开发板IP在minicom中设置。图10 设置防火墙连接完网线和串口线之后就可以实现开发板和主机的通信了,在这之前可以使用PING命令来检测是否通畅。如果PING不通,可能是以下原因:1,开发板和主机不在同一网段,使用ifconfig eth0 *.*.*.* up命令。
31、2,主机防火墙开启了。3,看主机是否能ping通其他计算机。4,linux虚拟机设置为桥接。5.关闭无线网卡,如果存在多网卡,一定要将其他网卡关闭。这里的第4条和5条我都遇到了,VM虚拟机中网络连接方式默认为NAT,要把它改成BRIDGE。由于笔记本的网卡被开发板占用,我一直在用无线网上网查资料解决问题,最终才知道恰恰是要关闭无线网才能解决问题。3.4编译BootloaderBootloader是一段小程序,它在系统上电开始时执行,初始化硬件设备准备好软件环境,最后调用操作系统内核。由于Bootloadr需要直接操作硬件,所以它严重依赖于硬件,而且依据所引导的操作系统不同,也有不同的选择。Bo
32、otloader的启动过程分为单阶段和多阶段两种。往往多阶段Bootloader能提供更为复杂的功能和更好的移植性。从固态存储设备上启动的Bootloader大多都是两阶段的。第一阶段用汇编代码来实现;第二阶段用C语言来实现。(一)VIVI简介Vivi是韩国mizi 公司开发的 bootloader, 适用于 ARM9 处理器。 Vivi 有两种工作模式:启动加载模式和下载模式【5】。启动加载模式可以在一段时间后(这个时间可更改)自行启动 linux内核,这时vivi 的默认模式。在下载模式下,vivi 为用户提供一个命令行接口,通过接口可以使用 vivi 提供的一些命令,见下表1: 命令功能
33、Load把二进制文件载入 Flash或RAMPart操作 MTD分区信息。显示、增加、删除、复位、保存 MTDParam设置参数Boot启动系统Flash管理 Flash,如删除 Flash的数据 表1 vivi常用命令(二)vivi 代码分析 vivi 的代码包括 arch ,init ,lib,drivers 和include 等几个目录,共200 多条文件。 Vivi 主要包括下面几个目录: arch:此目录包括了所有 vivi 支持的目标板的子目录,例如 s3c2410 目录。 drivers:其中包括了引导内核需要的设备的驱动程序(MTD和串口)。MTD目录下分map、nand 和n
34、or 三个目录。 init : 这个目录只有 main.c 和version.c 两个文件。和普通的 C 程序一样, vivi 将从 main函数开始执行。 lib :一些平台公共的接口代码,比如 time.c 里的 udelay()和mdelay()。 include :头文件的公共目录,其中的s3c2410.h 定义了这块处理器的一些寄存器。Platform/smdk2410.h 定义了与开发板相关的资源配置参数,我们往往只需要修改这个文件就可以配置目标板的参数,如波特率、引导参数、物理内存映射等。图11 vivi的启动过程(三)vivi 的运行vivi 的运行分为两个阶段,如图11所示:
35、 vivi 的第一阶段 完成含依赖于CPU 的体系结构硬件初始化的代码,包括禁止中断、初始化串口、复制自身到RAM等。相关代码集中在 head.S(viviarchs3c2410 目录下); vivi 的第二阶段是从 main ()函数开始,同一般的 C 语言程序一样,该函数在/init/main.c文件中,包括打印vivi版本、时钟初始化和IO口初始化、内存初始化、堆栈初始化、MTD设备初始化、私有数据和内置命令初始化。(四)vivi 的编译VIVI默认是在文件夹/2410RP_linux/vivi 中,如果是第一次编译,需要输入下列2 条命令: cd /2410RP_linux/vivi/
36、 make clean make如果 vivi 工程没有问题,会生成的二进制文件vivi, 保存在/2410RP_linux/vivi 文件夹下以供后面烧写。3.5编译Linux 内核内核移植主要是指操作系统从一种硬件平台转移到另一种硬件平台上运行。对于嵌入式系统来说,有各种体系结构的处理器平台,使用的外围硬件也不一样。嵌入式Linux严重依赖于具体硬件,所以只要硬件平台有略微差别,也需要做一些移植的工作。Linux内核在PC上以文件的形式存在(保存成磁盘文件形式),就是所谓的“映像文件”。Linux内核映像文件最终是要烧录到目标板的flash中。Linux 内核映像文件有两种:一种是非压缩版
37、本,叫Image;另一种是它的压缩版本,叫zImage。zImage是Image经过压缩形成的,所以它的大小比Image小。为了能使用zImage这个压缩版本,必须在它的开头加上解压缩的代码,将zImage 解压缩之后才能执行,因此它的执行速度比Image要慢【6】。但考虑到嵌入式系统的存储空容量一般都比较小,内核要常驻内存,采用zImage可以占用较少的存储空间,因此牺牲一点性能上的代价也是值得的,所以一般嵌入式系统均采用压缩的内核映像文件,即zImage。为了达到生成zImage.bin文件,要分为下面两步:1、配置;2、编译。配置内核有多种方式,我们选用一种操作性比较好的图形界面,执行m
38、ake menuconfig 命令可以进入,通过此部分,我们可以方便的选择,决定哪些部分被加载并编译入LINUX内核,哪些部分被编译为模块,哪些部分不用。配置完成后,执行make zImage命令,编译后得到zImage.bin文件,保存在/2410RP_linux/kernel/arch/arm/boot 下面make clean后第一次使用make zImage命令,会占用相当长的时间。宿主机会根据autoconfig.h 文件对系统进行编译【7】。首先使用交叉编译器( armv4l-unknown-gcc )把各个文件夹下用过的 .c 文件编译为二进制的目标文件,其次用链接器 (armv
39、4l-unknown -ld)把这些目标文件连接到一起;最后压缩,就得到了内核的镜像文件 zImage 。这个文件是可以下载并烧写到S3C2410-RP目标板上运行的内核。3.6制作文件系统嵌入式系统与通用 PC机不同,一般没有硬盘这样的存储设备而是使用Flash闪存芯片、小型闪存卡等专为嵌入式系统设计的存储装置。Flash是目前嵌入式系统中广泛采用的主流存储器,它的主要特点是按整体/扇区擦除和按字节编程,具有低功耗、高密度、小体积等优点。目前,Flash分为 NOR, NAND 两种类型。鉴于 Flash存储介质的读写特点,传统的 Linux 文件系统己经不适合应用在嵌入式系统中,基于这样的
40、原因,产生了很多专为 Flash设备而设计的文件系统,这里我使用的是Cramfs文件系统。Cramfs 是Linux 的创始人 Linus Torvalds开发的一种可压缩只读文件系统在 Cramfs 文件系统中,每一页被单独压缩,可以随机页访问,其压缩比高达 2:1, 为嵌入式系统节省大量的 Flash存储空间。Cramfs 文件系统以压缩方式存储,在运行时解压缩,所以不支持应用程序以 XIP 方式运行,所有的应用程序要求被拷到RAM里去运行,但这并不代表比 Ramfs 需求的RAM 空间要大一点,因为 Cramfs 是采用分页压缩的方式存放档案,在读取档案时,不会一下子就耗用过多的内存空间
41、,只针对目前实际读取的部分分配内存,尚没有读取的部分不分配内存空间,当我们读取的档案不在内存时, Cramfs 文件系统自动计算压缩后的资料所存的位置,再即时解压缩到 RAM中。另外,它的速度快,效率高,其只读的特点有利于保护文件系统免受破坏,提高了系统的可靠性; 但是它的只读属性同时又是它的一大缺陷,使得用户无法对其内容对进扩充。Cramfs 映像通常是放在 Flash中,但是也能放在别的文件系统里,使用 loopback 设备可以把它安装别的文件系统里。使用 mkcramfs 工具可以创建Cramfs 映像【8】。文件系统是Linux 系统必备的一个部分,主要是一些系统文件和应用文件存储的
42、地方,但是通常使用的PC 上的文件系统包括很多功能,但是体积比较大通常有几百兆之多,但是在嵌入式系统中要使用这样的文件系统是不可能的,所以,嵌入式系统中的文件系统是一个简化版,包括必须的几个目录和文件,完成需要的功能即可。下面我们就来对文件系统中包含的东西和文件进行些简要的说明。 文件系统要求建立的目录有/bin ,/sbin ,/etc ,/dev ,/lib ,/mnt ,/proc,/usr 。 /bin 目录下需要包含常用的用户命令,如 sh 等。 /sbin 目录要包含所有系统命令,如 reboot 等 。 /etc 目录下是系统配置文件。 /boot 目录下是内核映像 /dev 目
43、录含有系统所有的特殊设备文件 /lib 目录包含系统所有的库文件 /mnt 目录只用于挂接,可以是空目录 /proc 目录是/proc 文件系统的主目录,包含了系统的启动信息 /usr 目录含有用户选取的命令。cramfs 是一种可读/ 写的文件系统。制作它的工具叫做mkcramfs 。可以用下面的命令来生成一个cramfs 的文件系统。输入下列2 条命令 cd /2410RP_linux/root ./mkcramfs rootfs 2410RP.cramfs 就会在 root 目录下生成一个名字叫做 2410RP.cramfs 的文件系统。4 QT开发环境的搭建4.1 QT简介Qt是199
44、1年奇趣科技开发的一个跨平台的C+图形用户界面应用程序框架。它提供给应用程序开发者建立艺术级的图形用户界面所需的所用功能。Qt很容易扩展,并且允许真正地组件编程。基本上,Qt同 X Window 上的 Motif,Openwin,GTK 等图形界 面库和 Windows 平台上的 MFC,OWL,VCL,ATL是同类型的东西,有着以下优点 优良的跨平台特性: Qt支持下列操作系统: Microsoft Windows 95/98,Microsoft Windows NT,Linux,Solaris,SunOS,HP-UX,Digital UNIX (OSF/1,Tru64),Irix,Free
45、BSD,BSD/OS, SCO,AIX,OS390,QNX等等。 面向对象 Qt 的良好封装机制使得Qt的模块化程度非常高,可重用性较好,对于用户开发来说是非常方便的。Qt提供了一种称为signals/slots的安全类型来替代callback,这使得各个元件之间的协同工作变得十分简单。 丰富的 API Qt 包括多达250个以上的 C+ 类,还提供基于模板的collections,serialization, file,I/O device,directory management,date/time 类。甚至还包括正则表达式的处理功能。 支持 2D/3D图形渲染,支持OpenGL 大量的开发文档 XML支持。4.2 QTE简介Qte即Qt/embedded它是Qt的一个版本,是一个专门为嵌入式系统设计图形用户界面的工具包,是挪威Trolltech公司的Qt的嵌入式版本。其特点包括:开源代码和详尽的API文档;可移植性好;模块化设计可裁减(最小只有600k左右);有自己的窗口系统,可直接对底层图形驱动进行操作;提供压缩字体格式;多种硬件和软件的输入;支持反锯齿文本和Alpha混合图片;可连接数据库;可使程序本地化