QT编译环境配置,以及开发板移植的问题

一、QT编译环境的设置

        编译环境的配置,这个是真个系统构建的时候配置的问题,比较麻烦,后面在补这部分的知识。

        韦东山的开发板和乌班图的编译工具链里面是具有qt的编译工具链的,自己看的是正点原子的视频,所以按照正点正点原子的编译工具进行配置的(具体的配置方法可以看正点原子的视频),设置的不同的项目的QT页面,需要使用的链接库也是不同的,所以新产生的QT项目的显示,需要添加新的库。

注意:添加库的时候,要使用“file”命令查看链接库指向的链接库,两个库都需要拷贝到板子上的“/lib”目录下面,如果只拷贝了原本的库,没有拷贝原本库指向的库,那么运行的时候,还是会报错说找不到这个链接库。

QT编译环境配置,以及开发板移植的问题_第1张图片

注意:拷贝的库要是显示不能识别,就说明库本身编译的平台不是ARM平台,而是X86的平台,重这时候就需要回去配置环境,从新编译,然后从新拷贝。

QT编译环境配置,以及开发板移植的问题_第2张图片

 注意:自己后来编译的正点原子的库和韦东山编译器里面的库是不同的版本,是不能混淆在一起使用的,混在一起就会报错存在不同版本的链接库。

QT编译环境配置,以及开发板移植的问题_第3张图片

 二、QT调试的技巧

        有时候QT调试的时候,报错的信息不全,很多细节的错误都不能显示出来,所以打开QT的错误提示信息是非常重要的,操作如下:

1、打开开发板的配置信息:

vi /etc/profile

2、在上面打开的环境配置文件里面添加下面的环境配置信息,打开QT的详细报错:

export QT_DEBUG_PLUGINS=1

3、然后对开发板重启

reboot

        上面的操作都完成之后,在运行QT程序的时候,就会对错误信息详细的打印出来。

三、触摸屏没有用的问题

        触摸屏没有用,但是接上鼠标之后是可以操作按钮的,这就说明QT的按键输入是没有问题的,但是触摸屏tslab没有启动,这时候就需要对开发板的环境信息进行配置。

        触摸屏没有作用的问题已经解决,最终发现是环境变量的配置的问题,有些环境变量没有进进行配置。

        在上面的问题都解决了之后,发现在lcd上可以显示QT的页面,但是tslab的触摸屏不能使用,如下面代码所示,打开环境信息配置文件,对环境信息做下面的改变。

vi /etc/profile
#qt
export QT_ROOT=/usr/lib/qt
export QT_QPA_GENERIC_PLUGINS=tslib:/dev/input/event1
export QT_QPA_EVDEV_TOUCHSCREEN_PARAMTERS=/dev/input/event1
export QT_QPA_FONTDIR=/usr/share/fonts
export QT_QPA_PLATFORM_PLUGIN_PATH=$QT_ROOT/plugins
export QT_QPA_PLATFORM=linuxfb:tty=/dev/fb0
export QT_PLUGIN_PATH=$QT_ROOT/plugins
export QT_QPA_FB_TSLIB=1
export LD_LIBRARY_PATH=$QT_ROOT/lib:$QT_ROOT/plugins/platforms
export QT_QPA_EGLFS_TSLIB=1
export XDG_RUNTIME_DIR=/usr/lib/a
export RUNLEVEL=3


#tslib
export TSLIB_ROOT=/usr/lib/ts
export TSLIB_CONSOLEDEVICE=none
export TSLIB_FBDEVICE=/dev/fb0
export TSLIB_TSDEVICE=/dev/input/event1 
export TSLIB_CONFFILE=/etc/ts.conf
export TSLIB_PLUGINDIR=/usr/lib/ts
export TSLIB_CALIBFILE=/etc/pointercal
export LD_PRELOAD=/usr/lib/libts.so

下面两两行增加的作用:
        QT_QPA_GENERIC_PLUGINS=evdev:/dev/input/event1
        QT_QPA_EVDEV_TOUCHSCREEN_PARAMETERS=/dev/input/event1
添加了这么两条就能成功,是因为不添加这两行就使用了Qt默认基于libinput插件(这时候会发现鼠标是可以使用的),没有使用到tslib库,添加上面两句之后,就可以使用触摸屏啦啦啦,开森。

四、虚拟机以及镜像系统的安装

(1)虚拟机VMare的安装

就是普通的软件安装,去软件管家找软件就可以。

(2)ubntu镜像系统的安装

下面是国内镜像系统的安装:

转自:ubuntu 16.04 镜像下载

转载备份一下,网友评论说浙大最快。

官方下载地址(不推荐)

Get Ubuntu | Download | Ubuntu

中科大源 

Index of /ubuntu-releases/16.04/

阿里云开源镜像站

ubuntu-releases-16.04安装包下载_开源镜像站-阿里云

兰州大学开源镜像站

Index of /ubuntu-releases/16.04/

北京理工大学开源

http://mirror.bit.edu.cn/ubuntu-releases/16.04/

浙江大学

Index of /ubuntu-releases/16.04/

不知名镜像网站

Index of /releases/xenial

各个版本下载网址:

mirrors.melbourne.co.uk

五、交叉编译工作链

(1)交叉编译工具链各种版本的安装

Linaro Releases

1.arm-none-linux-gnueabi-gcc下载
VeryArm.com is for sale | HugeDomains

        arm-none-linux-gnueabi-gcc是 Codesourcery 公司(目前已经被Mentor收购)基于GCC推出的的ARM交叉编译工具。可用于交叉编译ARM系统中所有环节的代码,包括裸机程序、u-boot、Linux kernel、filesystem和App应用程序。使用时,按照主机平台,可以下载以下任一版本中的一个,结果是一样的。

2.arm-none-linux-gnueabi交叉工具链与arm-linux-gcc 有区别吗?
http://bdbaishitong.blog.163.com/blog/static/201493080201332094320957/

eabi标准的要好些,可能arm-linux-gcc就是arm-none-linux-gnueabi的一个链接

终于,郁闷已久的问题攻破了,用了三种配置交叉编译的方法,最终在开发板上实现成功了,现在想一想,有的时候真的也是运气。

(2)交叉编译工具的安装

1、下载交叉编译的安装包

        例如:arm-linux-4.2.1.tar.gz

2、将文件拷贝到“/opt”和“/usr/local”文件夹下

        将复制到这两个问价夹下的问价解压。

3、对“/etc/profile”文件的环境修改

        添加export PATH = /usr/local/arm-linux-4.2.1.tar.gz/bin

4、使用source指令让环境变量起效

        source  /etc/profile

5、如果上边报错就说明缺少32位库兼容包

        sudo apt-get install lib32ncurses5 lib32z1

六、构建文件系统

        可以参考讯为的课程:制作一个最简单的QT界面_哔哩哔哩_bilibili

里面后见文件系统之后,按照韦东山的烧录方式,需要.img镜像文件才可以,生成镜像文件可以参考文章:(100条消息) 打包开发板根文件系统,并制作成img镜像_歌舞丶升平的博客-CSDN博客        上面这部分自己还没有完全实现,后面在搞。

构建的最小系统的文件作用:

QT编译环境配置,以及开发板移植的问题_第4张图片

        使用“dd”命令的就是可以生成镜像文件。

七、qmake的使用

        “qmake”对QT的项目进行编译,

使用正点的编译的时候,需要source 一下,让qmake环境起作用。

韦东山的也需要,但是还没找到文件的位置。

八、构建内核、设备树

(1) 首先去u-boot官网去下载uboot的源码,链接如下:

Index of /pub/u-boot/ (denx.de)

U-boot 官网:
https://www.denx.de/wiki/U-Boot
源码下载页面:
http://ftp.denx.de/pub/u-boot/
NXP 官方 uboot 源码 Git 地址:
https://source.codeaurora.org/external/imx/uboot-imx
本开发使用的 U-boot 位于 Git 仓库,地址为:
https://e.coding.net/weidongshan/imx-uboot2017.03.git

(2)下载好时候,解压之后,就可以执行下面的命令进行解压:

进入解压好的目录下执行:
make distclean
make mx6ull_14x14_evk_defconfig
make

之后就可以得到:

然后就可以将上面的img镜像文件烧到板子上,但是不能直接使用,需要修改,这部分还不会。 

九、QT的移植

        这部分参考讯为的视频:QT系统移植之在开发板上部署QT运行环境_哔哩哔哩_bilibili

QT的移植包括两部分:QT源码的编译tslib源码的编译

之前的准备环节 :乌班图的安装编译器的安装(这两个前面去已经阐述过)

(1)tslib的下载和编译

        正点的git的地址: https://github.com/kergoth/tslib

         下载好之后,将文件解压到一个文件夹之后,使用万能命令获得Makefile文件。使用万能命令之前可能需要安装下面的软件, 防止编译 tslib 过程中出错
 
sudo apt-get update
sudo apt-get install autoconf automake libtool

对环境变量进行配置(如果已经修改了环境文件,就不需要在进行配置)

平台
export ARCH=arm
交叉编译命令,可以根据自己的进行配置
export CROSS_COMPILE=arm-linux-gnueabihf-
交叉编译命令安装的位置,精确的指令的bin目录下
export PATH=$PATH:/home/book/100ask_imx6ull-sdk/ToolChain/gcc-linaro-6.2.1-2016.11-x
86_64_arm-linux-gnueabihf/bin
首先创建一个 tslib 文件夹,用于存放编译结果,比如文件路径为:
/home/topeet/driver/imx6ull/43touchscreen/tslib
拷贝 tslib 源码压缩包到 /home/topeet/driver/imx6ull/43touchscreen/ 目录下并解压,如下图所示:
cd tslib-1.21/ //进入 tslib 源码目录
如果没有这个目录就创建一个:/opt/tslib.1.4
./configure --host=arm-linux-gnueabihf --prefix=/opt/tslib.1.4
make
如果没有tmp,就自己创建一个
make install DESTDIR=$PWD/tmp
注意, 在使用 ./configure 配置 tslib 的时候
“--host” 参数指定编译器,指定的编译器要和编译文件统使用同一个编译器,否则在开发板下不能正常使用。
“--prefix” 参数指定编译完成以后的 tslib 文件安装 到哪里,这里肯定是安装到我们刚刚创建的“tslib” 目录下。
修改安装路径下的ts.conf文件:
QT编译环境配置,以及开发板移植的问题_第5张图片

 也可以参照韦东山的修改方式。

将编译好的文件拷贝到开发板板山,将产生的lib链接库和include头文件拷贝到自己自己工具链里面。
使用下面命令查看自己交叉编译工具链的位置:
echo 'main(){}'| arm-linux-gnueabihf-gcc -E -v -
        然后将安装路径下tslib 目录下的所有文件拷贝到开发板的opt文件里面。如果直接拷贝的话会出现符号链接文件 不能拷贝的现象, 可以先使用 tar 命令进行打包,然后解压到根文件系统下。

(2)QT的下载与编译

QT源码的下载位置:http://download.qt.io/new_archive/qt/5.7/5.7.1/

        使 用 “ tar -vxf qt-everywhere-opensource-src-5.7.0 ” 命 令 解 压 Qt5.7 源 码 , 并 进 入 解 压 生 成 的 “qt-everywhere-opensource-src-5.7.0 ”目录。
        
        在 qt-everywhere-opensource-src-5.7.0 目录下,打开 qtbase/mkspecs/linux-arm-gnueabi-g++/qmake.conf 文件,并修改为如下所示内容 ,因为一会我们要用到这个里面的内容,所以我们要先修改一下这里面的编译器。修改完成如下:
# 修改了下面中文注释的两处#
qmake configuration for building with arm-linux-gnueabi-g++
#
MAKEFILE_GENERATOR = UNIX
CONFIG += incremental
QMAKE_INCREMENTAL_STYLE = sublib

#添加了下面的几行
QT_QPA_DEFAULT_PLATFORM = linux #eglfs
QMAKE_CFLAGS_RELEASE += -O2 -march=armv7-a
QMAKE_CXXFLAGS_RELEASE += -O2 -march=armv7-a

include(../common/linux.conf)
include(../common/gcc-base-unix.conf)
include(../common/g++-unix.conf)
# modifications to g++.conf

#根据自己的编译工具链修改下面的工具链名字
QMAKE_CC = arm-none-linux-gnueabi-gcc
QMAKE_CXX = arm-none-linux-gnueabi-g++
QMAKE_LINK = arm-none-linux-gnueabi-g++
QMAKE_LINK_SHLIB = arm-none-linux-gnueabi-g++
# modifications to linux.conf
QMAKE_AR = arm-none-linux-gnueabi-ar cqs
QMAKE_OBJCOPY = arm-none-linux-gnueabi-objcopy
QMAKE_NM = arm-none-linux-gnueabi-nm -P
QMAKE_STRIP = arm-none-linux-gnueabi-strip
load(qt_config)
        然后我们需要用 configure 生成下 Makefile ,因为命令比较长,我们一般都是创建一个脚本,然后执行我们这个脚本生成 Makefile 。 使用“vi autoconfigure.sh” 命令,新建 “autoconfigure.sh” 脚本。脚本内容如下所示。
#!/bin/sh
./configure \
-v \                                 #配置期间输出详细的信息
-prefix /opt/qt5.7.0                 #安装的路径
-release \                           #关闭调试版本的QT
-opensource \                        #构建QT的开源系统
-make libs \                         #make是要添加的组件
-xplatform linux-arm-gnueabi-g++ \   #上面产生的qt编译器,在这里指定
-optimized-qmake \                   #在调试版本中构建优化主机的工具
-pch \                               #使用预编译的头文件
-qt-sql-sqlite \                     #下面都是使用qt自带的库,如sql-sqlite
-qt-libjpeg \
-qt-zlib \
-no-opengl \                         #不使用qt自带的库opengl
-skip qt3d \                         #跳过qt3d
-skip qtcanvas3d \
-skip qtpurchasing \
-no-sse2 \                           #不使用这个指令
-no-openssl \
-no-nis \
-no-cups \
-no-glib \
-no-iconv \
-nomake examples \                   #不生成历程的代码
-nomake tools \                      #不生成工具
-skip qtvirtualkeyboard \            #跳过虚拟键盘
-I/opt/tslib1.4/include \            #指定tslib触摸的头文件
-L/opt/tslib1.4/lib                  #指定tslib触摸的库
exit

执行下面的指令进行安装:

./autoconfigure.sh
make
make install

(3)在开发板上部署QT和tslib的环境

        将上面tslib和qt安装路径下的文件全部拷贝到开发板的"/opt"目录下。

        修改根文件系统下的配置文件“/etc/profile”文件添加一下内容:(也可以创建两个脚本文件“.sh”,将这两个脚本文件名字添加到/etc/profile中)

EVENT=$(cat /proc/bus/input/devices | grep -E 'TSC2007|ft5x0x_ts|goodix-ts' -A4 | tail -n1 | awk '{print$NF}')


export TSLIB_ROOT=/opt/tslib1.4
export TSLIB_TSDEVICE=/dev/input/$EVENT
export TSLIB_CONFFILE=/opt/tslib1.4/etc/ts.conf
export TSLIB_CALIBFILE=/etc/pointercal
export TSLIB_PLUGINDIR=/opt/tslib1.4/lib/ts
export TSLIB_CONSOLEDEVICE=none
export QT_ROOT=/opt/qt5.7.0
export QT_QPA_FONTDIR=$QT_ROOT/lib/fonts
export QT_QPA_PLATFORM_PLUGIN_PATH=$QT_ROOT/plugins
export QT_QPA_PLATFORM=linuxfb:fb=/dev/fb0
export LD_LIBRARY_PATH=/lib:/usr/lib:/usr/local/lib:$QT_ROOT/lib:$TSLIB_ROOT/lib/
下面是每行的解释:
自动获取触摸的设备节点,变量 EVENT 的值可能是 event0 event2....... 等。
EVENT=$(cat /proc/bus/input/devices | grep -E 'TSC2007|ft5x0x_ts|goodix-ts' -A4 | tail -n1 | awk '{print$NF}')
触摸库所在的位置
export TSLIB_ROOT=/opt/tslib1.4
触摸屏设备文件
export TSLIB_TSDEVICE=/dev/input/$EVENT
tslib 模块配置文件
export TSLIB_CONFFILE=/opt/tslib1.4/etc/ts.conf
指定触摸屏校准文件 pintercal 的存放位置
export TSLIB_CALIBFILE=/etc/pointercal
设定控制台设备为 none ,否则默认为 /dev/tty ,这样可以避免出现 “ open consoledevice: No such file
or directory KDSETMODE: Bad file descriptor ” 的错误
export TSLIB_CONSOLEDEVICE=none
qt 库所在的路径
export QT_ROOT=/opt/qt5.7.0
qt 字库的目录
export QT_QPA_FONTDIR=$QT_ROOT/lib/fonts
qt 插件的目录
export QT_QPA_PLATFORM_PLUGIN_PATH=$QT_ROOT/plugins
指定帧缓冲设备 /dev/fb0
export QT_QPA_PLATFORM=linuxfb:fb=/dev/fb0
添加 QT 和触摸库的环境变量,根据自己拷贝的文件夹进行设置。
export LD_LIBRARY_PATH= /lib:/usr/lib:/usr/local/lib:$QT_ROOT/lib:$TSLIB_ROOT/lib/

        把视频所在目录下的字库文件拷贝到根文件系统的 qt 库的/lib/fonts 下,没有这个路径手动创建一个路径。(字库我这里还没有,用的时候自己找“wenquanyi.ttf”)

        然后我们回到根文件系统的 lib 目录下,将视频目录下的 libstdc.tar.gz 拷贝到 lib 解压,并输入命令:(libstdc.tar.gz 这里也没有,用的时候自己找)

ln -s libstdc++.so.6.0.19 libstdc++.so.6

到此QT的移植就结束啦啦啦啦啦啦啦啦啦,真jiba繁琐。

你可能感兴趣的:(QT学习,qt,开发语言)