linux系统下QTcreator SDK安装和嵌入式设备QT移植详细步骤

2019-07-12 16:57发布

一:linux系统下安装qt(我的版本为ubuntu kylin17.04)

1.下载安装包(官网安装包)

下载这个:Qt 5.9.1 for Linux 64-bit (1.0 GB) (info)
或者从我 {MOD}下载: {MOD}密码:mf6f

2.安装

1.sudo chmod 0777 qt-opensource-linux-x64-5.9.1.run(修改安装包权限)
2.sudo ./qt-opensource-linux-x64-5.9.1.run 安装即可

二:QT移植到嵌入式设备

1.向下位机移植QT

a.获取源码,编译

获取要移植的QT源码: {MOD}密码:juu4
获取配置QT源码的脚本: {MOD}密码:iv9p mkdir /opt/project/qt_source cp xxx/qtbase-opensource-src-5.4.1.tar.xz /opt/project/qt_source cd /opt/project/qt_source
tar -xvf qtbase-opensource-src-5.4.1.tar.xz
cd qtbase-opensource-src-5.4.1
cp xxx/build.sh qtbase-opensource-src-5.4.1
vim mkspecs/linux-arm-gnueabi-g++/qmake.conf
将:arm-linux-gnueabi-修改为arm-cortex_a9-linux-gnueabi-
保存退出

./build.sh //./configure…,生成Makefile
make -j4 //编译
make install -j4 //安装
ls /opt/project/qt/ //查看编译生成的成果
bin lib plugins include doc
file /opt/project/qt/bin/qmake //查看qmake的属性

b.生成的库拷贝到根文件系统

只拷贝将来QT运行时所需的动态库到根文件系统中
/opt/rootfs为最终制作成或者nfs挂接的文件系统 mkdir /opt/rootfs/home/qt/
切记:不能拷贝到/opt/rootfs/lib(只存放标准的系统库)
cp /opt/project/qt/lib /opt/rootfs/home/qt/ -frd
cp /opt/project/qt/plugins /opt/rootfs/home/qt -frd

c.获取触摸屏的设备文件方法:

在下位机执行以下命令:
cat /dev/input/event0 //执行完毕,用手点击触摸屏
如果有打印信息,说明触摸屏的设备文件就是/dev/input/event0
如果点击触摸屏没有反应,接着测试下一个设备文件:
cat /dev/input/event1 //操作步骤同上
直到找到对应的触摸屏的设备文件
提示:注意uboot中bootargs中的lcd=…. tp=….

d.添加QT运行时所需的环境变量

vim /opt/rootfs/etc/profile 添加如下环境变量
export QTDIR=/home/qt
export PATH=QTDIR:PATH
#明确,以下环境变量都是给QT源码使用
#此环境变量用来指示图片的处理库所在的路径
export QT_QPA_PLATFORM_PLUGIN_PATH=/home/qt/plugins
#此环境变量用来指示将来QT运行时操作的LCD显示屏的设备文件
export QT_QPA_PLATFORM=linuxfb:tty=/dev/fb0
#此环境变量用来指示QT运行时所需的字体库
export QT_QPA_FONTDIR=QTDIR/lib/fontsexportsetQTQWSFONTDIR=QTDIR/lib/fonts/
#此环境变量用来指示将来QT在和用户进行交互时对应的
触摸屏的设备文件,触摸屏的设备文件通过hexdump来测试
export TSDEVICE=/dev/input/event0
export QT_QPA_GENERIC_PLUGINS=evdevtouch:TSDEVICEexportQWSMOUSEPROTO=evdevtouch:TSDEVICE
#用来指示将来使用的LCD显示屏的设备文件
export set QWS_DISPLAY=LinuxFb:/dev/fb0
#用来指示LCD显示屏的分辨率
export set QWS_SIZE=1024x600
export set QWS_DISPLAY=”LinuxFb:mmWidth300:mmHeight400:0”
保存退出

e.下位机测试QT移植的成果:

随意找一个QT程序helloworld,获取用qtcreator
创建一个helloworld工程,然后交叉编译测试:
注意:工程名一般就是源码所在的目录名
编译源码生成的二进制文件名和工程名一样! 切记切记:交叉编译自己的QT源码,不能这么做:
cp helloworld /opt/project/
cd /opt/project/helloworld //进入自己的QT源码
qmake -project //生成一个工程文件helloworld.pro
qmake //根据工程helloworld.pro生成Makefile
vim Makefile //观察CXX=g++
make //根据Makefile进行编译
file helloworld //查看属性,一定是针对于X86架构

同样也不能这么干:
利用qtcreator的绿 {MOD}的按钮直接编译!此编译方式
同样生成X86架构的二进制文件!
所以qtcreator仅仅目前用来便于编辑代码!但不能交叉编译!

只能这么干:一定要使用交叉编译QT源码生成的qmake
cd /opt/project/helloworld
/opt/project/qt/bin/qmake -project //生成工程文件helloworld.pro
vim helloworld.pro 添加widgets控件的支持
QT += widgets
保存退出

执行:/opt/project/qt/bin/qmake //根据工程文件helloworld.pro生成的Makeifle
vim Makefile //观察CXX=arm-cortex_a9-linux-gnueabi-g++
make
//创建自己的QT程序在根文件系统rootfs中的存放目录
mkdir /opt/rootfs/home/appbin/
cp helloworld /opt/rootfs/home/appbin

开发板测试
cd /home/appbin/
./helloworld //观察自己的QT程序是否能够启动
//如果有JPG图片,看能否正常显示
//如果有中文,看能够正常显示 此时此刻,如果QT界面有中文,此时是无法显示中文字体:
1.将原先QT中的字体库全部删除
rm /opt/rootfs/home/qt/lib/fonts/* -fr
2.从 {MOD}密码:mgpdftp://project/qt/下载文泉驿字体库wqy-zenhei.ttc
cp wqy-zenhei.ttc /opt/rootfs/home/qt/lib/fonts/
然后再次运行QT程序,即可显示中文字体! 最后:观看QT.avi和QT2.avi视频尝试给QT界面添加背景图片和多级界面操作

问题总结:

1.开源应用软件操作三步骤

./configure … //目的就是为了自动生成Makefile
//利用automake工具对源码进行操作生成configure配置程序
“…”:用来指定编译选项
-prefix /opt/project/qt //-prefix选项用来
指定编译安装目录(将来编译QT源码生成的目标文件的存放目录)
将来只需到/opt/project/qt目录下就可以看到
编译QT源码生成的成果 选项可以通过执行:./configure –help来获取
例如:-qt-libjpeg:表示让QT支持jpg格式的图片
make //编译
make install //将编译QT生成的内容放到/opt/project/qt目录下

2.编译QT源码,到底获取了什么东西呢?

编译QT源码生成的内容如下:
ls /opt/project/qt/
bin lib plugins include doc
bin:编译QT源码生成工具,例如qmake,uic,moc等
这些工具将来用于交叉编译自己的QT程序使用
注意:这些工具都是运行在上位机
lib:编译QT源码生成的各种动态库
其实就是类似QPushButton的类进行了交叉编译
生成了对应的动态库,将来自己的应用程序可以
访问这些动态库,这些动态库运行在下位机
plugins:同lib一样,生成了各种动态库,主要是处理图片的动态库
include:头文件,在上位机编译QT程序时使用
doc:说明文档

3./opt/rootfs/etc/profile配置文件的执行流程

profile:本质就是脚本程序
系统启动流程:
上电->uboot->kernel->rootfs->/sbin/init
->创建子进程执行etc/init.d/rcS,init父进程
此时等待,rcS执行完毕->init再次创建一个子进程来执行
etc/profile脚本文件,一般此文件用于
设置各种全局的环境变量,init父进程继续等待,执行完毕
->init父进程最后创建子进程用来执行/bin/sh->用户输入命令

4.运行QT测试程序helloworld提示各种动态库找不着

一类是缺少标准的系统库:类似libpthread.so找不着
解决办法:到交叉编译器中找到标准的系统库拷贝到
根文件系统/opt/rootfs/lib目录下 另一类是缺少QT库:提示libQtGui.so找不着
解决办法:明确这些动态库都已经拷贝到
根文件系统/opt/rootfs/home/qt/lib下
只需在根文件系统中添加环境变量即可:
上位机执行:
vim /opt/rootfs/etc/profile 文件最后添加:
export LD_LIBRARY_PATH=/home/qt/lib:$LD_LIBRARY_PATH
保存退出
重启下位机 切记切记:
标准的系统库一定放在/opt/rootfs/lib下
自己制作的库和移植的库一律不允许放到/opt/rootfs/lib下
要单独存放,当然了还要注意设置添加LD_LIBRARY_PATH