编译环境的配置,这个是真个系统构建的时候配置的问题,比较麻烦,后面在补这部分的知识。
韦东山的开发板和乌班图的编译工具链里面是具有qt的编译工具链的,自己看的是正点原子的视频,所以按照正点正点原子的编译工具进行配置的(具体的配置方法可以看正点原子的视频),设置的不同的项目的QT页面,需要使用的链接库也是不同的,所以新产生的QT项目的显示,需要添加新的库。
注意:添加库的时候,要使用“file”命令查看链接库指向的链接库,两个库都需要拷贝到板子上的“/lib”目录下面,如果只拷贝了原本的库,没有拷贝原本库指向的库,那么运行的时候,还是会报错说找不到这个链接库。
注意:拷贝的库要是显示不能识别,就说明库本身编译的平台不是ARM平台,而是X86的平台,重这时候就需要回去配置环境,从新编译,然后从新拷贝。
注意:自己后来编译的正点原子的库和韦东山编译器里面的库是不同的版本,是不能混淆在一起使用的,混在一起就会报错存在不同版本的链接库。
有时候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库,添加上面两句之后,就可以使用触摸屏啦啦啦,开森。
就是普通的软件安装,去软件管家找软件就可以。
下面是国内镜像系统的安装:
转自: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.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的一个链接
终于,郁闷已久的问题攻破了,用了三种配置交叉编译的方法,最终在开发板上实现成功了,现在想一想,有的时候真的也是运气。
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博客 上面这部分自己还没有完全实现,后面在搞。
构建的最小系统的文件作用:
使用“dd”命令的就是可以生成镜像文件。
“qmake”对QT的项目进行编译,
使用正点的编译的时候,需要source 一下,让qmake环境起作用。
韦东山的也需要,但是还没找到文件的位置。
Index of /pub/u-boot/ (denx.de)
make distclean
make mx6ull_14x14_evk_defconfig
make
之后就可以得到:
然后就可以将上面的img镜像文件烧到板子上,但是不能直接使用,需要修改,这部分还不会。
这部分参考讯为的视频:QT系统移植之在开发板上部署QT运行环境_哔哩哔哩_bilibili
QT的移植包括两部分:QT源码的编译、tslib源码的编译
之前的准备环节 :乌班图的安装,编译器的安装(这两个前面去已经阐述过)
正点的git的地址: https://github.com/kergoth/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
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
也可以参照韦东山的修改方式。
echo 'main(){}'| arm-linux-gnueabihf-gcc -E -v -
QT源码的下载位置:http://download.qt.io/new_archive/qt/5.7/5.7.1/
# 修改了下面中文注释的两处#
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)
#!/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
将上面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=$(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_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/
把视频所在目录下的字库文件拷贝到根文件系统的 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繁琐。