您的位置:首页 > 运维架构 > Linux

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

2017-07-20 10:14 351 查看
一linux系统下安装qt我的版本为ubuntu kylin1704
下载安装包官网安装包

安装

二QT移植到嵌入式设备
向下位机移植QT
a获取源码编译

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

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

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

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

问题总结
开源应用软件操作三步骤

编译QT源码到底获取了什么东西呢

optrootfsetcprofile配置文件的执行流程

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

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

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

下载这个:Qt 5.9.1 for Linux 64-bit (1.0 GB) (info)

或者从我网盘下载:网盘密码: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源码:网盘密码:juu4

获取配置QT源码的脚本:网盘密码: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的绿色的按钮直接编译!此编译方式

同样生成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.从网盘密码: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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ubuntu qt 嵌入式