1、嵌入式课程设计报告嵌入式课程设计-基于QT的界面程序设计学院: 信息科学与工程学院 专业: 电子信息工程 班级: 姓名: 学号: 指导老师: 日期: 2015年06月15日 目录一、设计目的 3二、设计任务及要求 3三、方案设计 31 内核编译 32 文件系统 4四、搭建嵌入式系统开发环境 41 安装交叉编译器 42 安装tslib-1.4.1 43 安装Qt4.7 54、qt-4.5文件系统 6五、NFS挂载 6六、QT界面设计(LED实现) 71 QT creater安装 72 ARM平台的编译环境设置 73 创建工程 74 LED界面设计 85 主要程序代码 8七、结果 12八、总结 1
2、21遇到的问题及解决方法 122实验心得感想 13基于QT界面的程序设计一、设计目的1进一步巩固嵌入式系统的基本知识;2掌握嵌入式应用系统的基本结构;3掌握嵌入式系统开发环境建立和使用;4掌握嵌入式系统基本驱动、应用程序的设计调试和编译移植方法;5学会查阅有关专业资料及设计手册;6.QT界面编程。二、设计任务及要求1掌握嵌入式系统开发环境建立和使用;2掌握嵌入式系统基本驱动、应用程序的设计调试和编译移植方法;3、QT在PC上的安装、4、QT在开发板上的移植5、QT界面程序设计6编写设计说明书(方案的确定、设计环节的考虑及必要说明等)及设备的使用说明;7绘制有关图纸三、方案设计1 内核编译两种方
3、案;一:静态编译内核,二:动态编译内核。用动态链接库编译生成的可执行文件需调用.so文件方可正常运行,灵活但稍显麻烦;用静态链接库编译生成的可执行文件可直接运行,不用再调用如.so般的依赖库文件,简单但不灵活,本次选用静态编译。2 文件系统在嵌入式linux系统中,编译的环境和运行的环境不一样,所以我们需要交叉编译工具,一般是在PC上面运行交叉编译工具编译好程序,然后再烧写到目标板的flash上,对于应用程序,我们需要频繁的调试,如果每次都需要烧写,那一定是一件很烦的事情,因此我们此次尝试通过NFS文件系统来调试程序的方法,减少调试工作量。四、搭建嵌入式系统开发环境1 安装交叉编译器(1)解压
4、EABI-4.3.3_EmbedSky_20091210.tar.bz2tar -xvf EABI-4.3.3_EmbedSky_20091210.tar.bz2 (2)设置环境变量export PATH=/opt/EmbedSky/4.3.3/bin:$PATH(3).永久设置环境变量vi /etc/profile 在最后添加一行export PATH=/opt/EmbedSky/4.3.3/bin:$PATH2 安装tslib-1.4.1(1)解压tslib-1.4.tar.gztar -zxvf tslib-1.4.tar.gz -C /(2)创建目录mkdir /opt EmbedSk
5、y/tslib_install(3)生成configure./autogen.sh(4)配置./configure -prefix=/opt/EmbedSky/tslib_install -host=arm-linux ac_cv_func_malloc_0_nonnull=yes(5)编译(大概2030分钟)make(6)安装make install如果以上步骤没错,则可以在/opt/tslib_install下出现我们需要的库文件,这些库文件我们移植时会用到。3 安装Qt4.7(1)解压qt-everywhere-opensource-src-4.7.0.tar.gztar -zxvf q
6、t-everywhere-opensource-src-4.7.0.tar.gz -C /(2)创建目录,把QT4.7安装在qt-4.7.0-arm目录下mkdir /opt/qtEmbedded/qt-4.7.0-arm(3)配置configure./configure -embedded arm -release -opensource -silent -qt-libpng -qt-libjpeg -qt-libmng -qt-libtiff -no-multimedia -make libs -nomake tools -nomake examples -nomake docs -nom
7、ake demos -qt-kbd-linuxinput -qt-mouse-tslib -xplatform qws/linux-arm-g+ -little-endian -qt-freetype -depths 16,18 -qt-gfx-linuxfb -no-qt3support -no-nis -no-cups -no-iconv -no-dbus -no-openssl -no-fast -no-accessibility -no-scripttools -no-mmx -no-multimedia -svg -no-webkit -no-3dnow -no-sse -no-ss
8、e2 -no-gfx-transformed -no-gfx-multiscreen -no-gfx-vnc -no-gfx-qvfb -no-glib -prefix /opt/EmbedSky/qt-4.7-arm/ -I /opt/EmbedSky/tslib_install/include -L /opt/EmbedSky/tslib_install/lib(4)编译(大概2.5小时)make(5)安装make install安装成功后/opt/QtEmbedded-4.7.0-arm/bin里面有qmake,稍后会用到4、qt-4.5文件系统(1)将root_qt_4.5_2.6.3
9、0.4_20100601.tar.bz2 解压到根下(2)超级用户下修改文件权限Chmod R 777 /opt/EmbedSky/root_nfs (3)拷贝字体文件解压: tar -xvf /opt/wqy-zenhei-0.8.38-1.tar.gz -C /opt/EmbedSky (3)Qt4.7相关文件mkdir -p /opt/EmbedSky/root_nfs/opt/qt_4.7cp -rf /opt/EmbedSky/qt-4.7-arm/lib /opt/EmbedSky/root_nfs/opt/qt_4.7cp -rf /opt/EmbedSky/qt-4.7-arm
10、/plugins /opt/EmbedSky/root_nfs/opt/qt_4.7mkdir /opt/EmbedSky/root_nfs/opt/qt-4.7/bin拷贝自己的可执行文件到bin/opt/EmbedSky/root_nfs/opt/qt-4.7/bin(4) 修改环境profilevi /etc/profile export set QTDIR=/opt/qt-4.7 export set QPEDIR=/opt/qt-4.7五、NFS挂载参考实验指导书二,在CentOS下安装、配置nfs服务安装NFS安装nfs服务器端:$yum install nfs-kernel-se
11、rver 3、配置/etc/exportsNFS允许挂载的目录及权限在文件/etc/exports中进行了定义。例如,我们要将根目录下的/opt/EmbedSky/rootfs目录共享出来,那么我们需要在/etc/exports文件末尾添加如下一行:/opt/EmbedSky/rootfs *(rw,sync,no_root_squash)4、 拷贝文件将 tslib_install/lib/ 下的文件及bin下 tslib提供的触摸屏校准程序 ts_calibrate和仅利用qt-4.7生成的 lib和 plugins 文件。拷贝到共享目录/source/rootfs下5 文件系统挂载(1)
12、设置虚拟机的IP地址(2)设置参数 超级终端命令端口下,USB线,网线,和串口连接正常,启动开发板,进入调试。依次设置PC机ip :192.168.1.7和开发板IP:192.168.1.6。保存并退出(3)nfs启动选择8进入系统,成功后 ,超级终端命令端口输入ls查看开发板文件系统中是否有先前拷贝的文件,有即挂载成功。六、QT界面设计(LED实现)1下载QT creater解压安装 【注:新版下载文件格式为.run文件,需要更改文件权限才能正常安装使用】2 ARM平台的编译环境设置(1)添加arm的环境3 创建工程(1)创建工程打开qtcreator后,创建一个工程,选择QT Gui Ap
13、plication 或者QT Widgets Application (3)手动arm 和pc机环境下的qmake4 LED界面设计(LED 14分别控制等01,CLOSE用于熄灭全部的灯)5 主要程序代码(1)程序初始化Led.h#ifndef LED_H#define LED_H#include#include namespace Ui class LED;class LED : public QMainWindow Q_OBJECT public: explicit LED(QWidget *parent = 0); LED();public slots: void L1(); void
14、 L2(); void L3(); void L4(); void CL();private: Ui:LED *ui; int led1,led2,led3,led4;#endif / LED_HLed.cpp#include led.h#include ui_led.h#include #include #include #include#include #include#include#includeint fd;LED:LED(QWidget *parent) : QMainWindow(parent), ui(new Ui:LED) ui-setupUi(this); int scre
15、enWidth=QDirectPainter:screenWidth(); int screenHeight=QDirectPainter:screenHeight(); this-resize(screenWidth,screenHeight); connect(ui-pushButton_LED1,SIGNAL(clicked(),this,SLOT(L1();/定义信号获取和控制程序代码 connect(ui-pushButton_LED2,SIGNAL(clicked(),this,SLOT(L2(); connect(ui-pushButton_LED3,SIGNAL(clicked
16、(),this,SLOT(L3(); connect(ui-pushButton_LED4,SIGNAL(clicked(),this,SLOT(L4(); connect(ui-pushButton_CLOSE,SIGNAL(clicked(),this,SLOT(CL(); led1=0;/软件清0,熄灭所有LED灯 led2=0; led3=0; led4=0; fd=open(/dev/GPIO-Control,0);/定义io端口 if(fd0) perror(open device leds fail); exit(1); LED:LED() delete ui;void LED:
17、L1()/LED控制程序 led1+; if(led1=1)/检测到有触屏信号L1输入全部灯熄灭,再将L1点亮 ioctl(fd,0,0); ioctl(fd,0,1); ioctl(fd,0,2); ioctl(fd,0,3); ioctl(fd,1,0); qDebug() led1 on ; else if(led1=2) led1=0; ioctl(fd,0,0); qDebug() led1 off ; void LED:L2()/检测到有触屏信号L2入全部灯熄灭,再将L2亮 led2+; if(led2=1) ioctl(fd,1,1); qDebug() led2 on ; el
18、se if(led2=2) led2=0; ioctl(fd,0,1); qDebug() led2 off; void LED:L3()/检测到有触屏信号L3入全部灯熄灭,再将L3亮 led3+; if(led3=1) ioctl(fd,1,2); qDebug() led3 on ; else if(led3=2) led3=0; ioctl(fd,0,2); qDebug() led3 off ; void LED:L4()/检测到有触屏信号L4入全部灯熄灭,再将L4点亮 led4+; if(led4=1) ioctl(fd,1,3); qDebug() led4 on ; else i
19、f(led4=2) led4=0; ioctl(fd,0,3); qDebug() led4 off ; void LED: CL()/清除键,当所有灯点亮时,该键有效,摁下全部灯灭 if(led1=1)&(led2=1)&(led3=1)&(led4=1) ioctl(fd,0,0); ioctl(fd,0,1); ioctl(fd,0,2); ioctl(fd,0,3); qDebug() all led off ; / else/ ioctl(fd,1,0);/ ioctl(fd,1,1);/ ioctl(fd,1,2);/ ioctl(fd,1,3);/ qDebug() all le
20、d on ;/程序构建调试完毕后,进入终端将源代码编译,将可执行文件拷贝到source下的rootfs中。在超级终端下调试:(1) 到校准文件的路径下执行./ts_calibtate(2) 输入ps命令,把 hello world程序kill(3) 执行./zgh qws fn HHH,成功后,能弹出自己设计的界面,按键能按照之前设计的运行。 七、结果成功后,能弹出自己设计的界面,按键能按照之前设计的运行。LED 1:按一次点亮LED0,再按一次熄灭 LED 2:按一次点亮LED1,再按一次熄灭 LED 3:按一次点亮LED2,再按一次熄灭 LED 4:按一次点亮LED3,再按一次熄灭 CLO
21、SE :当全部灯亮的时候,按一次熄灭全部的灯。八、总结1遇到的问题及解决方法错误1不同操作系统下指令的差别,之前Ubuntu使用apt-get的指令在centOS中需要使用yum命令,个别指令存在差别错误2configure:error:noacceptableCcompilerfoundin$PATHyum-yinstallgccgcc-c+gdb 问题解决。错误3 make command not found命令yum install make问题解决。错误4: install-fixincludes error 1.命令make clean 然后 make问题解决。错误5: gnu/st
22、ubs-32.h no such file or directory命令 yum install glibc-devel.i686问题解决错误6不同操作系统下指令的差别,之前Ubuntu使用apt-get的指令在centOS中需要使用yum命令,个别指令存在差别错误7: ft2build.h: No such file or directory命令yum install fontconfig-devel问题解决。错误8: Basic XLib functionality test failed! You might need to modify the include and library
23、search paths by editing QMAKE_INCDIR_X11 and QMAKE_LIBDIR_X11命令:执行yum install libX*,直接安装所有libX开头的包。程序编译错误:错误9:cannot find lgl error: collect2: ld returned 1 exit status命令yum install mesa-libGL-devel mesa-libGLU-devel (2个opengl核心库)命令yum install freeglut-devel (OpenGL Utility ToolKit )2实验心得感想通过本次实验,更加深入的了解了嵌入式程序开发的流程和方法。学习在搭建交叉编译环境的基础上对开发板进行NFS挂载调试。理论学习和实际操作存在着巨大差距,在课本上诸多的环境设置都是理想的,但一旦自己动手却总是一波三折,由于是用自己新装的centOS系统,因此总是会缺少各种设置或者编译器版本不够诸如此类的问题,但可喜的是,在同学帮助下和查阅资料的情况下,诸多问题迎刃而解,并最终成功进入编写程序调试设备的阶段。在尝试解决各类问题的同时,自己也从中学到更多的知识,更加输入的了解其环境搭建过程。总之,此次课程设计收获颇丰。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1