完整版入式数码相框的设计与实现毕业设计.docx
《完整版入式数码相框的设计与实现毕业设计.docx》由会员分享,可在线阅读,更多相关《完整版入式数码相框的设计与实现毕业设计.docx(28页珍藏版)》请在冰豆网上搜索。
完整版入式数码相框的设计与实现毕业设计
广州大学华软软件学院
本科毕业论文
论文题目嵌入式数码相框的设计与实现
专业电子信息工程
班级11级嵌入式应用软件开发1班
姓名许家淇
指导教师徐礼国
广州大学华软软件学院电子系
2015年4月
摘要本设计采用搭载s3c2440芯片的TQ2440开发板作为硬件平台,并在该硬件平台上移植了u-boot,linux内核,根文件系统,构成一个嵌入式linux操作系统,该系统的最大特点就是,可以根据应用需求对软硬件进行裁剪,满足应用系统的功能、可靠性、成本、体积等要求,主要用途就是对软硬件资源的调度与分配。
在搭载了linux嵌入式系统的TQ2440开发板上,本文设计了一个界面应用程序,该应用程序主要功能为:
用户通过对界面的操作就可对数码相框中图片的浏览与管理,以及进行幻灯片播放功能。
关键词:
TQ2440;嵌入式系统;数码相框;
ABSTRACTThiscurriculumdesigntusestheTQ2440developmentboardwiththeS3C2440chipasthehardwareplatformandtransplantu-boot,thehardwareplatformintheLinuxkernel,rootfilesystem,constituteanembeddedLinuxoperatingsystem,thebiggestfeatureofthesystemisthatcanbetailoredtomeetthehardwareandsoftwareaccordingtothedemandofapplication,function,reliability,cost,volumerequirementsofapplicationsystem,themainpurposeistosofthardwareresourceallocationandscheduling.
WhenequippedwithaTQ2440developmentboardLinuxembeddedsystem,thispaperdesignedaninterfaceapplicationprogram,themainfunctionoftheapplicationprogramsothattheusercanbrowseandmanagementoftheimageinthedigitalphotoframethroughtheinterface,andaslideshowfeature.
KEYWORDS:
TQ2440;EmbeddedSystem;DigitalPhotoFrame
目录
1.前言1
1.1背景与研究意义1
1.2本论文的主要研究内容1
2.数码相框总体设计与论证2
2.1数码相框总体设计方案2
2.2.器件选型:
3
2.3论证3
3.嵌入式linux系统构建4
3.1u-boot的移植4
3.2Linux内核的移植5
3.2.1准备工作6
3.2.2修改内核源码顶层6
3.2.3设置flash分区6
3.2.4修改机器码6
3.2.5配置编译内核7
3.2.6Linux内核编译与烧写10
3.3制作根文件系统11
3.4.驱动的设计11
3.4.1关于USB驱动设计11
3.4.2关于LCD驱动设计12
3.4.3关于触摸屏驱动设计13
4.界面应用程序14
4.1程序作用简介:
14
4.2界面功能总框架:
14
4.3程序主流程介绍16
4.4程序模块介绍17
4.4.1程序模块实现概述:
17
4.4.2页面规划模块:
18
4.4.3调试模块:
18
4.4.4图片解析模块:
18
4.4.5字体解码模块:
19
4.4.6输入模式模块:
19
4.4.7显示模块:
20
5.系统分析和测试21
5.1系统分析方法简述21
5.2测试21
5.2.1bmp图标显示测试21
5.2.2jpeg图片解析测试21
5.2.3u盘挂载测试23
5.3测试结论24
6.总结25
参考文献26
附录27
致谢28
1.前言
1.1背景与研究意义
随着PC时代数码技术的发展,数码相机以其低廉的价格,方便的操作成为摄影器材的发展方向。
目前,很多家庭都持有数码相机,一次拍摄下来的照片往往会有上百张,使用PC机来查看拍摄下来的图片,过于依赖PC机。
并且众多的数码摄影产生的相片保存起来后,查看过程繁琐不方便,要想再把这些相片都冲印出来回味、欣赏,即浪费又不环保。
数码相框将彻底解放那些积压下来的数码相片,让你人生中值得记忆的每一个瞬间从此不再被埋没在硬盘里面。
数码相框可以不但可以节约了照片冲印的纸张,而且还可用来美化家居,构造精致生活享受。
分享快乐、展示成功;带给父母,缓解思念。
作为数码相机的一种附属产品,数码相框不仅具有传统相框的特点,而且可以直接从数码相机中选择心仪的照片,随时更新照片。
数码相框还可以摆放在家居显眼之处,成为现代家庭一道靓丽的风景线。
1.2本论文的主要研究内容
本设计是以TQ2440为硬件平台并搭载嵌入式Linux操作系统为基础,完成图片可轮播、查看的数码相框系统设计。
主要研究内容包括以下几个方面:
(1)分析数码相框系统需求,对所用硬件器件选型,嵌入式系统的选择,以及确定界面程序实现方式。
(2)在基于ARM9微处理器的TQ2440平台上搭建嵌入式系统开发环境。
(3)在嵌入式Linux操作系统平台上完成实现了uboot、内核的移植和构建根文件系统等工作。
(4)对数码相框的界面进行研究,通过界面程序实现了友好的人机交互UI界面。
2.数码相框总体设计与论证
2.1数码相框总体设计方案
本文设计的数码相框系统,完成了实现图片的查看、轮播功能的系统设计方案设计。
该数码相框系统依靠ARM微处理器和嵌入式Linux操作系统作为平台,同时结合界面应用程序,通过对触摸屏的操作,在LCD屏幕上显示图片,实现数码相框系统与外界的信息交互,从而能在TQ2440上实现数码相框的基本功能。
如图2.1所示
图2-1数码相框系统
2.2.器件选型:
本文选择以搭载ARM处理器的三星s3c2440芯片为核心,搭建硬件平台,主要原因是ARM处理器具有以下特点:
(1)体积小、低功耗、低成本、高性能。
(2)支持Thumb(16位)/ARM(32位)双指令集,能很好的兼容8位/16位器件。
(3)大量使用寄存器,指令执行速度更快。
(4)大多数数据操作都在寄存器中完成。
(5)寻址方式灵活简单,执行效率高。
(6)指令长度固定。
2.3论证
本课程设计采用的是linux系统,属于嵌入式系统的一种。
对比开发常见的嵌入式操作系统WinCE、uCOS-II、VxWorks等。
嵌入式linux操作系统用途更为广泛,并且是开源系统软件,其主要功能是分配、调度工作,控制协调并分发软、硬件资源;该系统是功能模块化的,即一个功能对应一个模块,添加一个功能只需要增加一个对应模块就可以。
嵌入式linux操作系统突出的特点是系统实时的高效性、移植性好、,众多的系统软件开源等。
嵌入式操作系统与普通的计算机操作系统相比,除具备了一般操作系统最基本的功能,如任务调度、同步机制、中断处理、文件功能等,还有系统功能可裁剪、系统工具开源里面以及与嵌入式ARM微处理器兼容性好等特点。
3.嵌入式linux系统构建
3.1u-boot的移植
TQ2440的启动需要Bootloader,Bootloader是硬件启动的引导程序,是启动操作系统的根本,是在操作系统内核或用户应用程序运行之前运行的一段小程序。
通过这段小程序,可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用准备好环境。
本课程设计采用的u-boot,全称UniversalBootLoader,是遵循GPL条款的开放源码项目。
简单的说,u-boot就是开源的且通用的Bootloader。
由于u-boot源代码十分庞大,本文无法一一列出代码,而且,移植u-boot到TQ2440开发板的过程十分的复杂与繁琐,所以,本文只对移植u-boot关键部分作出说明:
(1)获取u-boot源码:
登录官网下载u-boot-源码,然后解压:
#tarxzfu-boot-2010.03.tar.bz2
此时我们就得到了u-boot2010.03版本的源码。
(2)根据系统的处理器平台选择对应的目标编译项:
(A)在uboot-2010.03的根目录下面的Makefile中为TQ2440建立编译,以sbc2410x为模板例子。
在Makefile中加上对TQ2440板子的支持,将这个编译项命名为TQ2440:
TQ2440_config:
unconfig
@$(MKCONFIG)$(@:
_config=)armarm920tTQ2440NULLs3c24x0
各项的意思如下:
arm:
CPU的架构为arm架构。
arm920t:
CPU的类型为arm920t。
TQ2440:
开发板的型号为TQ2440。
NULL:
开发者/或经销商(vender),NULL表示没有。
s3c24x0:
片上系统为s3c24x0。
(B)由于本文使用arm架构处理器,故需要设置交叉编译工具链,修改顶层Makefile的CROSS_COMPILE定义如下:
CROSS_COMPILE=arm-linux-
(C)仿造sbc2410x模板,在/board目录下建立TQ2440文件夹,并在include/configs/中建立开发板的配置头文件,拷贝sbc2410x的文件到TQ2440和include/configs/中,并将sbc2410x命名的文件和定义改为TQ2440。
(3)修改cpu/arm920t/start.S,根据S3C2440A数据手册时钟参数,修改代码使得u-boot从NANDFlash启动或者从Norflash启动。
(4)根据TQ2440上的NANDFlash芯片手册,增加NANDFlash读写函数,实现NANDFlash的读写操作,实现加载Uboot、内核和文件系统硬件到NANDFlash功能。
(5)修改u-boot代码中对分区表的设置,使得分区表与内核设置的一致。
(6)进入目录配置编译,生成相应平台的uboot映像:
配置#makeTQ2440_config
#make
编译结果生成u-boot.bin烧入开发板
(7)把编译生成的u-boot.bin使用OPENJTAG烧写工具,安装驱动程序后,把它烧写到开发板norflash上就可以了。
3.2Linux内核的移植
Linux是一种开源电脑操作系统内核。
它是一个用C语言写成,符合POSIX标准的类Unix操作系统,是一个一体化内核(monolithickernel)系统。
“内核”指的是一个提供硬件抽象层、磁盘及文件系统控制、多任务等功能的系统软件。
一个内核不是一套完整的操作系统,还需要有配套的文件系统和硬件平台才能构成一个完整的嵌入式系统。
基于Linux内核的完整操作系统叫作Linux操作系统,其设备驱动程序可以完全访问硬件,且设备驱动程序可以方便地以模块化的形式设置,即使在系统运行期间也可直接装载或卸载。
linux-2.4.3内核已经支持S3C2440处理器的多种硬件开发板,,由于S3C2410跟S3C2440同属于ARM920T系列芯片,且寄存器等硬件电路基本一致,所以本文,参考SMDK2410参考板来移植linux-2.4.3内核到TQ2440开发板上。
3.2.1准备工作
在linux系统中,建立工作目录,下载内核源码:
linux-2.6.30.4.tar.bz2。
步骤如下:
#tarjxvflinux-2.6.30.4.tar.gz
解压后会在当前目录下生成一个linux-2.6.30.4的内核源码目录
3.2.2修改内核源码顶层
修改内核目录树根下的的Makefile,指明体系结构是arm,交叉编译工具是arm-linux-gcc。
找到ARCH和CROSS_COMPILE,修改
ARCH?
=arm
CROSS_COMPILE?
=/usr/local/arm/4.1.2/bin/arm-linux-
3.2.3设置flash分区
(1)修改内核分区信息(本示例分设四个分区),让内核知道NANDFlash的分区信息,设置成跟u-boot一致,
(2)修改时钟
将arch\arm\mach-s3c24xx\mach-smdk2440.c中的
修改为:
(3)修改NANDFlash的校验方式,去掉ECC校验,否则上电启动会提示ECC错误或者I/O读取错误。
在drivers/mtd/nand/s3c2410.c中将chip->ecc.mode=NAND_ECC_SOFT,
改为chip->ecc.mode=NAND_ECC_NONE;
3.2.4修改机器码
在u-boot-2009.11的/board/samsun/TQ2440/TQ2440.c中定义了机器码为193,需要使得u-boot和linux内核的同样类型的机器码都为193,那么我们就修改kernel的MACH_TYPE代码引用部分,确定kernel的MACH_TYPE。
如下:
在arch/arm/mach-s3c2440/mach-smdk2440.c中:
MACHINE_START(S3C2440,"SMDK2440")
修改为:
MACHINE_START(SMDK2410,"SMDK2440")
在arch/arm/kernel/head.S中的ENTRY(stext)下添加如下代码
ENTRY(stext)
movr0,#0
movr1,#0xc1//MACH_TYPE_SMDK2410值193换成十六进制就是0xc1
3.2.5配置编译内核
#makes3c2410_defconfig
#makemenuconfig//进入设置界面,配置内核
makemenuconfig命令运行后进入内核配置主菜单,如图3-1,这时根据自己的硬件需求对内核进行配置,即在菜单中选择合适的选项,对内核的裁剪,就是使用makemenuconfig命令来调出配置菜单,通过在菜单上选择所需的选项,去掉不需要的选项的方式来裁剪。
(选项前按“y”则显示“*”表示需要此项;按n则空,不要此项)。
图3.1配置主菜单
根据开发板情况,在配置中主要考虑的有:
(1)CPU类型的选择
图3-2cpu类型选择
(2)引导设置
图3-3引导设置
Bootoptions-->Defaultkernelcommandstring:
rootfstype=jffs2
说明:
mtdblock2代表第3个flash分区,它是预设的rootfs分区,
(3)系统调用方式设置如下图3-4
图3-4系统调用方式设置
KernelFeatures--->
[*]UsetheARMEABItocompilethekernel//防止出现内核恐慌,内核指针跑飞。
主菜单中选最后一项“SaveanAlternateConfigurationFile”,按回车,进入配置文件名编辑,默认文件名,ok保存,exit退出,产生.config内核配置文件,该文件会在make的时候被调用。
(4)文件系统的支持。
接下来做的是针对文件系统的设置,本课程设计上的文件系统是cramfs/jffs2,故做如下配置,如图3-5
图3-5
Miscellaneousfilesystems-->
[*]JFFS2XATTRsupport(EXPERIMENTAL)支持jffs2和cramfs文件系统,配置如下图3-5
图3-6
NetworkFileSystems-->支持NFS文件系统,配置如下图3-7
[]NFSclientsupportfortheNFSv3ACLprotocolextension
[*]NFSclientsupportforNFSversion4(EXPERIMENTAL)
<*>NFSserversupport
图3-7
3.2.6Linux内核编译与烧写
配置完成后,会在内核目录下生产.config文件,然后回到内核目录编译内核,具体操作如下:
#make//编译内核
此时,在arch/arm/boot目录下生成uImage镜像,然后进行uImage镜像的烧写:
打开DNW软件,在菜单Configuration中选择Options,然后配置波特率和端口参数,配置好参数后,选择菜单SerialPort--.>Connect,然后给开发板上电,选择菜单USBPort-->Transmit,导入uImage镜像即可。
3.3制作根文件系统
制作基本的根文件系统:
使用busybox定制一个基本的文件系统,使用到的软件包有busybox和bash。
其过程也是比较繁琐,大致分为以下几步:
(A)设定工作目录为/root/build_rootfs/,该目录主要用来编译busybox,bash等制作根文件系统的软件。
(B)使用MDEV创建节点。
(C)拷贝动态链接库,交叉应用程序的开发需要用到交叉编译的链接库,交叉编译的链接库是在交叉工具链的lib目录下,我们在移植应用程序到我们的目标板的时候,需要把交叉编译的链接库也一起移植到目标上。
(D)交叉编译busybox之后,运行makemenuconfig会看到和kernel一样的配置菜单,可以对其进行配置,大多配置项都是对一些命令支持的选择,只需要根据菜单选项进行相应的配置选择即可。
(E)交叉编译bash(交互程序)
(F)建立系统配置文件,并配置好inittab,fstab,rcS等系统配置文件
最后使用mkfs.jffs2工具,来制作jffs2文件系统映象,并把根文件系统烧入NANDFlash。
3.4.驱动的设计
3.4.1关于USB驱动设计
由于我们需要查看U盘中的图片,此时U盘连接开发板TQ2440就需要用到USB驱动。
(1)修改arch/arm/mach-s3c2410/mach-smdk2410.c文件,添加如下代码:
staticstructs3c2410_hcd_infousb_tq2410_info={
.port[0]={
.flags=S3C2410_HCDFLG_USED,
};
intusb_tq2410_init(void)//USB初始化函数
{
unsignedlongupllvalue=(0x78<<12)|(0x02<<4)|(0x03);
printk(“USBControl,(c)tq2410\n”);
s3c_device_usb.dev.platform_data=&usb_tq2410_info;
while(upllvalue!
=_raw_readl(S3C2410_UPLLCON))
{
_raw_write(upllvalue,S3C2410_UPLLCON);
mdelay
(1);
}
return0;
}
(2)在staticvoid_initsmdk2410_map_io()函数中添加usb_sbc2410_init()函数
(3)内核配置
使用”makemenuconfig”命令调出内核配置菜单,主要的设置为:
(A)内核支持USB设备
(B)支持热插拔
(C)加入MSDOS文件系统和VFAT文件系统支持(为适应挂载U盘)
(D)添加对中文字体库的支持
(E)编译
3.4.2关于LCD驱动设计
(1)关于LCD的配置文件:
在Linux-2.6.30.4/arch/arm/mach-s3c2410/mach-smdk2410.c的smdk2410_lcd_cfg__initdata函数中添加如下内容:
(A)配置好LCD控制寄存器
(B)设置LCD类型为TFT
(C)LCD的宽度与长度
(D)设置时序
(E)设置分辨率以及BPP等
(2)初始化函数中添加LCD初始化功能
Staticvoid__initsmdk2410_init(void)
{
S3c24xx_fb_set_platdata(&smdk2410_fb_info);//添加部分
}
(3)配置内核菜单,使得内核支持framebuffer:
在makemenuconfig中选择
<*>Supportforframebufferdevices
(4)编译
3.4.3关于触摸屏驱动设计
对于触摸屏驱动的设计,本文采用的是基于linux本身自带的输入子系统方式设计的,由于涉及的代码比较繁杂,所以本文主要列出其主要设计方法,主要的设计方法如下:
1.设置输入结构input_dev:
(A)通过设置structinput_dev的evdev数组表示能产生KEY
和ABS类事件。
(B)设置产生KEY和ABS类事件里面的触摸"按键"事件,X/Y绝对位移,绝对位移压力事件。
2.硬件操作:
(A)ioremap寄存器
(B)设置AD分频系数和ADCDLY
(C)注册INT_TS和AD中断
4.界面应用程序
4.1程序作用简介:
界面应用程序的主要作用是,使用户能够通过对触摸屏的操作,来实现对数码相框中图片的管理以及把图片显示在LCD屏幕上,通过对屏幕不同图标的点击,可以进入相对应的模式,选择相应的功能,从而实现数码相框对图片的显示,连播等基本功能。
4.2界面功能总框架:
本文未使用QT图形用户界面应用程序开发框架,而是直接使用C语言编写出界面程序。
界面功能总框架如图4-1
图4-1功能总框架
界面功能说明:
(1)主界面:
在程序的一开始LCD显示界面上,有三种模式给用户选择,分别是浏览模式,连播模式,设置模式。
根据点击的模式图标进入对应的界面。
(2)文件浏览模式界面:
若点击浏览模式,则进入文件浏览界面,可以看到TQ2440搭载的根文件系统的各种目录,以及系统中的图片。
在文件浏览模式中,可以选择的操作方式有:
向上,选择,上一页,下一页。
(3)图片浏览模式界面:
点击图片就可以进入,图片浏览模式,在该模式中可以选择的操作有:
返回,放大,缩小,上一页,下一页,连播模式。
(4)设置模式界面:
点击