1、长春汽车工业高等专科学校2017届毕业设计(论文)题目嵌入式移植之基于MINI2440的MP3播放器学院电气工程学院专业电气自动化技术(设备电气维修)班级学号姓名指导教师起止时间20170225201706102017年4月I嵌入式移植之基于MINI2440的MP3播放器摘要MINI2440是一款真正低价实用的ARM9开发板,是目前国内性价比最高的一款学习板;它采用SAMSUNGS3C2440为微处理器,并采用专业稳定的CPU内核电源芯片和复位芯片来保证系统运行时的稳定性。本文采用MINI2440开发板进行开发,在该平台上设计MP3播放器,操作系统使用LINUX操作系统,界面设计采用QT,搭建
2、嵌入式开发环境,建立交叉编译环境。将UBOOT进行移植,使其能够在MINI2440开发板上进行运行。对LINUX系统进行移植,然后能够通过触摸屏进行音乐的播放、暂停以及切换等功能,并对MP3播放器所需要的文件系统进行了制作。最后编写了用户层的MP3应用程序,使此平台能够运行MP3的一些基本功能。调试结果表明,本系统各项标准已达到本设计的所有要求。IIABSTRACTMINI2440ISATRULYPRACTICALLOWCOSTARM9DEVELOPMENTBOARD,ISCURRENTLYTHEMOSTCOSTEFFECTIVEALEARNINGBOARDITUSESTHESAMSUNGS3
3、C2440MICROPROCESSOR,ANDUSINGPROFESSIONALSTABLECPUCOREPOWERSOURCECHIPANDRESETCHIPTOENSURETHESYSTEMISRUNNINGSTABILITYINTHISPAPER,MINI2440DEVELOPMENTBOARDTODEVELOP,ONTHEPLATFORMDESIGNMP3PLAYER,THEOPERATINGSYSTEMUSESTHELINUXOPERATINGSYSTEMONTHECOMPUTERTOBUILDEMBEDDEDDEVELOPMENTENVIRONMENT,INTERFACEDESIG
4、NUSINGQTTHEESTABLISHMENTOFCROSSCOMPILERENVIRONMENTBECAUSEDEVELOPMENTBOARDTOMOUNTTOAVIRTUALMACHINEONALINUXOPERATINGSYSTEM,SOTOINSTALLANDCONFIGURETHETFTPSERVICE,INSTALLANDCONFIGURETHENFSSERVICEBUTALSOMINI2440DEVELOPMENTBOARDRUNNINGLINUXOPERATINGSYSTEM,SOTHELINUXSYSTEMFORTRANSPLANTMP3PLAYERUSINGTHEKEYS
5、THEOPERATIONTOBEKEYDRIVERSFORTHEPREPARATION,ATRUNTIME,THEBACKGROUNDLOADKEYDRIVERMODULESFINALLYWRITETHEAPPLICATIONTOCONTROLTHEMP3PLAYERFUNCTIONISIMPLEMENTEDTESTRESULTSSHOWTHATTHESYSTEMHASREACHEDTHESTANDARDSFORALLOFTHEDESIGNREQUIREMENTSIII目录摘要IABSTRACTII第一章绪论111前言112选题背景213设计要求3131基本要求3132论文结构3第二章QT环境
6、搭建及界面设计421QT简介422QT理论基础4221LINUX下QT开发环境搭建一4222LINUX下QT开发环境搭建二6222LINUX下QT开发环境搭建三923QT界面制作11231QT基本图形组件11232QT信号和槽12233QT消息框和对话框14234QT播放器界面制作16第三章搭建嵌入式开发环境1831LINUX下建立嵌入式开发环境18311建立交叉编译环境18312安装配置TFTP服务18312安装配置NFS服务1932UBOOT在ARM9上的移植19321UBOOT介绍19322UBOOT的移植19第四章LINUX系统移植2041LINUX系统移植20411获取LINUX内核
7、源代码20412指定交叉编译变量20413内核配置菜单中的MINI2440选项20414为内核打上YAFFS2补丁22415配置和编译带YAFFS2支持的内核2242根文件系统的制作24421常用的LINUX根文件系统类型24422YAFFS2文件系统的移植24423制作根文件系统2824MADPLAY移植和QT移植30431MADPLAY移植30432QT移植32第五章总结和展望35IV参考文献36第一章绪论1第一章绪论11前言随着计算机技术、微处理器技术、电子技术、通信技术、集成电路技术的发展,嵌入式系统已成为计算机技术和应用领域的一个重要组成部分,嵌入式产品在人们的日常生活中也扮演着越来
8、越重要的角色。目前,计算机和网络已经全面渗透到日常生活的每一个角落。对于我们每个人来说,需要的已经不再仅仅是那种放在桌上处理文档、进行工作管理和生产控制的计算机机器。任何一个普通人都可能拥有从小到大的各种使用嵌入式技术的电子产品,小到MP3、PDA等微型数字化产品,大到网络家电、智能家电、车载电子设备等。目前,各种各样的新型嵌入式系统设备在应用数量上已经远远超过了通用计算机。在工业和服务领域中,使用嵌入式技术的数字机床、智能工具、工业机器人、服务机器人正在逐渐改变着传统的工业生产和服务方式。1工业控制基于嵌入式芯片的工业自动化设备将获得长足的发展,目前已经有大量的8、16、32位嵌入式微控制器
9、在应用中,网络化是提高生产效率和产品质量、减少人力资源主要途径,如工业过程控制、数字机床、电力系统、电网安全、电网设备监测、石油化工系统。就传统的工业控制产品而言,低端型采用的往往是8位单片机。但是随着技术的发展,32位、64位的处理器逐渐成为工业控制设备的核心,在未来几年内必将获得长足的发展。2交通管理在车辆导航、流量控制、信息监测与汽车服务方面,嵌入式系统技术已经获得了广泛的应用,内嵌GPS模块,GSM模块的移动定位终端已经在各种运输行业获得了成功的使用。目前GPS设备已经从尖端产品进入了普通百姓的家庭,只需要几千元,就可以随时随地找到你的位置。3信息家电这将称为嵌入式系统最大的应用领域,
10、冰箱、空调等的网络化、智能化将引领人们的生活步入一个崭新的空间。即使你不在家里,也可以通过电话线、网络进长春汽车工业高等专科学校毕业设计(论文)2行远程控制。在这些设备中,嵌入式系统将大有用武之地。4家庭智能管理系统水、电、煤气表的远程自动抄表,安全防火、防盗系统,其中嵌有的专用控制芯片将代替传统的人工检查,并实现更高,更准确和更安全的性能。目前在服务领域,如远程点菜器等已经体现了嵌入式系统的优势。5POS网络及电子商务公共交通无接触智能卡CONTACTLESSSMARTCARD,CSC发行系统,公共电话卡发行系统,自动售货机,各种智能ATM终端将全面走入人们的生活,到时手持一卡就可以行遍天下
11、。6机器人嵌入式芯片的发展将使机器人在微型化,高智能方面优势更加明显,同时会大幅度降低机器人的价格,使其在工业领域和服务领域获得更广泛的应用。这些应用中,可以着重于在控制方面的应用。就远程家电控制而言,除了开发出支持TCP/IP的嵌入式系统之外,家电产品控制协议也需要制订和统一,这需要家电生产厂家来做。同样的道理,所有基于网络的远程控制器件都需要与嵌入式系统之间实现接口,然后再由嵌入式系统来控制并通过网络实现控制。所以,开发和探讨嵌入式系统有着十分重要的意义。12选题背景当今社会嵌入式系统已经渗透到人们的工作、生活中的各个领域,嵌入式处理器已占分散处理器份额的94。而嵌入式LINUX也蓬勃发展
12、,不仅继承了LINUX源码开放、内核稳定高效、软件丰富等优势,还具备广泛处理器结构和硬件环境搭建。长春汽车工业高等专科学校毕业设计(论文)313设计要求131基本要求该项目具备以下功能音频播放(播放、暂停、停止、上一首、下一首、音量调节、静音)视频播放(播放、暂停、停止、音量调节、静音)播放列表(添加单个文件、添加文件夹、随机播放、顺序播放、单曲循环等)系统设置132论文结构本论文结构如下第2章介绍了QT界面设计及编程。第3章描述了嵌入式开发环境的搭建。第4章给出了LINUX系统的移植,相关驱动的编写及移植,编译镜像,以及构建文件系统。总结描述,自己在设计中的心得和体会。第二章QT环境搭建及界
13、面设计4第二章QT环境搭建及界面设计21QT简介QT是一个多平台的C图形用户界面应用程序框架。它提供给应用程序开发者建立图形用户界面应用程序所需的所有功能。QT是完全面向对象的,它很容易扩展,并且允许真正的组件编程,QT也是流行的LINUX桌面环境KDE的基础。1991年由奇趣科技开发的跨平台C图形用户界面应用程序开发框架。它既可以开发GUI程序,也可用于开发非GUI程序,比如控制台工具和服务器。QT是面向对象的框架,使用特殊的代码生成扩展(称为元对象编译器METAOBJECTCOMPILER,MOC)以及一些宏,易于扩展,允许组件编程。2008年,奇趣科技被诺基亚公司收购,QT也因此成为诺基
14、亚旗下的编程语言工具。2012年,QT被DIGIA收购。2014年4月,跨平台集成开发环境QTCREATOR310正式发布,实现了对于IOS的完全支持,新增WINRT、BEAUTIFIER等插件,废弃了无PYTHON接口的GDB调试支持,集成了基于CLANG的C/C代码模块,并对ANDROID支持做出了调整,至此实现了全面支持IOS、ANDROID、WP。具有免费、开源、跨平台、LINUX下图形界面开发等优势被广泛应用。22QT理论基础221LINUX下QT开发环境搭建一(1)VMVARE安装(2)安装REDHAT6典型安装(3)首次启动REDHATENTERPRISELINUX后,会运行系统
15、设置代理程序,单击“下一步”按钮继续。长春汽车工业高等专科学校毕业设计(论文)5(4)7进入“许可协议”界面,选择“YES,IAGREETOTHELICENSEAGREEMENT”,单击“下一步”按钮继续。在进入“日期和时间”设置界面后,应根据实际情况设置正确的时间,单击“下一步”按钮继续。在“显示”设置界面中,应根据实际设置,单击“下一步”按钮继续。注意,建立分区时推荐设置如下建立/BOOT分区200M建立/分区15000M建立SWAP交换分区1000M另外,需要注意的是安装系统软件时,选择基本服务器,要定制安装,并选择安装相应的图形组件。图221安装显示图第二章QT环境搭建及界面设计622
16、2LINUX下QT开发环境搭建二需要的软件1QTEVERYWHEREOPENSOURCESRC463TARGZ2QTCREATORLINUXX86OPENSOURCE200BIN3ARMLINUXGCC432TGZ4TSLIB14GZ一、安装QTX11CDQTTARXVFQTEVERYWHEREOPENSOURCESRC463TARGZCDQTEVERYWHEREOPENSOURCESRC463/CONFIGUREMAKEMAKEINSTALL安装QTCREATORCHMOD777QTCREATORLINUXX86OPENSOURCE200BIN/修改权限/QTCREATORLINUXX86O
17、PENSOURCE200BIN二、安装TSLIBTARXVFTSLIB14GZCDTSLIB/AUTOGENSHECHOAC_CV_FUNC_MALLOC_0_NONNULLYESARMLINUXCACHEEXPORTPATH/USR/LOCAL/ARM/432/BINPATH/CONFIGUREHOSTARMLINUXPREFIX/USR/LOCAL/TSLIBCACHEFILEARMLINUXCACHEENABLEINPUTAPINOMAKEMAKEINSTALL三、安装QTECDQTEVERYWHEREOPENSOURCESRC463MAKECLEAN长春汽车工业高等专科学校毕业设计(论
18、文)7/CONFIGUREOPENSOURCEEMBEDDEDARMXPLATFORMQWS/LINUXARMGNOWEBKITQTLIBTIFFQTLIBMNGQTMOUSETSLIBQTMOUSEPCNOMOUSELINUXTPI/USR/LOCAL/TSLIB/INCLUDEL/USR/LOCAL/TSLIB/LIBMAKEMAKEINSTALL四配置环境变量FORX11/(对于主机等环境下执行该环境变量)EXPORTQTDIR/USR/LOCAL/TROLLTECH/QT463EXPORTPATHQTDIR/BINPATHEXPORTLD_LIBERARY_PATHQTDIR/LIBL
19、D_LIBERARY_PATHEXPORTQMAKESPECQTDIR/MKSPECS/LINUXGFORARM/(对于ARM开发板环境下执行该环境变量)EXPORTQTDIR/USR/LOCAL/TROLLTECH/QTEMBEDDED463ARMEXPORTPATHQTDIR/BIN/USR/LOCAL/ARM/432/BINPATHEXPORTLD_LIBRARY_PATHQTDIR/LIBLD_LIBRARY_PATHEXPORTQMAKESPECQTDIR/MKSPECS/QWS/LINUXARMG五打包拷贝QT库CDARMQTE463/MKTARGETCPTARGETQTE463T
20、GZ/ROOT/ROOTFS/CD/ROOT/ROOTFS/TARXVFTARGETQTE463TGZ六另拷背三个库,后QT可显示,但触摸屏无效ROOTLOCALHOSTROOTFSCP/USR/LOCAL/ARM/432/ARMNONELINUXGNUEABI/LIBC/ARMV4T/USR/LIB/LIBSTDC/ROOT/ROOTFS/LIB/A第二章QT环境搭建及界面设计8ROOTLOCALHOSTROOTFSCP/USR/LOCAL/ARM/432/ARMNONELINUXGNUEABI/LIBC/ARMV4T/USR/LIB/LIBTS/ROOT/ROOTFS/LIB/AROOTL
21、OCALHOSTROOTFSCP/USR/LOCAL/ARM/432/ARMNONELINUXGNUEABI/LIBC/ARMV4T/USR/LIB/LIBPNG/ROOT/ROOTFS/LIB/A七安装触摸屏驱动CP/USR/LOCAL/TSLIB/ROOT/ROOTFS/USR/LOCAL/RA修改TSCONF文件,应该在TSLIB_ROOT/ETC/TSCONF把MODULE_RAWINPUT的去掉在超级络端执行以下SHELL命令CD/DEV/MKDIRINPUTCHMOD777INPUTCDINPUT/MKNOD/DEV/INPUT/EVENT0C1364MKNOD/DEV/INPUT
22、/MICEC1363CHMOD660/DEV/INPUT/EXPORTTSLIB_ROOT/USR/LOCAL/TSLIBEXPORTTSLIB_TSDEVICE/DEV/INPUT/EVENT0EXPORTTSLIB_CALIBFILE/ETC/POINTERCALEXPORTTSLIB_CONFFILETSLIB_ROOT/ETC/TSCONFEXPORTTSLIB_PLUGINDIRTSLIB_ROOT/LIB/TSEXPORTTSLIB_CONSOLEDEVICENONEEXPORTTSLIB_FBDEVICE/DEV/FB0EXPORTLD_LIBRARY_PATH/USR/LOCA
23、L/TSLIB/LIBLD_LIBRARY_PATHEXPORTQTDIR/USR/LOCAL/TROLLTECH/QTEMBEDDED463ARMEXPORTLD_LIBRARY_PATHQTDIR/LIBLD_LIBRARY_PATHEXPORTPATHQTDIR/BINPATHEXPORTQWS_MOUSE_PROTOTSLIB/DEV/INPUT/EVENT0长春汽车工业高等专科学校毕业设计(论文)9八执行触摸屏校正/USR/LOCAL/TSLIB/BIN/TS_CALIBRATE222LINUX下QT开发环境搭建三一、安装QTX11CDQTTARXVFQTEVERYWHEREOPEN
24、SOURCESRC463TARGZCDQTEVERYWHEREOPENSOURCESRC463/CONFIGUREMAKEMAKEINSTALL安装QTCREATORCHMOD777QTCREATORLINUXX86OPENSOURCE200BIN/QTCREATORLINUXX86OPENSOURCE200BIN解压交叉编译工具链TARXVFARMLINUXGCC432TGZC/二、安装TSLIBTARXVFTSLIB14GZCDTSLIB/AUTOGENSHECHOAC_CV_FUNC_MALLOC_0_NONNULLYESARMLINUXCACHEEXPORTPATH/USR/LOCAL
25、/ARM/432/BINPATH/CONFIGUREHOSTARMLINUXPREFIX/USR/LOCAL/TSLIBCACHEFILEARMLINUXCACHEENABLEINPUTAPINOMAKEMAKEINSTALL三、安装QTERMRFQTEVERYWHEREOPENSOURCESRC463TARXVFQTEVERYWHEREOPENSOURCESRC463TARGZCDQTEVERYWHEREOPENSOURCESRC463MAKECLEAN/CONFIGUREOPENSOURCEEMBEDDEDARMXPLATFORMQWS/LINUXARMGNOWEBKITQTLIBTIFF
26、QTLIBMNGQTMOUSETSLIBQTMOUSEPCNOMOUSELINUXTPI/USR/LOCAL/TSLIB/INCLUDEL/USR/LOCAL/TSLIB/LIBMAKEMAKEINSTALL第二章QT环境搭建及界面设计10以下部分移植QT到开发板时再介绍四配置环境变量FORX11EXPORTQTDIR/USR/LOCAL/TROLLTECH/QT463EXPORTPATHQTDIR/BINPATHEXPORTLD_LIBERARY_PATHQTDIR/LIBLD_LIBERARY_PATHEXPORTQMAKESPECQTDIR/MKSPECS/LINUXGFORARMEXP
27、ORTQTDIR/USR/LOCAL/TROLLTECH/QTEMBEDDED463ARMEXPORTPATHQTDIR/BIN/USR/LOCAL/ARM/432/BINPATHEXPORTLD_LIBRARY_PATHQTDIR/LIBLD_LIBRARY_PATHEXPORTQMAKESPECQTDIR/MKSPECS/QWS/LINUXARMG五打包拷贝QT库CDARMQTE463/MKTARGETCPTARGETQTE463TGZ/ROOT/ROOTFS/CD/ROOT/ROOTFS/TARXVFTARGETQTE463TGZ六另拷背三个库,后QT可显示,但触摸屏无效ROOTLOCA
28、LHOSTROOTFSCP/USR/LOCAL/ARM/432/ARMNONELINUXGNUEABI/LIBC/ARMV4T/USR/LIB/LIBSTDC/ROOT/ROOTFS/LIB/AROOTLOCALHOSTROOTFSCP/USR/LOCAL/ARM/432/ARMNONELINUXGNUEABI/LIBC/ARMV4T/USR/LIB/LIBTS/ROOT/ROOTFS/LIB/AROOTLOCALHOSTROOTFSCP/USR/LOCAL/ARM/432/ARMNONELINUXGNUEABI/LIBC/ARMV4T/USR/LIB/LIBPNG/ROOT/ROOTFS/L
29、IB/A七安装触摸屏驱动CP/USR/LOCAL/TSLIB/ROOT/ROOTFS/USR/LOCAL/RA修改TSCONF文件,应该在TSLIB_ROOT/ETC/TSCONF把MODULE_RAWINPUT的去掉在超级络端执行以下SHELL命令CD/DEV/MKDIRINPUTCHMOD777INPUT长春汽车工业高等专科学校毕业设计(论文)11CDINPUT/MKNOD/DEV/INPUT/EVENT0C1364MKNOD/DEV/INPUT/MICEC1363CHMOD660/DEV/INPUT/EXPORTTSLIB_ROOT/USR/LOCAL/TSLIBEXPORTTSLIB_
30、TSDEVICE/DEV/INPUT/EVENT0EXPORTTSLIB_CALIBFILE/ETC/POINTERCALEXPORTTSLIB_CONFFILETSLIB_ROOT/ETC/TSCONFEXPORTTSLIB_PLUGINDIRTSLIB_ROOT/LIB/TSEXPORTTSLIB_CONSOLEDEVICENONEEXPORTTSLIB_FBDEVICE/DEV/FB0EXPORTLD_LIBRARY_PATH/USR/LOCAL/TSLIB/LIBLD_LIBRARY_PATHEXPORTQTDIR/USR/LOCAL/TROLLTECH/QTEMBEDDED463AR
31、MEXPORTLD_LIBRARY_PATHQTDIR/LIBLD_LIBRARY_PATHEXPORTPATHQTDIR/BINPATHEXPORTQWS_MOUSE_PROTOTSLIB/DEV/INPUT/EVENT0八执行触摸屏校正/USR/LOCAL/TSLIB/BIN/TS_CALIBRATE23QT界面制作231QT基本图形组件一、LINUX下命令方式编译QT程序1配置环境变量FORX11EXPORTQTDIR/USR/LOCAL/TROLLTECH/QT463EXPORTPATHQTDIR/BINPATHEXPORTLD_LIBERARY_PATHQTDIR/LIBLD_LIB
32、ERARY_PATHEXPORTQMAKESPECQTDIR/MKSPECS/LINUXGFORARMEXPORTQTDIR/USR/LOCAL/TROLLTECH/QTEMBEDDED463ARMEXPORTPATHQTDIR/BIN/USR/LOCAL/ARM/432/BINPATHEXPORTLD_LIBRARY_PATHQTDIR/LIBLD_LIBRARY_PATHEXPORTQMAKESPECQTDIR/MKSPECS/QWS/LINUXARMG二、LINUX下命令方式编译QT程序21QMAKEPROJECT2QMAKE第二章QT环境搭建及界面设计123MAKE三、QT基本图形组件
33、1QLABEL2QPUSHBUTTON3QLINEEDIT4QRADIOBUTTON5QCHECKBOX6QCOMBOBOX232QT信号和槽一、信号和槽原理信号和槽示意图长春汽车工业高等专科学校毕业设计(论文)13二、信号当某个信号对其客户或所有者发生的内部状态发生改变,信号被一个对象发射。只有定义过这个信号的类及其派生类能够发射这个信号。当一个信号被发射时,与其相关联的槽将被立刻执行,就象一个正常的函数调用一样。信号槽机制完全独立于任何GUI事件循环。如果存在多个槽与某个信号相关联,那么,当这个信号被发射时,这些槽将会一个接一个地执行,但是它们执行的顺序将会是随机的、不确定的,我们不能人为
34、地指定哪个先执行、哪个后执行。三、如何编写信号信号的声明是在头文件中进行的,QT的SIGNALS关键字指出进入了信号声明区,随后即可声明自己的信号。下面定义了三个信号SIGNALSVOIDMYSIGNALVOIDMYSIGNALINTXVOIDMYSIGNALPARAMINTX,INTY在上面的定义中,SIGNALS是QT的关键字,而非C/C的。接下来的一行VOIDMYSIGNAL定义了信号MYSIGNAL,这个信号没有携带参数;接下来的一行VOIDMYSIGNALINTX定义了重名信号MYSIGNAL,但是它携带一个整形参数。从形式上讲信号的声明与普通的C函数是一样的,但是信号却没有函数体定
35、义,另外,信号的返回类型都是VOID四、槽槽是普通的C成员函数,可以被正常调用,它们唯一的特殊性就是很多信号可以与其相关联。当与其关联的信号被发射时,这个槽就会被调用。槽可以有参数,但槽的参数不能有缺省值。同普通的C成员函数一样,槽函数也分为三种类型,即PUBLICSLOTS、PRIVATESLOTS和PROTECTEDSLOTS。五、如何编写槽槽的声明也是在头文件中进行的。例如,下面声明了三个槽PUBLICSLOTSVOIDMYSLOTVOIDMYSLOTINTXVOIDMYSIGNALPARAMINTX,INTYQOBJECTCONNECT/作用域14通过调用QOBJECT对象的CONNE
36、CT函数来将某个对象的信号与另外一个对象的槽函数相关联,这样当发射者发射信号时,接收者的槽函数将被调用。该函数的定义如下BOOLQOBJECTCONNECTCONSTQOBJECTSENDER,CONSTCHARSIGNAL,CONSTQOBJECTRECEIVER,CONSTCHARMEMBERSTATIC这个函数的作用就是将发射者SENDER对象中的信号SIGNAL与接收者RECEIVER中的MEMBER槽函数联系起来。当指定信号SIGNAL时必须使用QT的宏SIGNAL,当指定槽函数时必须使用宏SLOT。QOBJECTDISCONNECT当信号与槽没有必要继续保持关联时,我们可以使用DI
37、SCONNECT函数来断开连接。BOOLQOBJECTDISCONNECTCONSTQOBJECTSENDER,CONSTCHARSIGNAL,CONSTOBJECTRECEIVER,CONSTCHARMEMBERSTATIC233QT消息框和对话框一、函数说明GETOPENFILENAME函数返回用户选择的文件名。但是当用户在选择文件时,如果选择“取消”(CANCEL),则返回一个空串。在此只详细说明GETOPENFILENAME静态函数各个参数的作用,其他文件对话框类中相关的静态函数的参数有与其类似之处。其函数形式如下QSTRINGQFILEDIALOGGETOPENFILENAMEQWI
38、DGETPARENT0,/标准文件对话框的父窗口CONSTQSTRINGFILELINEEDITSETTEXTS长春汽车工业高等专科学校毕业设计(论文)15三、标准INT类型输入对话框标准INT类型输入对话框通过QINPUTDIALOG类的静态函数GETINT函数完成,GETINT函数形式如下INTGETINTQWIDGETPARENT,/标准输入对话框的父窗口CONSTQSTRING四、INFORMATION消息框INFORMATION消息框使用QMESSAGEBOXINFORMATION函数完成,函数形式如下STANDARDBUTTONQMESSAGEBOXINFORMATIONQWIDG
39、ETPARENT,/消息框的父窗口指针CONSTQSTRING完成文件MSGBOXDLGCPP中的槽函数SHOWINFORMATIONMSG,具体实现如下VOIDMSGBOXDLGSHOWINFORMATIONMSGLABELSETTEXTTR“INFORMATIONMESSAGEBOX“QMESSAGEBOXINFORMATIONTHIS,TR“INFORMATION消息框“,TR“这是INFORMATION消息框测试,欢迎您“RETURN16234QT播放器界面制作一、创建工程图2341工程创建二、图形界面制作图2342工程文件长春汽车工业高等专科学校毕业设计(论文)17三、界面完成图图2
40、342播放器完整界面图2343PC机运行效果图第三章搭建嵌入式开发环境18第三章搭建嵌入式开发环境31LINUX下建立嵌入式开发环境311建立交叉编译环境使用交叉编译器(ARMLINUXGCC432建立步骤1,下载ARMLINUXGCC432TGZ到任意的目录下,进入这个文件夹TARXVZFARMLINUXGCC432TGZC/C后面有个空格,起的是改变目录意义。2修改环境变量,把交叉编译器的路径加入到PATH,为了可以方便使用ARMLINUXGCC编译器系统,把ARMLINUX工具链目录加入到环境变量PATH中。3在命令行输入ARMLINUXGCCV,交叉编译环境安装完成。312安装配置TF
41、TP服务因为在使用MINI2440的时候通常用电脑作为宿主机,需要TFTP和NFS这两种网络服务,所以要配置TFTP服务。安装配置TFTP服务的大致步骤如下(1)安装TFTPHPA,TFTPDHPA和OPENBSDINETD程序;(2)修改配置文件/ETC/INETDCONF;(3)根据配置文件的路径,建立TFTP目录,并且修改目录权限;(4)重启TFTP服务;(5)本地传输的测试;长春汽车工业高等专科学校毕业设计(论文)19312安装配置NFS服务安装配置NFS服务的大致步骤如下(1)安装NFS内核服务;(2)重新配置PORTMAP服务,修改/ETC/HOSTSDENY和/ETC/HOSTS
42、ALLOW配置文件,重启PORTMAP服务;(3)修改NFS服务的配置文件/ETCEXPORTS,添加服务目录和配置,重新导入配置;(4)重启NFS服务,并检查可挂载的目录;(5)在本地挂载测试;32UBOOT在ARM9上的移植321UBOOT介绍UBOOT是BOOTLOADER的一个版本,BOOTLOADER是在操作系统内核启动前运行的一段小程序。通过这段程序,我们可以初始化硬件设备,以便为最终调用操作系统内核准备好正确的环境,最后从别处载入内核映像到主寸并跳入到入口地址。322UBOOT的移植首先修改顶层的MAKEFILE文件,使其支持MINI2440开发板。然后在/BORAD目录当中创建
43、MINI2440的目录及其文件,最后在CONFIGS当中创建MINI2440开发板的配置文件。第三章搭建嵌入式开发环境20第四章LINUX系统移植41LINUX系统移植411获取LINUX内核源代码从LINUX官方网站下载LINUX内核代码。412指定交叉编译变量我们移植目的是让LINUX26322可以在MINI2440上运行。修改总目录下面的MAKEFILE,改为EXPORTKBUILD_BUILDHOSTSUBARCHARCHARMCROSS_COMPILEARMLINUX其中,ARCH是指定目标平台为ARM,CROSS_COMPILE是指定交叉编译器,这里指定的是系统默认的交叉编译器。4
44、13内核配置菜单中的MINI2440选项输入命令MAKEMENUCONFIG出现内核配置菜单如图41长春汽车工业高等专科学校毕业设计(论文)21图41按上下键移动到SYSTEMTYPE,按回车进入该子菜单,如图42图42第三章搭建嵌入式开发环境22再找到S3C2440MACHINES,按回车进入该子菜单,选择MINI2440DEVELOPMENT即可。414为内核打上YAFFS2补丁进入YAFFS2目录执行CDYAFFS2/PATHKERSHC/OPT/FRIENDLYARM/MINI2440/LINUX26322YAFFS2补丁成功打上。415配置和编译带YAFFS2支持的内核在LUNUX内
45、核源代码根目录运行MAKEMENUCONFIG,移动上下键找到FILESYSTEM,如图43,按回车进入该子菜单图43长春汽车工业高等专科学校毕业设计(论文)23再找到“MISCELLANEOUSFILESYSTEM”菜单栏,按回车进入该子菜单,如图44图44出现如图45,找到“YAFFS2FILESYSTEMSUPPORT”,并按空格选中它,这样我们就在内核中添加了YAFFS2文件系统的支持。长春汽车工业高等专科学校毕业设计(论文)24图45在命令行输入MAKEZIMAGE42根文件系统的制作421常用的LINUX根文件系统类型(1)NFS网络文件系统(2)JFFS/JFFS2(3)YAFF
46、S/YAFFS2我采用的是YAFFS2文件系统,它是NANDFLASH嵌入式文件系统。422YAFFS2文件系统的移植1下载YAFFS2文件系统代码。2将下载的文件YAFFSTARGZ拷贝到你的一个临时文件夹中,假设是/TMP,并解压CD/TMPTARXZVFYAFFSTARGZ长春汽车工业高等专科学校毕业设计(论文)25解压后得到DEVELOPMENT文件夹,该文件夹里有两个子文件YAFFS和YAFFS2。考虑到现在的NANDFLASH容量越做越大,而且YAFFS2可以自动选择挂载是YAFFS1还是YAFFS2文件系统,这里我们移植YAFFS2。当然如果你的NANDFLASH只是51216B
47、的,可以只移植YAFFS,因为即使你移植了YAFFS2,它也会自动选择挂载YAFFS1的。3在要移植的内核目录下建立YAFFS2文件夹,并将需要的文件拷贝过来CDLINUXDIR/FSMKDIRYAFFS2CDYAFS2CP/TMP/DEVELOPMENT/YAFFS2/CCP/TMP/DEVELOPMENT/YAFFS/HCP/TMP/DEVELOPMENT/YAFFS2/MAKEFILEKERNELMAKEFILECP/TMP/DEVELOPMENT/YAFFS2/KCONFIG4修改LINUXDIR/FS/YAFFS2中的文件在开始未修改该目录C文件前,会出现很多的BUILTINO的错误
48、,要么是提示某些函数未定义,要么是某些函数重复定义,花了我很长的时间,终于找到问题所在。部分错误提示如下这是我开始编译YAFFS时的错误,YAFFS2的错误更多,但类型差不多FS/BUILTINOTEXT0X8478CINFUNCTIONYAFFS_INTERNAL_READ_SUPER_MTDUNDEFINEDREFERENCETONANDMTD_WRITECHUNKTONANDFS/BUILTINOTEXT0X84790INFUNCTIONYAFFS_INTERNAL_READ_SUPER_MTDUNDEFINEDREFERENCETONANDMTD_READCHUNKFROMNANDFS
49、/BUILTINOTEXT0X84794INFUNCTIONYAFFS_INTERNAL_READ_SUPER_MTDUNDEFINEDREFERENCETONANDMTD_ERASEBLOCKINNANDFS/BUILTINOTEXT0X84798INFUNCTIONYAFFS_INTERNAL_READ_SUPER_MTD长春汽车工业高等专科学校毕业设计(论文)26UNDEFINEDREFERENCETONANDMTD_INITIALISENAND查看C文件,我发觉有很多是通过KCONFIG文件里定义的CONFIG常量来判断执行的,而这些常量在你MAKEMENUCONFIG/XCONFIG后退出后会将你的选择保存到文件中,但YAFFS2目录下的有些C文件中引用了这些常量来判断,却并未加入引用CONFIGH文件,从而会出错。将YAFFS2目录下所有引用了这些常量的C文件中加入对CONFIGH的引用即可INCLUDE5修改LINUXDIR/FS/MAKEFILE和KCONFIG文件。CDLINUXDIR/FSVIMAKEFILE将下面一行添加到MAKEFILE中OBJCONFIG_YAFFS_FSYAFFS2/VIKCONFIG将下面一行添加到KCONFIG中SOURCE“FS/YAFFS2/KCONFIG