《第11章嵌入式Linux Qt应用开发.pptx》由会员分享,可在线阅读,更多相关《第11章嵌入式Linux Qt应用开发.pptx(55页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、嵌入式系统原理与开发教程嵌入式LinuxQt应用开发主讲人:赖树明东莞理工学院01LinuxQt开发环境搭建03配置RK3399Qt版本编译环境04课程作业任务02移植Qt到RK3399目标板0101LinuxQt开发环境搭建Qt相关软件下载安装QtCreator安装格式化插件LinuxQt开发环境搭建Qt相关软件下载01n下载地址:http:/download.qt.io/archive/qt/n打开下载网页,点击5.12 进入5.12所有子版本下载页面,我们选择5.12.0版本,进入打点击 qt-opensource-linux-x64-5.12.0.run 即可下载到。Linux历史Li
2、nuxQt开发软件下载复制到qt-opensource-linux-x64-5.12.0 Ubuntu系统中,打开命令终端,给它增加执行权限:lailai-machine:/work/source$chmod+x qt-opensource-linux-x64-5.12.0.run运行安装程序:lailai-machine:/work/source$./qt-opensource-linux-x64-5.12.0.run接下来会弹出安装界面,根据提示完成安装即可。Linux安装QtCreatorLinuxQt开发环境搭建Qt相关软件下载01n下载地址:http:/download.qt.io/
3、archive/qt/n打开下载网页,点击5.12 进入5.12所有子版本下载页面,我们选择5.12.0版本,进入打点击 qt-opensource-linux-x64-5.12.0.run 即可下载到。Linux历史LinuxQt开发软件下载复制到qt-opensource-linux-x64-5.12.0 Ubuntu系统中,打开命令终端,给它增加执行权限:lailai-machine:/work/source$chmod+x qt-opensource-linux-x64-5.12.0.run运行安装程序:lailai-machine:/work/source$./qt-opensour
4、ce-linux-x64-5.12.0.run接下来会弹出安装界面,根据提示完成安装即可。Linux安装QtCreatorLinuxQt开发环境搭建Qt相关软件下载01n下载地址:http:/download.qt.io/archive/qt/n打开下载网页,点击5.12 进入5.12所有子版本下载页面,我们选择5.12.0版本,进入打点击 qt-opensource-linux-x64-5.12.0.run 即可下载到。Linux历史LinuxQt开发软件下载复制到qt-opensource-linux-x64-5.12.0 Ubuntu系统中,打开命令终端,给它增加执行权限:lailai-
5、machine:/work/source$chmod+x qt-opensource-linux-x64-5.12.0.run运行安装程序:lailai-machine:/work/source$./qt-opensource-linux-x64-5.12.0.run接下来会弹出安装界面,根据提示完成安装即可。Linux安装QtCreatorLinuxQt开发环境搭建Qt相关软件下载01Linux历史Linux安装QtCreatorn安装过程比较简单,这里只给出需要我们配置的界面,如右图所示。LinuxQt开发环境搭建安装完成其他插件01nQt Creator 编译时依赖 libgl库,默认情
6、况下,Ubuntu是没有安装的,需要用户自己安装,否则 后面编译 QT工程时会报错:compilation pilation terminated.:fatal error:GL/gl.h:No such file or directory .:fatal error:GL/gl.h:No such file or directory 解决方法是在命令行终端中在线安装依赖库:sudo apt-get install libgl1-mesa-dev-yLinux历史libgl库安装LinuxQt开发环境搭建安装完成其他插件01n在Ubuntu上安装搜狗输入法,启用fcitx输入系统后Qt Cre
7、ator无法输入中文,原因是缺少fcitx的支持库libfcitxplatforminputcontextplugin.so,解决方法如下,在命令行进行以下操作:$dpkg-L fcitx-frontend-qt5|grep.so$cp/usr/lib/x86_64-linux-gnu/qt5/plugins/platforminputcontexts/libfcitxplatforminputcontextplugin.so 如果没有,则下载安装相关库,如下所示:sudo apt-get install fcitx-frontend-qt5解决QtCreator软件无法输入中文问题Linux
8、Qt开发环境搭建安装完成其他插件01n在Ubuntu上安装搜狗输入法,启用fcitx输入系统后Qt Creator无法输入中文,原因是缺少fcitx的支将步骤中所示路径下的库文件复制到Qt插件目录下,如Qt的安装目录是/home/lai/Qt5.12.0,则输入命令,如下所示:$cd/home/lai/Qt5.12.0/Tools/QtCreator/lib/Qt/plugins/platforminputcontexts/$cp/usr/lib/x86_64-linux-gnu/qt5/plugins/platforminputcontexts/libfcitxplatforminputco
9、ntextplugin.so ./n 修改libfcitxplatforminputcontextplugin.so文件权限,如下所示:$chmod +x libfcitxplatforminputcontextplugin.son 重启Ubuntu系统,进入系统后重新运行Qt Creator,就可以在Qt Creator编辑器中正常输入中文。解决QtCreator软件无法输入中文问题LinuxQt开发环境搭建安装完成其他插件01nQt Creator可安装第三方的代码格式化工具,使用第三方代码格式工具可以让代码排版更规范、标准,本节介绍Qt Creator中集成Artistic Style格
10、式化工具来实现代码的自动格式化排版。n下载地址:https:/ 本书选择下载 astyle_3.1_linux.tar.gz,这个文件是Linux系统下使用程序源码。安装格式化插件nLinux系统下载astyle_3.1_linux.tar.gz,复制到 Linux用 户 家 目 录 中,解 压astyle_3.1_linux.tar.gz,然后使用cd命令进入到解压出来的Artistic Style源码目录的build/gcc 目录。编译ArtisticStylen$cd/astyle/build/gccn输入make命令进行编译:n输入sudo make install 命令安装 到软件被
11、安装到/usr/bin目录中了LinuxQt开发环境搭建安装完成其他插件01nQt Creator可安装第三方的代码格式化工具,使用第三方代码格式工具可以让代码排版更规范、标准,本节介绍Qt Creator中集成Artistic Style格式化工具来实现代码的自动格式化排版。n下载地址:https:/ 本书选择下载 astyle_3.1_linux.tar.gz,这个文件是Linux系统下使用程序源码。安装格式化插件nLinux系统下载astyle_3.1_linux.tar.gz,复制到 Linux用 户 家 目 录 中,解 压astyle_3.1_linux.tar.gz,然后使用cd命
12、令进入到解压出来的Artistic Style源码目录的build/gcc 目录。编译ArtisticStylen$cd/astyle/build/gccn输入make命令进行编译:n输入sudo make install 命令安装 到软件被安装到/usr/bin目录中了LinuxQt开发环境搭建安装完成其他插件01n使能Beautifier插件打开QtCreator,单击帮助关于插件C+勾选 Beautifier(experimental)插件,关闭QtCreator并重启,使能Beautifier插件界面,如图所示。QtCreator中添加astyle格式化插件LinuxQt开发环境搭建安
13、装完成其他插件01n设置代码格式化打 开 工 具 选 项Beautifier,具体的设置如图所示。QtCreator中添加astyle格式化插件LinuxQt开发环境搭建安装完成其他插件01nBeautifier插件选项在Value中输入以格式化参数,后点击OK,具体格式化参数放在后面PPT看。QtCreator中添加astyle格式化插件LinuxQt开发环境搭建安装完成其他插件01nBeautifier 格式参数#-style=attach#-style=allman-style=k&rindent-col1-comments#注释和代码缩进对齐。indent=spaces=4#缩进采用4
14、个空格indent-switches#-S 设置 switch 整体缩进indent-cases#-K 设置 cases 整体缩进indent-namespaces#-N 设置 namespace 整体缩进indent-preproc-block#-xW 设置预处理模块缩进QtCreator中添加astyle格式化插件LinuxQt开发环境搭建安装完成其他插件01nBeautifier 格式参数indent-preproc-define#-w 设置宏定义模块缩进pad-oper#-p 操作符前后填充空格delete-empty-lines#-xe 删除多余空行add-braces#-j 单行语
15、句加上大括号align-pointer=name#*、&这类字符靠近变量名字#align-pointer=type *、&这类字符靠近类型break-blocks#语句块(如if,for,while)前后增加空行。add-braces#语句或者语句块增加大括号。attach-closing-while#使用do-while语句时,将while与结束括号放置同一行。QtCreator中添加astyle格式化插件LinuxQt开发环境搭建安装完成其他插件01nBeautifier插件选项单击Add按钮,进入如图11.17所示界面。具体的设置如图所示。QtCreator中添加astyle格式化插件0
16、202移植Qt到RK3399目标板制作精简的根文件系统移植tslib到ARM开发板移植Qt5.12到ARM开发板移植Qt到RK3399目标板 制作精简的根文件系统02嵌入式Linux产品中,如果不需要安装庞大的Ubuntu系统,可以使用busybox制作一个精简根文件系统,然后打包为ext4格式文件系统,下载到开发板替换原来出厂系统中的根文件系统这部分映像,u-boot和kernel映像不需要替换。使用这个精简的根文件系统,我们可以在上面移植Qt5,编写图形界面程序。概述根文件系统制作1.把本节配套资料的rootfs-busybox-snd-ok-rk3399.tar.bz2压缩包和make-
17、rootfs.sh复制到Ubuntu系统的工作目录(请保持它们在同级目录下),打开命令终端进入文件所在目录解压:tar xf rootfs-busybox-snd-ok-rk3399.tar.bz2tar xf rootfs-busybox-snd-ok-rk3399.tar.bz2 。2.给打包脚本增加可执行权限:chmod+x make-rootfs.sh chmod+x make-rootfs.sh3.打包文件系统生成映像文件:./make-rootfs.sh./make-rootfs.sh rootfsrootfs 回车后要输入Ubuntu密码,因为脚本中使用到了sudo 临时提升权限
18、。执行后需要一定的时间,会生成 linux-rootfs.img 文件系统映像。移植Qt到RK3399目标板 制作精简的根文件系统02连接好开发板,并且使用Type-C线把 开 发 板 和 电 脑 相 连,打 开AndroidTool固件更新工具,同时按下 开 发 板 的 RESET按 键 和RECOVERY按 键,然 后 先 松 开RESET按键,2s后松开RECOVERY按键,让开发板进入Loader模式。如下所示:注意:启动AndroidTool工具,默认选项可能没有的rootfs选项,需要自己先在软件上增加这栏,再单击界面上的“读取分区表”按键。下载根文件系统到开发板移植Qt到RK33
19、99目标板 制作精简的根文件系统02读取完分区表后,把rootfs栏目前面的复选框选上,并且该栏单击右边的空格加载上面做好的根文件系统文件,最后单击“执行”开始下载根文件系统,如图所示。下载根文件系统到开发板移植Qt到RK3399目标板 制作精简的根文件系统02n下载好文件系统后,系统自动重启,在开发板上串口终端上就可以输入用户名和密码登录开发板,使用命令和开发板进行交互了。n使用busybox制作的精简文件系统,进入后,LCD屏是没有图形显示的,图形显示需要我们写应用程序,比如后面的移植Qt,然后编写Qt程序,运行起来后就会显示在开发板的LCD屏上。测试启动系统输入几次回车edu118log
20、in:root#输入root用户名登录Password:#输入root用户密码,配套的系统是123456login233:rootloginonconsole#密码正确就可以登录成功1.安装autoconf工具:sudo apt-get install autoconfsudo apt-get install autoconf2.复制tslib-1.20.tar.gz到linux系统,然后打开命令终端 解压源码:tar-xf tslib-1.20.tar.bz2 tar-xf tslib-1.20.tar.bz23.配置 lailai-machine:tslib-1.20$./autogen.
21、sh./autogen.sh.lailai-arm-machine:tslib-1.20$./configure./configure-prefix=/opt/tslib-prefix=/opt/tslib-host=aarch64-linux-gnu-host=aarch64-linux-gnu-enable-static-enable-shared-enable-static-enable-shared CC=aarch64-linux-gnu-gcc CC=aarch64-linux-gnu-gcc CPP=aarch64-linux-gnu-gcc-ECPP=aarch64-linux
22、-gnu-gcc-E移植Qt到RK3399目标板 移植tslib到ARM开发板024.编译、安装tslib 交叉编译器环境变量是在普通用户的/.bashrc文件中导出的,只在当前用户环境下才有效,当使用sudo后就会找不到编译器,因此我们可以给sudo设置一个别名,让它可以携带当前用户的环境变量,要注意的是,该命令只是当前命令终端临时生效,如下:lailai-arm-machine:tslib-1.20$alias sudo=sudo env PATH=$PATHalias sudo=sudo env PATH=$PATHlailai-arm-machine:tslib-1.20$alias
23、sudo=sudo env PATH=$PATH alias sudo=sudo env PATH=$PATH执行编译和安装命令:lailai-arm-machine:tslib-1.20$make-j8make-j8lailai-arm-machine:tslib-1.20$sudo make installsudo make install注意:由于在普通用户下操作,安装到/opt目录,需要有root权限,因此执行安装命令时候前面需要添加sudo临时提升权限。移植Qt到RK3399目标板 移植tslib到ARM开发板025.修改tslib配置文件内容把/opt/tslib/etc/ts.c
24、onf 内容全部删除,输入内空,如下所示:module_raw inputmodule pthrespmin=1module variance delta=30module dejitter delta=100module linear以上内容实际上只是把第2行#module_raw input前面的#注释取消。6.复制生成的tslib库相关文件复制到开发板根文件系统中把整个编译生成的/opt/tslib文件夹复制到根文件系统opt目录中,本文/work/nanopc-t4/rootfs是根文件系统路径,请大家根据实际情况修改,如下所示:lailai-arm-machine:tslib-1.2
25、0$cp/opt/tslib /work/nanopc-t4/rootfs/opt/-rfcp/opt/tslib /work/nanopc-t4/rootfs/opt/-rf移植Qt到RK3399目标板 移植tslib到ARM开发板027.接下来在虚拟机的Ubuntu系统中操作,在前面解压出来的精简根文件系统rootfs文件夹的opt/目录中创建tslib-env.sh文件,如下(如Vim不熟悉,也可以使用gedit编辑器):$vim/work/nanopc-t4/rootfs/opt/tslib-env.shvim/work/nanopc-t4/rootfs/opt/tslib-env.s
26、h注意:/work/nanopc-t4/rootfs/是你自己的根文件系统路径,请根据实际情况修改。并添加以下内容:移植Qt到RK3399目标板 移植tslib到ARM开发板02#!/bin/sh#注意:event1是你系统中触摸屏的设备名,根据实际情况修改export TSLIB_TSDEVICE=/dev/input/event1#注意:/opt/tslib是前面移植好的tslib存放在开发板根文件系统的目标路径export TSLIB_ROOT=/opt/tslib#这个是存放校正参数的文件export TSLIB_CALIBFILE=/etc/pointercal#存放配置信息文件,不
27、需要修改export TSLIB_CONFFILE=$TSLIB_ROOT/etc/ts.conf#存放插件库路径,不需要修改export TSLIB_PLUGINDIR=$TSLIB_ROOT/lib/tsexport TSLIB_CONSOLEDEVICE=none#LCD屏显示设备名称,根据实际情况修改,一般也是fb0export TSLIB_FBDEVICE=/dev/fb0#导出搜索触摸屏插件库路径到环境变量,不需要修改export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$TSLIB_ROOT/lib#导出触摸屏测试程序路径到环境变量,不需要修改expor
28、t PATH=$PATH:$TSLIB_ROOT/bin移植Qt到RK3399目标板 移植tslib到ARM开发板02保存退出后,给文件增加可执行权限:$sudo chmod+x/work/nanopc-t4/rootfs/opt/tslib-env.sh说明:/work/nanopc-t4/rootfs/是前面解压出来的Busybox制作的精简根文件系统路径,读者根据自己的实际情况修改。移植Qt到RK3399目标板 移植tslib到ARM开发板028.编辑开发板根文件系统etc/profile文件,导入前面写好的触屏环境变量初始化脚本,如下操作:$vim/work/nanopc-t4/roo
29、tfs/etc/profile vim/work/nanopc-t4/rootfs/etc/profile添加内容,如下所示:source/opt/tslib-env.shsource/opt/tslib-env.sh9.打包文件系统,下载到开发板上参考本章中前面打包文件系统的步方法,把添加了触屏功能的根文件系统生成的映像文件下载到开发板上。下载完成,重新启动开发板,在串口终端进行登录操作10.触摸屏校正登录开发板成功后,运行触摸屏校正程序。首先使用cd命令进入/opt/tslib/bin/目录,在命令终端中输入./ts_calibrate,LCD屏上会出现十字坐标,依次单击触摸屏上出现的十字
30、坐标中心,单击5个点后完成触摸屏校验,校正完成后会在根文件系统的etc目录下生成一个名为pointercal的校正文件。rootlai-arm-machine#./ts_calibrate./ts_calibrateaad.c :aad.c :int add(int a,int b)int c;c=a+b;return c;编写功能函数sub.c :sub.c :int sub(int a,int b)int c;c=a-b;return c;aad.h :aad.h :#ifndef _ADD_H_#define _ADD_H_int add(int a,int b);#endifsub.h
31、 :sub.h :#ifndef _SUB_H_#define _SUB_H_int sub(int a,int b);#endif gcc-c add.c-o add.o gcc-c add.c-o add.o gcc-c sub.c-o sub.o gcc-c sub.c-o sub.o编译函数为.o文件 ar-crsv libfunction.a add.o sub.o ar-crsv libfunction.a add.o sub.o把.o文件封装成.a执执行行上上面面命命令令后后会会生生成成libfunction.alibfunction.a静静态态库库文文件件,后后面面就就可可以以
32、供供第第三三方方程程序使用。序使用。移植Qt到RK3399目标板 移植Qt5.12到ARM开发板02main.c:main.c:#include#include#include add.h /#include add.h /引入函数声明引入函数声明#include sub.h#include sub.h /引入函数声明引入函数声明int main(void)int main(void)printf(2+1=%d;rn2-1=%drn,add(2,1),sub(2,1);printf(2+1=%d;rn2-1=%drn,add(2,1),sub(2,1);return 0;return 0;测试
33、代码编写工程文件存放结构 include include add.h add.h sub.h sub.h src src add.c add.c libfunction.a main.c main.c sub.c sub.c说明:编译为说明:编译为.a.a 文件后,可以把文件后,可以把add.cadd.c、sub.csub.c删除,我们只需要删除,我们只需要.a.a文件即可。文件即可。编译:编译:gcc-o main main.c gcc-o main main.c libfunction.a-I./include/-I./include/-这种是把库当成源文件一样使用或者:或者:gcc-o
34、main main.c-I./include gcc-o main main.c-I./include-L./-lfunction -这种是标准的使用方法编编译译生生成成mainmain可可执执行行程程序序后后可可以以删删除除.a.a文文件件,不不会会影影响响到到后后面面可可执执行行程程序序的的运运行行,因因为它已复制一份代码到其中。为它已复制一份代码到其中。运行:运行:./main./main移植Qt到RK3399目标板 动态库与静态库的比较020303配置RK3399Qt版本编译环境RK3399Qt套件配置RK3399Qt配置测试编译Qt程序添加ARM版本编译器依次打开软件的工具-选项-k
35、its-编译器,如图11.20所示。单击图11.20的添加GCCC,会弹出对话框,如图11.21所示。配置RK3399Qt版本编译环境03配置QtCreator软件RK3399Qt套件配置添加ARM版本编译器依次打开软件的工具-选项-kits-编译器,如图11.20所示。单击图11.20的添加GCCC,会弹出对话框,如图11.21所示。配置RK3399Qt版本编译环境03配置QtCreator软件RK3399Qt套件配置配置RK3399Qt版本编译环境03配置QtCreator软件RK3399Qt套件配置配置RK3399Qt版本编译环境03配置QtCreator软件RK3399Qt套件配置配置
36、RK3399Qt版本编译环境03配置QtCreator软件RK3399Qt套件配置上图中编译器的名称可以自己定义,编译器的路径是arm64gcc的编译器路径,如果你不清楚arm64gcc编译器的路径是什么,可以通过命令终端查找,如下所示:lailai-machine:$which aarch64-linux-gnu-gcc/usr/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc然后单击apply按钮即可,配置RK3399Qt版本编译环境03配置QtCreator软件RK3399Qt套件配置
37、使用同样的方法添加ARM版本的g+编译器,然后按照上图的顺序依次单击,完成ARM版本编译器添加。配置RK3399Qt版本编译环境03配置QtCreator软件RK3399Qt套件配置添加ARM版本Qt:依次单击工具选项kitsQt Versions添加,根据提示选择ARM版本Qt SDK qmake,如图所示。配置RK3399Qt版本编译环境03配置QtCreator软件RK3399Qt套件配置添加Qt编译套件:单击构建套件手动设置添加,然后填写文本框中的内容,其中名称自定义,编译器填写前面添加的编译器,Qt版本选择前面添加的Qt SDK版本,按照顺序操作即可,如图所示。1.先新建一个Qt工程
38、或打开一个Qt示例工程配置RK3399Qt版本编译环境03交叉编译Qt程序新建Qt工程菜单1.1.先新建一个先新建一个QtQt工程或打开一个工程或打开一个QtQt示例工程示例工程配置RK3399Qt版本编译环境03交叉编译Qt程序新建Qt工程菜单配置RK3399Qt版本编译环境03交叉编译Qt程序设置Qt项目名称及保存位置选择桌面版和ARM版本的套件,到时可以切换ARM版本Qt版本和桌面版Qt版本编译套件,选择工程开发套件如图:配置RK3399Qt版本编译环境03交叉编译Qt程序选择Qt编译套件配置RK3399Qt版本编译环境03交叉编译Qt程序选择默认的窗口基类完成Qt工程创建配置RK339
39、9Qt版本编译环境03交叉编译Qt程序切换Qt开发套件在实际的开发中,可以按照下图的方式进行切换,但是如果更换了编译套件,则必须重新编译生成,不能直接单击执行,切换Qt编译套件界面如图配置RK3399Qt版本编译环境03交叉编译Qt程序编译Qt程序在实际的开发中,可以按照下图的方式进行切换,但是如果更换了编译套件,则必须重新编译生成,不能直接单击执行,切换Qt编译套件界面如图配置RK3399Qt版本编译环境03交叉编译Qt程序查看可执行文件生成路径编译后会生成所编译套件对应版本的Qt应用程序,可以看到名为/home/edu118/qt-dev/test/build-qttest-arm_64_
40、qt_5_12-Release的目录。其中生成可执行文件目录位置可以直接在QtCreator中看到,如图所示:配置RK3399Qt版本编译环境03测试编译Qt程序切换到UI界面编译出ARM版本的Qt应用程序,现在可以把它复制到开发板上,在开发板上测试运行。在上小节的Qt工程中添加一个日历控件在界面上,单击“编辑”选项,然后双击Forms分组下的widget.ui文件,操作如下:添加日历控件配置RK3399Qt版本编译环境03测试编译Qt程序界面使用栅格布局编译Qt程序配置RK3399Qt版本编译环境03测试编译Qt程序查看编译结果配置RK3399Qt版本编译环境03测试编译Qt程序1.等待编译
41、完成后,就可以进入编译目录,复制可执行文件到开发板上了,操作如下。2.进入上小节Qt应用程序目录:3.$cd/qt-dev/test/build-qttest-arm_64_qt_5_12-Release4.复制生成的可执行文件到Windows共享目录:5.$cp qttest/mnt/hgfs/rk3399/6.启动开发板,在串口终端输入用户名和密码登录开发板,使用rz命令把qttest下载到开发板上,然后运行它们,即可在开发板LCD屏上看到图形界面。7.rootedu118 qt-test#rz-y 8.说明:使用rz下载文件,在串口终端中有时候会显示有错误,但是不需要理会,实际上是传输成功的。但是要注意,如果下载的文件比较大,rz命令下载则可能会失败,这种情况下建议使用U盘或SD卡复制文件到开发板上。0404课程作业任务作业任务描述作业任务1.配置种上自己喜欢的Artstic Style代码格式风格。2.总结tslib移植时环境变量中关键的环境变量项的含义及如何根据实际硬件调整。3.学习Qt自带的一些例子,并且编译成可执行文件下载到开发板上运行。课程作业任务0405致谢ACKNOWLEDGEMENTS感谢聆听,如有不足之处敬请指出,欢迎提出您的宝贵建议!致谢
限制150内