Qt 5.5.0-成功移植到TQ210

转载地址:http://tieba.baidu.com/p/3996410074

一、需要准备的资源下载链接地址:

1、ubuntu-14.04.3-desktop-amd64+mac.iso:
http://cdimage.ubuntu.com/releases/
2、qt-everywhere-opensource-src-5.5.0.tar.gz:
http://mirrors.ustc.edu.cn/qtproject/official_releases/qt/
3、最新交叉编译器下载地址(本人使用的是天嵌提供的编译器:arm-linux-gcc:4.4.6 (for TQ210 EmbedSky Tech)): http://www.veryarm.com/arm-none-linux-gnueabi-gcc
4、Ubuntu-14.04下安装:qt-opensource-linux-x64-android-5.5.0-2.run的下载地址:
http://mirrors.ustc.edu.cn/qtproject/official_releases/qt/
5、安装tslib——下载地址:  http://sourceforge.net/projects/tslib.berlios/files/
声明——参见网友的友情链接地址:移植Qt-5.5.0到ARM Cortex-A8:
http://blog.csdn.net/clannadzy/article/details/46896425
Qt5.5.0编译移植到Linux-Arm-A9: http://www.bubuko.com/infodetail-951000.html
移植qt5.3.1到arm:
http://blog.csdn.net/zhx6044/article/details/38373687

第一个需解决的问题——安装教程编译环境后的问题:交叉编译器的问题(Ubuntu-14.04-64位)
安装天嵌交叉编译环境参见天嵌的手持
root@ubuntu:/work#arm-linux-gcc -v
bash: /opt/EmbedSky/4.4.6/bin/arm-linux-gcc: No such file or directory
解决方法:
root@ubuntu:/work#sudo apt-get install lib32z1

二、配置编译tslib
网上说的tslib1.4其实就是tslib1.0,这个工具比较小,配置一下后直接编译就行了。
root@ubuntu:/work#tar -xvjf tslib-1.0.tar.bz2
root@ubuntu:/work#cd tslib-1.0
root@ubuntu:/work/tslib-1.0#./autogen.sh —可能的问题解决方法:(1)、问题
root@ubuntu:/work/tslib-1.0#./configure --host=arm-linux ac_cv_func_malloc_0_nonnull=yes --prefix=/opt/tslib-1.0
root@ubuntu:/work/tslib-1.0#make——可能会出现的问题解决方法:(2)、问题
root@ubuntu:/work/tslib-1.0#make install
(1)、问题:——编译ts_lib-1.0是出现的问题
./autogen.sh: 4: autoreconf: not found
在不同版本Ubuntu的 tslib 下执行 autogen.sh 产生。它们产生的原因一样,是
因为没有安装automake 工具, (ubuntu 14.04)用下面的命令安装好就可以了。
root@ubuntu:/work/tslib-1.0#sudo apt-get install autoconf automake libtool
(2)、问题:——在make时出错,提示
In function ‘open’,
inlined from ‘main’ at ts_calibrate.c:229:11:
/usr/include/bits/fcntl2.h:51:24: error: call to ‘__open_missing_mode’ declared with attribute error: open with O_CREAT in second argument needs 3 arguments
make[2]: *** [ts_calibrate.o] Error 1
原因:这是因为open函数的语法不符合最新的gcc,
解决方法:在tslib-1.0源码包中tests/ts_calibrate.c中加入open的第三个参数:
#vim tests/ts_calibrate.c
if ((calfile = getenv("TSLIB_CALIBFILE")) != NULL) {
cal_fd = open (calfile, O_CREAT | O_RDWR, 0777);
} else {
cal_fd = open ("/etc/pointercal", O_CREAT | O_RDWR, 0777);
}
——用自己编译安装好的tslib-1.0测试触摸屏:
(1)、修改配置文件ts.conf
修改/opt/tslib-1.0/etc/ts.conf,去掉module_raw input 前面的#号即可,然后把/opt/tslib-1.0里的文件都拷入开发板,比如我放在了/usr/local里。
——拷贝的方法可以参见:三、5、中的工具使用
(2)、配置开发板的环境变量
配置开发板的环境变量,让tslib能正常工作。
修改/etc/profile文件,在添加以下内容:
#vi /etc/profile
export set TSLIB_FBDEVICE=/dev/fb0
export set TSLIB_TSDEVICE=/dev/event3—可能的问题解决方法:(A)、问题
export set TSLIB_CONFFILE=/usr/local/etc/ts.conf
export set TSLIB_CALIBFILE=/etc/pointercal
export set TSLIB_PLUGINDIR=/usr/local/lib/ts
保存退出,运行source命令使之生效
#source /etc/profile
(A)、问题:——不知道使用哪个为准确的event2、event3、event4 ?:
解决方法在板子上:cat etc/profile
见图1:
Qt 5.5.0-成功移植到TQ210_第1张图片


从图一中自己发现的1、2的端倪——真正的解决方式是:
[root @EmbedSky  /]#cat tpm/env
ts=3
Pointer=
我的板子上使用的:export set TSLIB_TSDEVICE=/dev/event3

我最终测试tslib的最终环境变量的配置是:
# Ash profile 
# vim: syntax=sh
# No core files by default
#ulimit -S -c 0 > /dev/null 2>&1
source /tmp/env
export set HOME=/root
export set TSLIB_FBDEVICE=/dev/fb0
export set TSLIB_TSDEVICE=/dev/event3
export set TSLIB_CONFFILE=/usr/local/etc/ts.conf
export set TSLIB_CALIBFILE=/etc/pointercal
export set TSLIB_PLUGINDIR=/usr/local/lib/ts
export PATH=$QTDIR/bin:$PATH
USER="`id -un`"
LOGNAME=$USER
PS1='[\u@\h \W]# '
PATH=$PATH
HOSTNAME=`/bin/hostname`
export USER LOGNAME PS1 PATH
(3)、运行检测
/usr/local/bin中的ts_calibrate进行校准,成功的话会出现界面,并让你点击十字符号,完成后会生成/etc/pointercal文件,这是触摸屏的校准配置文件。如图2、3所示
[root@EmbedSky /]#./usr/local/bin/ts_calibrate
图2:
Qt 5.5.0-成功移植到TQ210_第2张图片

[root@EmbedSky /]#./usr/local/bin/ts_test
图3:
Qt 5.5.0-成功移植到TQ210_第3张图片


三、交叉编译配置ARM版本的Qt 5.5.0库过程、与问题的解决
1、解压Qt 5.5.0,和修改qmake.config文件
root@ubuntu:/work#tar -zxvf qt-everywhere-opensource-src-5.5.0.tar.gz
修改:qmake.config文件
root@ubuntu:/work/qt-everywhere-opensource-src-5.5.0#gedit 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 = linuxfb 
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-embedsky-linux-gnueabi-gcc
QMAKE_CXX = arm-embedsky-linux-gnueabi-g++
QMAKE_LINK = arm-embedsky-linux-gnueabi-g++
QMAKE_LINK_SHLIB = arm-embedsky-linux-gnueabi-g++

# modifications to linux.conf
QMAKE_AR = arm-embedsky-linux-gnueabi-ar cqs
QMAKE_OBJCOPY = arm-embedsky-linux-gnueabi-objcopy
QMAKE_NM = arm-embedsky-linux-gnueabi-nm -P
QMAKE_STRIP = arm-embedsky-linux-gnueabi-strip
load(qt_config)

2、修改:qt.pro文件
root@ubuntu:/work/qt-everywhere-opensource-src-5.5.0# gedit qt.pro 
结果:去屏蔽掉下面两行
#addModule(qt3d, qtdeclarative qtimageformats)
#addModule(qtcanvas3d, qtdeclarative)
原因:
qt3d和qtcanvas3d在编译的时候会报错,说是未识别模块,而且嵌入式的没有opengl,识别了也会报错,导致编译失败,而且编译配置参数里面也没有这两个模块的配置。方法是在配置时参数加-no-opengl,然后打开qt-everywhere-opensource-src-5.5.0/qt.pro文件,找到:
addModule(qt3d, qtdeclarative qtimageformats)
addModule(qtcanvas3d, qtdeclarative)
这两行注释掉(#号注释),或者直接删掉。如果不注释掉,即使加了-no-opengl也会报错,编译失败。

3、配置工程:执行./configure文件
root@ubuntu:/work/qt-everywhere-opensource-src-5.5.0#./configure -release -opensource -confirm-license -plugin-sql-sqlite -no-opengl -no-dbus -no-c++11 -no-tslib -qt-libjpeg -qt-libpng -qt-zlib -xplatform linux-arm-gnueabi-g++ -no-openssl -alsa -no-iconv -prefix /opt/Qt-5.5.0-arm/

4、编译安装:make && make install
root@ubuntu:/work/qt-everywhere-opensource-src-5.5.0#make && make install
大约两个多小时时间
我的编译安装目录是:(./configure 时:-prefix /后面的目录) /opt/Qt-5.5.0-arm/
然后将/opt/Qt-5.5.0-arm/文件夹下的lib,plugin和include拷贝到你想放置的地方,我放置在TQ210板子的opt/目录下。

5 、Ubuntu和Windows之间的文件拷贝方法
(1)、使用工具使用SCP登录Ubuntu 14.04拒绝访问的话
解决方法:sudo apt-get install openssh-server
可以使用工具是:winscp570setup.exe
——使用这个工具的SCP可以直接登录Ubuntu方便文件拷贝:拷贝文件是先将要拷贝的文件夹使用:chmod 777 /work/tslib 1.0 -R 设置最高权限
(2)、使用Samba实现文件共享也是很好的方法

6、配置自己编译的最新Qt 5.5.0环境变量的结果是:
# Ash profile 
# vim: syntax=sh
# No core files by default
#ulimit -S -c 0 > /dev/null 2>&1
source /tmp/env
export set HOME=/root
export set TSLIB_FBDEVICE=/dev/fb0
export set TSLIB_TSDEVICE=/dev/event3
export set TSLIB_CONFFILE=/usr/local/etc/ts.conf
export set TSLIB_CALIBFILE=/etc/pointercal
export set TSLIB_PLUGINDIR=/usr/local/lib/ts

export set QTDIR=/opt/Qt-5.5.0-arm
export set QPEDIR=/opt/Qt-5.5.0-arm
export set TSLIB_ROOT=/usr
export set LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$TSLIB_ROOT/lib
export set QWS_MOUSE_PROTO=tslib:/dev/touchscreen
export set LD_LIBRARY_PATH=/lib:/usr/lib:/usr/local/lib:$QTDIR/lib:$LD_LIBARAY_PATH
#export set QT_QPA_PLATFORM_PLUGIN_PATH=$QTDIR/plugins
export set QT_QPA_PLATFORM=linuxfb:tty=/dev/fb0
export set QT_QPA_FONTDIR=$QTDIR/lib/fonts
#export set QT_QPA_GENERIC_PLUGINS=tslib ——可能的问题:(1)、问题
export set QT_QPA_GENERIC_PLUGINS=evdevtouch:/dev/event3 —同tslib:event3
export PATH=$QTDIR/bin:$PATH
USER="`id -un`"
LOGNAME=$USER
PS1='[\u@\h \W]# '
PATH=$PATH
HOSTNAME=`/bin/hostname`
export USER LOGNAME PS1 PATH
(1)、问题
-no-tslib,表示不把tslib作为input库,此时触摸屏默认以evdev作为input库,所以移植完过后在开发板的/etc/profile文件中添加:
export QT_QPA_GENERIC_PLUGINS=evdevtouch:/dev/event0
如果还用tslib,那么就该写成:
export QT_QPA_GENERIC_PLUGINS=tslib:/dev/event0

四、Ubuntu 14.04下安装Linux版的:qt-opensource-linux-x64-android-5.5.0-2.run
1、问题:—Ubuntu 10.04-64位下安装
root@ubuntu:/work# ./qt-opensource-linux-x64-android-5.5.0-2.run 
./qt-opensource-linux-x64-android-5.5.0-2.run: error while loading shared libraries: libX11-xcb.so.1: cannot open shared object file: No such file or directory
解决方法是:
root@ubuntu:/work#sudo apt-get install "^libxcb.*" libx11-xcb-dev libglu1-mesa-dev libxrender-dev
安装完成后:
root@ubuntu:/work# ./qt-opensource-linux-x64-android-5.5.0-2.run 
即可进行安装Qt 5.5.0的安装向导了

2、交叉编译器的问题(Ubuntu-14.04-64位)
声明——参见链接: http://blog.csdn.net/sno_guo/article/details/17059381
root@ubuntu:/work# arm-linux-gcc -v
bash: /opt/EmbedSky/4.4.6/bin/arm-linux-gcc: No such file or directory
解决方法:sudo apt-get install lib32z1

3、Ubuntu-14.04-64位:安装opengl支持(mesa3d),
root@ubuntu:/work#sudo apt-get install mesa-common-dev 

4、(解决)Qt5 Ubuntu找不到-lGL之下
使用Ubuntu 14.04中使用Qt 5.5.0编译时出现:/usr/bin/ld: cannot find -lGL 
友情解决方法链接: http://forum.qt.io/topic/23310/solved-qt5-under-ubuntu-cannot-find-lgl/3
root@ubuntu:/work#sudo apt-get install libglu1-mesa-dev

5、在Ubuntu 14.04下使用Qt Creator 交叉编译测试TQ210上跑Qt 应用程序
如图4、5、6、7、8、9、10、11所示
图4:
Qt 5.5.0-成功移植到TQ210_第4张图片

图5:
Qt 5.5.0-成功移植到TQ210_第5张图片

图6:
Qt 5.5.0-成功移植到TQ210_第6张图片

图7:
Qt 5.5.0-成功移植到TQ210_第7张图片

图8:
Qt 5.5.0-成功移植到TQ210_第8张图片

图9:
Qt 5.5.0-成功移植到TQ210_第9张图片

图10:
Qt 5.5.0-成功移植到TQ210_第10张图片

图11:
Qt 5.5.0-成功移植到TQ210_第11张图片

(1)、可能出现的问题是TQ210板子上中文字体显示不出来的问题:接下面友情链接
声明——参见网友的友情链接地址:
Qt5.3.0的安装与测试(交叉编译,用于arm,支持tslib触摸屏)
http://blog.csdn.net/woshidahuaidan2011/article/details/43604059

6、问题:Ubuntu 14.04中Qt Creator交叉编译ARM程序的时候: arm-embedsky-linux-gnueabi-g++: Command not found
解决方式:
root@ubuntu:/# gedit /etc/environment
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/opt/EmbedSky/4.4.6/bin:/opt/EmbedSky/4.4.6/arm-embedsky-linux-gnueabi/bin"
然后重启系统即可编译ARM版本的软件

五、天嵌的内核问题无法使用触摸屏的解决方法:
(1)、问题:安装了Linux系统后出现无法校准触摸屏;并且退出后也无法使用触摸屏
天嵌官问题链接集合:
http://www.armbbs.net/forum.php?mod=viewthread&tid=19021&extra=page%3D1
Q:2014年3月24号的E8 linux内核不支持电容触摸屏?
A:请查看附件 ,将该附件解压之后会有2个文件——ft5x06_ts.module和zImage.bin;其中zImage.bin是测试镜像,ft5x06_ts.module放到内核源码目录下的/drivers/input/touchscreen目录下(把之前的替换掉),然后把/drivers/input/touchscreen/built-in.o删掉,重新编译一下系统就可以了。

你可能感兴趣的:(ARM/S5PV210)