【转】Qt5.2.1移植新唐n32905测试 转的一位朋友的过程,基本能够通过。

转自:http://david4383.blog.163.com/blog/static/3366036201410525751369/

 

目录

 

个人测试,不保证移植全部正确

 

一:Qt在开发板运行测试

二:Qt 简介

三:Qt开发环境与跨平台

四:Qt5.2.1移植,主机开发环境安装

五:Qt5.2.1移植,交叉编译环境安装

六:QtCreator交叉编译版本配置

 

 

七:触摸屏tslib移植

八:新唐开发板移植

 

 

一:Qt在开发板运行测试

1.新唐N32905U1DN开发板启动状态

 【转】Qt5.2.1移植新唐n32905测试 转的一位朋友的过程,基本能够通过。_第1张图片

 

2 Qt5.2.1交叉编译后测试程序运行图

【转】Qt5.2.1移植新唐n32905测试 转的一位朋友的过程,基本能够通过。_第2张图片

 

4 Qt5.2.1运行时开发板系统状态

【转】Qt5.2.1移植新唐n32905测试 转的一位朋友的过程,基本能够通过。_第3张图片

 

 

二:Qt 简介

 

Qt是1991年奇趣科技开发的一个跨平台C++图形用户界面应用程序框架,2008年,奇趣科技被诺基亚公司收购,QT也因此成为诺基亚旗下的编程语言工具。2012年,Qt被Digia收购,2013年12月11日,Digia公司Qt开发团队宣布Qt 5.2正式版发布。

 

1首先Qt显著的特点之一:是一款基于c++的图形界面库。同样著名的还有基于c语言的 GTK图形界面库,Wxwigets以及windowsMFC等等。

2其次Qt具有跨平台的能力,它在个人电脑,嵌入式系统上运行,也在不同操作系统,windows ,linux ,solaris ,mac,wince ,vxwork上运行,其跨平台实现方式属于一次编写多处编译(多处运行),但不同平台要重新编译,以将平台无关的东西转换为平台相关的东西

3目前 Digia已经发布Qt 5.2,支持AndroidiOS平台,提供Windows RT功能预览,并推出了新的Qt移动工具包。

 

Qt Library与Qt Creator    一般所说的qt工具包含这两者:

 

Qt Creator Qt Nokia收购后推出的一款新的轻量级集成开发环境IDE)它包含

 

高级 C++代码编辑器,

项目和生成管理工具
集成的上下文相关的帮助系统
图形化调试器
代码管理和浏览工具等

 

Qt Library是一个库,包含编译器,各种链接库

Qt开发可以没有Qt Creator,但Qt Library是必不可少。Qt Creator作为Qt配套的集成开发环境供开发人员使用,但在一些平台也可以用visual studioEclipse等替代。

 

除了Qt Library与Qt Creator    两种包外,也还有Qt SDK安装包形式

安装qt Library库需要下载后进行配置编译等等过程。而SDK下载后安装,环境就自动搭建好了,也就是傻瓜式安装包。SDK其中包括最新完整的 Qt库, Qt Creator以及 Qt Designer等开发工具,目前也有几个平台提供了 Qt SDK。(但SDK通常未包含交叉编译工具,需再安装)

下载页面:http://qt-project.org/downloads

 

三:Qt开发环境与跨平台

目前由Qt所开发的软件产品中,有运行在windows之上,也有的运行在ubuntu等系统之上,甚至是嵌入式之上,实现了不同操作系统和平台的跨越。

qt的跨平台实现:主要原理是在不同平台上实现了具有相同函数接口的lib库,使同一套qt代码在不同平台编译后,将平台无关的东西转化为本地平台相关的东西,使编译出的程序能够在本地平台上运行。与javac#不同,qt这种方式属于一次编写多处编译。

Qt Library与跨平台

使用qt开发软件,要使同一套代码在不同平台上编译后能够在各平台正确运行,需要配置好qt开发编译环境使之与本地平台运行环境相符合。为此Qt官方网站提供了支持不同平台的Qt Library源码包,所以qt开发环境搭建一般需要下载与本地平台相关的Qt Library进行配置与编译,或者傻瓜式安装包。

 

 

【转】Qt5.2.1移植新唐n32905测试 转的一位朋友的过程,基本能够通过。_第4张图片

 

Qt版本划分:
Win32版,适用于Windows平台;
X11
版,适合于使用了x系统的各种 linux unix的平台;
Mac
版,适合于苹果MacOS
embedded
版,适合于具有帧缓冲(frame buffer)的linux的平台。

·         Qt泛指Qt的所有桌面版本,例如X11for Linux/X11 (230 MB) (Info)适用于linux内核的ubuntu等桌面系统等。

·         Qt/EQt的嵌入式版本,例如embedded版for embedded Linux (230 MB) (Info),适用于linux嵌入式。由于嵌入式受限的硬件环境往往难以运行庞大的X服务器,Qt/E去掉了X Lib的依赖而直接工作于Frame Buffer上,因而效率更高。

·         Qtopia一般命名为qtopia-opensource,最初是sourceforge.net上的一个开源项目,全称是Qt Palmtop Environment,是构建于Qt/E之上一个类似桌面系统的应用环境,包括了PDA和手机等掌上系统常见的功能如电话簿、日程表等。现在Qtopia已经成为了Trolltech的又一个主打产品,为基于Linux操作系统的PDA和手机提供了一个完整的图形环境。

区别:Qt/E是嵌入式版基础类库,Qtopia是构建于Qt/E之上的一系列高级应用。相对于Qt桌面X11版,Qt/E不是通过X11绘画,而是直接到framebuffer或别的

QT4版本前要安装Qtopia需要先装Qt/E,但之后的就不需要了,4之后的Qtopia已经带有QT/E库了。自从奇趣公司被Nokia收购,Qtopia已经逐渐停止了所有开发,因此qtopia-opensource-4.3.3是一个终结版。而QT/E的改名过程,Qte-->Qtopia Core-->Qt-embedded-linux-xxxx例如现在embeddedfor embedded Linux (230 MB) (Info)

所以在以往QT总体归纳三种:面向桌面的x11、面向嵌入式的Qt/E、以及面向嵌入式带各种应用程序的Qtopia桌面系统

 

Qt5新版

1.qt-everywhere-source

qt-everywhere-sourceQt目前源码包的新改版,它用一套版本源代码统一了以前X11,Qt/E等分支版本,以往Qt不同平台环境搭建需要下载不同源码包编译。而用qt-everywhere-source只要configure时设置好了对应的平台以及交叉编译工具链就可以编译出各个平台上的Qt

例如Qt4.8.5

选择 Qt libraries 4.8.5 for Linux/X11 (230 MB) (Info

或者 Qt libraries 4.8.5 for embedded Linux (230 MB) (Info

都会得到qt-everywhere-opensource-src-4.8.5.tar.gz,资源包

只需对qt-everywhere-opensource-src-4.8.5.tar.gz进行不同的配置就可以编译出X11桌面版和嵌入式版本

参照

http://qt-project.org/wiki/Category:HowTo::Qt_Embedded

Building_Qt_for_Embedded_Linux文章

http://qt-project.org/wiki/Qt_for_Embedded_Linux

http://wuyuans.com/2012/11/qt4-8-3-transplant/

 

2.qt-opensource- .run

         qt-opensource-linux-x86-5.2.1.run linux平台下Qt5桌面版pc机安装包,包括最新完整的 Qt库, Qt Creator以及 Qt Designer等开发工具

 

 

 

四: Qt5.2.1移植,主机开发环境安装

Ubuntu12.04系统下,Qt5.2. 1一键安装包

 

方法1使用qt-opensource-linux-x86-5.2.1.run直接安装(包含qtcreator)

下载安装包,增加执行权限 chmod u+x qt-opensource-linux-x86-5.2.1.run 执行安装

         Sudo  ./ qt-opensource-linux-x86-5.2.1.run

安装g++:

sudo apt-get update

sudo apt-get install build-essential

 

 

方法2 使用Qt5.2.1源码包编译及安装(无qtcreator)

只建议用方法1安装,方法2麻烦易出错

 

参考:http://qt-project.org/doc/qt-5/build-sources.html

 

 

五:Qt5.2.1移植,交叉编译环境安装

Ubuntu12.04 32bit

1.下载qt-everywhere-opensource-src-5.2.1.tar.gz源码包

  下载arm-linux-gcc-4.4.3.tar.gz包,(arm板编译工具)

 

配置编译Qt源码包之前需预先安装,

g++openglxcb

 

2.在线升级安装

sudo apt-get update

g++:sudo apt-get install build-essential

xcbsudo apt-get install libxcb1 libxcb1-dev libx11-xcb1 libx11-xcb-dev libxcb-keysyms1 libxcb-keysyms1-dev libxcb-image0 libxcb-image0-dev libxcb-shm0 libxcb-shm0-dev libxcb-icccm4 libxcb-icccm4-dev libxcb-sync0 libxcb-sync0-dev libxcb-xfixes0-dev libxrender-dev libxcb-shape0-dev libxcb-randr0-dev libxcb-render-util0 libxcb-render-util0-dev libxcb-glx0-dev(可察看README中 Linux: On systems running X11, the XCB libraries are required for the platform plugin to build. qtbase/src/plugins/platforms/xcb)

opengl:sudo apt-get install mesa-common-dev libgl1-mesa-dev libglu1-mesa-dev freeglut3-dev

dbussudo apt-get install dbus-*dev

 

:

3.安装arm编译工具arm-linux-gcc:

arm-linux-gcc-4.4.3.tar.gz

 

解压sudo tar -xvzf arm-linux-gcc-4.4.3.tar.gz –C /解压后得到/opt/FriendlyARM /目录

添加环境 :将arm-linux-gcc工具链加入环境路径中:

 打开sudo gedit  /etc/bash.bashrc,在最后一行加入

export PATH=”$PATH:/opt/FriendlyARM/toolschain/4.4.3/bin”保存

使环境变量生效: source /etc/bash.bashrc

检查环境变量是否生效 :echo $PATH

检查arm-linux-gcc是否生效: arm-linux-gcc –v

在ubuntu 64位系统需提前安装32位库,否则arm-linux-gcc –v会失败,sudo apt-get install ia32-libs,

出现错误可以检查执行文件位是否为32-bit

file /opt/FriendlyARM/toolschain/4.4.3/arm-none-linux-gnueabi/bin/gcc

然后检查系统是否也为32位:file /bin/ls

 

 

4. Qt源码包交叉编译(示例)

 

         ——Qt5.0.2以后采用了QPA插件跨平台,也就是说在新版本中qws已经无效,取消了embedded,而是用-xplatform指定目标板配置,以下采用版本5的新方法和QPA进行编译

 

进入目录:

解压tar -xvzf qt-everywhere-opensource-src-5.2.1.tar.gz

改名mv qt-everywhere-opensource-src-5.2.1 qt-5.2.1-arm

cd qt-5.2.1-arm

 cd ./qtbase/mkspecs

说明:Qt5源码包进行编译所依赖的配置文件在mkspec目录中,本例 configure 交叉编译选项便指定为 –xplatform linux-arm-test

 

创建新配置目录

以一个linux-arm-test配置目录为例,将mkspecs目录下的linux-arm-gnueabi-g++复制为linux-arm-test

cp linux-arm-gnueabi-g++ linux-arm-test –r

修改linux-arm-test配置

cd linux-arm-test

查看ls /opt/FriendlyARM/toolschain/4.4.3/bin查看目录下实际编译工具链名

将linux-arm-test目录下qmake.config中的arm-linux-gnueabi-开头都更改为实际路径加工具链名:PATH+arm-none-linux-gnueabi- 

如QMAKE_CC  = /opt/FriendlyARM/toolschain/4.4.3/bin/arm-none-linux-gnueabi-gcc

再加入三行:

QT_QPA_DEFAULT_PLATFORM = linuxfb      #qpa图形插件,

QMAKE_CFLAGS_RELEASE   += -O2 -march=armv5te

QMAKE_CXXFLAGS_RELEASE += -O2 -march=armv5te

 

说明1:QT_QPA_DEFAULT_PLATFORM选项是指定图形插件, Qt5将各平台底层抽象为一个 qpa 插件,通常在mac上是cocoa, 在window上是windows, 在linux X11下是xcb, 如果有OPENGL支持, 那么选eglfs。而对于无硬件加速的设备,则选择linuxfb,。    minimal仅仅是让程序跑通, 不起任何作用

说明2:目标板为新唐N32905U1DN,cpu为arm936ejs,执行arm-linux-gcc –target-help 查看交叉编译器所支持的架构,选择了其中比较接近的一个为armv5te

 

修改qmake.conf文件:

#

# qmake configuration for building with arm-linux-gnueabi-g++

#

 

MAKEFILE_GENERATOR      = UNIX

CONFIG                          += incremental gdb_dwarf_index

QMAKE_INCREMENTAL_STYLE = sublib

 

QT_QPA_DEFAULT_PLATFORM = linuxfb

QMAKE_CFLAGS_RELEASE   += -O2 -march=armv5te

QMAKE_CXXFLAGS_RELEASE += -O2 -march=armv5te

 

 

include(../common/linux.conf)

include(../common/gcc-base-unix.conf)

include(../common/g++-unix.conf)

 

# modifications to g++.conf

QMAKE_CC             = /opt/FriendlyARM/toolschain/4.4.3/bin/arm-none-linux-gnueabi-gcc

QMAKE_CXX            = /opt/FriendlyARM/toolschain/4.4.3/bin/arm-none-linux-gnueabi-g++

QMAKE_LINK           = /opt/FriendlyARM/toolschain/4.4.3/bin/arm-none-linux-gnueabi-g++

QMAKE_LINK_SHLIB    = /opt/FriendlyARM/toolschain/4.4.3/bin/arm-none-linux-gnueabi-g++

 

# modifications to linux.conf

QMAKE_AR         = /opt/FriendlyARM/toolschain/4.4.3/bin/arm-none-linux-gnueabi-ar cqs

QMAKE_OBJCOPY   = /opt/FriendlyARM/toolschain/4.4.3/bin/arm-none-linux-gnueabi-objcopy

QMAKE_NM       = /opt/FriendlyARM/toolschain/4.4.3/bin/arm-none-linux-gnueabi-nm -P

QMAKE_STRIP    = /opt/FriendlyARM/toolschain/4.4.3/bin/arm-none-linux-gnueabi-strip

load(qt_config)

 

 

保存qmake

进入qt-5.2.1-arm目录下

         configure配置: 在qt-5.2.1-arm目录下执行 sudo ./configure -prefix $PWD/qtbase -release -opensource -xplatform linux-arm-qt -nomake tests -no-largefile -qt-zlib -no-nis -qt-libpng -qt-libjpeg -qt-freetype

(取消配置为 make confclean,make clean,)

 

配置完成后打印信息为:

Running configuration tests...

Warning: Disabling pkg-config since PKG_CONFIG_LIBDIR is not set.

Warning: Disabling pkg-config since PKG_CONFIG_SYSROOT_DIR is not set.

 

  Configure summary

 

Building on:  linux-g++ (i386, CPU features:)

Building for: linux-arm-qt (arm, CPU features:)

Platform notes:

 

           - Also available for Linux: linux-kcc linux-icc linux-cxx

       

Build options:

 Configuration .......... accessibility audio-backend c++11 clock-gettime clock-monotonic compile_examples concurrent cross_compile evdev eventfd freetype full-config getaddrinfo getifaddrs iconv inotify ipv6ifname large-config linuxfb medium-config minimal-config mremap no-harfbuzz no-pkg-config pcre png posix_fallocate precompile_header qpa qpa reduce_exports reduce_relocations release rpath shared small-config zlib

 Build parts ............ libs examples

 Mode ................... release

 Using C++11 ............ yes

 Using PCH .............. yes

 Target compiler supports:

   iWMMXt/Neon .......... no/no

 

Qt modules and options:

 Qt D-Bus ............... no

 Qt Concurrent .......... yes

 Qt GUI ................. yes

 Qt Widgets ............. yes

 JavaScriptCore JIT ..... yes (To be decided by JavaScriptCore)

 QML debugging .......... yes

 Use system proxies ..... no

 

Support enabled for:

 Accessibility .......... yes

 ALSA ................... no

 CUPS ................... no

 FontConfig ............. no

 FreeType ............... qt

 Iconv .................. yes

 ICU .................... no

 Image formats:

   GIF .................. yes (plugin, using bundled copy)

   JPEG ................. yes (plugin, using bundled copy)

   PNG .................. yes (in QtGui, using bundled copy)

 Glib ................... no

 GTK theme .............. no

 Large File ............. no

 mtdev .................. no

 Networking:

   getaddrinfo .......... yes

   getifaddrs ........... yes

   IPv6 ifname .......... yes

   OpenSSL .............. no

 NIS .................... no

 OpenGL ................. no

 OpenVG ................. no

 PCRE ................... yes (bundled copy)

 pkg-config ............. no

 PulseAudio ............. no

 QPA backends:

   DirectFB ............. no

   EGLFS ................ no

   KMS .................. no

   LinuxFB .............. yes

   XCB .................. no

 Session management ..... yes

 SQL drivers:

   DB2 .................. no

   InterBase ............ no

   MySQL ................ no

   OCI .................. no

   ODBC ................. no

   PostgreSQL ........... no

   SQLite 2 ............. no

   SQLite ............... yes (plugin, using bundled copy)

   TDS .................. no

 udev ................... no

 xkbcommon .............. no

 zlib ................... yes (bundled copy)

 

NOTE: Qt is using double for qreal on this system. This is binary incompatible against Qt 5.1.

Configure with '-qreal float' to create a build that is binary compatible with 5.1.

Info: creating cache file /home/kvl/Qt521-arm/qtbase/.qmake.cache

 

Qt is now configured for building. Just run 'make'.

Once everything is built, you must run 'make install'.

Qt will be installed into /home/kvl/Qt521-arm/qtbase/qtbase

 

Prior to reconfiguration, make sure you remove any leftovers from

the previous build.

 

编译基本模块:在qt-5.2.1-arm目录下执行sudo make

【转】Qt5.2.1移植新唐n32905测试 转的一位朋友的过程,基本能够通过。_第5张图片

qt5.2.1make后有Unknown module(s) in QT:quick错误,需要opengl支持,部分扩展功能会无法使用,但不支持opengl的嵌入式板上编译了opengl也可使用linuxfb插件运行,只是qml这些功能不会正常执行。

 

david4383注:configure中加入-nomak examples则不会出现上述错误。


检查:cd qt-5.2.1-arm/qtbase/bin   ./qmake –v

输出信息:Using Qt version 5.2.1 in qt-5.2.1-arm/qtbase/lib

检查:在qt-5.2.1-arm/qtbase/lib目录下执行 file  libQtGui.so.5.2.1 输出中有ARM关键字

 

 

编译其他模块(可选):

以此图为说明:Qt5的各功能模块保持一定独立,以目录形式分布在源码目录中,configure配置编译的只是qtbase基础部分,make后会生成bin/qmake执行文件和lib中的动态库,如果需使用图中所示蓝色名字的其他模块功能,可按实际需求在各个目录下分别编译各模块动态库

/opt/Qt521-arm/bin/qmake,可以生成Makefile文件,然后make编译,make install安装到lib目录下

【转】Qt5.2.1移植新唐n32905测试 转的一位朋友的过程,基本能够通过。_第6张图片

 

细节:webkit依赖于ICU(Unicode支持,软件国际化),假如需要编译webkit功能,在configure配置时必须使ICU被成功编译。而quickqmlopengl有关,支持此模块也必须使opengl es2被成功编译,但即便成功编译,如果开发板不支持opengl es2图形硬件加速,也无法正常执行。要构建qt3D还需要先配置两个模块qtjsbackend(has v8),qtdeclarative

 

参考Qt5 on ARM platforms – Introduction

http://www.gpupowered.org/node/8

 

configure部分选项解释

Qt Configure Options:   http://qt-project.org/doc/qt-5/configure-options.html

1.      Opengl图形程序接口

2.      opengl es OpenGL三维图形 API的子集,针对手机、PDA和游戏主机等嵌入式设备而设计

3.      dbus: (进程间通信机制)

4.      ALSA高级(Linux声音架构)

5.      FontConfig提供系统范围内字体设置

6.      FreeType字体引擎

7.      Iconv多种国际编码格式之间进行文本内码的转换

8.      ICU   (Unicode支持,软件国际化) QtWebkit requires ICU support to be present

9.      cups: sudo apt-get install cups foomatic-db system-config-printer (unix打印服务)

10.   mtdev触摸屏多点触摸协议

11.   openssl 网络通信提供安全及数据完整性的一种安全协议,加密

12.   XCB libxcb provides an interface to the X Window System protocol, slated toreplace the current Xlib interface

13.   LinuxFB Framebuffer[1]是用一个视频输出设备从包含完整的帧数据的一个内存缓冲区中来驱动一个视频显示设备

 

 

其他:

QMAKE文档:https://qt-project.org/doc/qt-5/qmake-variable-reference.html#qmake-libs-opengl-es1-qmake-libs-opengl-es2

    Configure配置参考:

    http://qt-project.org/doc/qt-5/configure-options.html

 

六: QtCreator交叉编译版本配置

 

1.下载qt-creator-opensource-linux-x86_32.3.0.1.run安装包(32位ubuntu系统)

chmod u+x qt-creator-opensource-linux-x86_32.3.0.1.run 执行安装(qtcreator每个平台都有支持的版本下载,实际开发中为方便而直接安装了qt-opensource-linux-x86-5.2.1.run此步骤可省略

如果运行qtcreator出现写错误,修改目录.config权限,sudo chmod 777 /home/uname/.config –R

 

2.使用QtCreator配置多版本编译环境

以例1为例:添加交叉编译版本

         在qtcreator中选择Tools/Option 在Build&Run中的Qt Version使用Add添加一个新版本,命名为Qt521-arm。添加交叉编译源码包qt-everywhere-opensource-src-5.2.1.tar.gz后的qmake执行文件/opt/qt521-arm/qtbase/bin/qmake

【转】Qt5.2.1移植新唐n32905测试 转的一位朋友的过程,基本能够通过。_第7张图片

【转】Qt5.2.1移植新唐n32905测试 转的一位朋友的过程,基本能够通过。_第8张图片

选择Kits,Add新建qt编译版本,将之前的交叉编译所需的Qt Version和Compile添加进来

【转】Qt5.2.1移植新唐n32905测试 转的一位朋友的过程,基本能够通过。_第9张图片

将/opt/qt521-arm/qtbase/bin目录中的qt.conf改为prefix=/opt/qt521-arm/qtbase/,这样qtcreator运行qmake时就能找到此目录下的mkspec进行配置。

新建简单工程选择Qt-arm版本进行build编译测试

【转】Qt5.2.1移植新唐n32905测试 转的一位朋友的过程,基本能够通过。_第10张图片

arm环境下编译出现下面警告note: the mangling of 'va_list' has changed in GCC 4.4 ,不是错误,网上解决方法在makefile里面加上这个编译选项:-Wno-psabi

 

创建qtcreator桌面图标示例:

执行以下命令创建一个App快捷方式:
sudo gedit /usr/share/applications/qtcreator.desktop

gedit中输入以下代码:

[Desktop Entry]

Name= QtCreator Platform

Comment= QtCreator IDE

Exec=/opt/Qt5.2.1/Tools/QtCreator/bin

Icon=/opt/qt521arm2/qtbase/tests/auto/gui/image/qimage/images/image.xpm

Terminal=false

StartupNotify=true

Type=Application

Categories=Development

/usr/share/applications/目录下找到qtcreator.desktop右键copy to desktop

 

 

七:触摸屏tslib移植

1.下载tslib源码包

2.解压,进入源码包目录下运行sudo ./tslib.sh

tislib.sh 脚本需按各自环境编写:

export CC=/opt/FriendlyARM/toolschain/4.4.3/bin/arm-linux-gcc

export CXX=/opt/FriendlyARM/toolschain/4.4.3/bin/arm-linux-g++

export PREFIX=/usr/local/kvl/tslib

./autogen.sh

echo "ac_cv_func_malloc_0_nonnull=yes">arm-linux.cache

./configure --host=arm-linux --prefix=$PREFIX --cache-file=arm-linux.cache --enable-inputapi=no

make

make install

 

include头文件和lib库安装在/usr/local/kvl/tslib目录中(以上步骤需指定CC,CXX完整路径,否则即使指定了host,在ubuntu中仍可能会默认为8086编译)

 

3.编译Qt5.2.1的tslib插件

         进入qtbase/src/plugins/generic/tslib目录

         执行 sudo gedit tslib.pro

         pro加入tslib库路径  LIBS += -lts -I/usr/local/kvl/tslib/include -L/usr/local/kvl/tslib/lib

         生成MakeFile: /opt/qt521-arm/bin/qmake

         编译: make

         安装 make install 

         (在源码包中qtbase/plugins/generic会生成libqtslibplugin.so插件库,对应在/usr/local/qt521-arm//plugins/generic目录下也生成strip压缩版同名插件库,插件库目录plugins将在后续步骤中拷贝到开发板作为必要的动态库使用)

4.检查 file libqtslibplugin.so 是否有ARM关键字出现

david4383注:拷在开板上的时候,也要使用plugins/generic这个文件夹,否则触摸屏会找不到。默认的编译中这个库并不产生,所以要自己手动编译,可以使用QTCREATOR编译,也可以按上述方法编译,最后把这个libqtslibplugin.so插件库拷到/plugins/generic目录就可以。

 

八:新唐开发板移植

 

1.串口通信工具配置:

【转】Qt5.2.1移植新唐n32905测试 转的一位朋友的过程,基本能够通过。_第11张图片

2.开发板启动配置文件:/etc/profile

开发板启动后会调用boot_script脚本

【转】Qt5.2.1移植新唐n32905测试 转的一位朋友的过程,基本能够通过。_第12张图片

 

3.配置开发板qt程序以及tslib环境库

 

binplugins——将qtbase目录下的pluginsbin目录拷贝到开发板SD

【转】Qt5.2.1移植新唐n32905测试 转的一位朋友的过程,基本能够通过。_第13张图片

lib/qtlib——在SD卡中创建目录lib/qtlib,qtbase目录下lib中的qt动态库约18so文件拷贝到qtlib

arm-linux-gnueabi——由于开发板自带程序是静态编译可直接启动,而本例qt程序是动态编译,需配置基本启动环境,先将ubuntuarm-linux-gnueabi目录复制到开发板/lib

fonts——qtbase目录下lib中的fonts字体库拷贝到开发板

preloadable_libiconv.so——下载解压libiconv-1.11.tar.gz包,ubuntu下用arm-linux-gcc编译,要将生成的preloadable_libiconv.so拷贝到开发板的qtlib中,qt程序启动时会调用此库

ts——创建ts目录,找到之前编译的tslib将/usr/local/kvl/tslib目录下lib库中libts-1.0.so.0.0.0 文件以及ts中的so库都拷贝到开发板ts目录中,

在开发板中再用libts-1.0.so.0.0.0复制出另外两个文件libts-1.0.so.0和libts.so(这里复制成两个文件,简化了创建链接的步骤)

将/usr/local/kvl/tslib/bin中的几个触摸屏测试程序拷贝到SD卡中

 

将/usr/local/kvl/tslib/etc目录下ts.conf配置文件也拷贝到开发板ts目录中,修改内容如下图

 

【转】Qt5.2.1移植新唐n32905测试 转的一位朋友的过程,基本能够通过。_第14张图片

至此运行环境基本的库已经拷贝到开发板SD卡中

 

 

4.编写脚本设置动态库加载环境以及tslib运行环境

         (开发板启动后会调用boot_scripts脚本,SD卡挂载为/mnt/nand1-1

编写boot_scripts示例

 

#!/bin/sh

         echo "create lib"

         echo $PATH

 

(所有程序运行都需加载ld-2.15.so库,否则会出现错误No such file,此库在ubuntu以及Fedora等操作系统中目录安放标准不不统一,所以做了以下三个版本的#for

#create program load libraries

 

         mkdir /lib

         chmod 777 /lib

         cp /mnt/nand1-1/lib/arm-linux-gnueabi/lib/ld-2.15.so /lib    

        

#for Fedora/OpenSUSE

         ln -s /lib/ld-2.15.so /lib/ld-linux.so.3

#for Debian/Ubuntu

         mkdir /lib/arm-linux-gnueabihf

         ln -s /lib/ld-2.15.so /lib/arm-linux-gnueabihf/ld-linux.so.3

#for

         ln -s /lib/ld-2.15.so /lib/ld-linux-armhf.so.3

 

(因为此开发板根文件系统占用了有限的内存空间,将动态库拷贝到/lib目录中会减少可用内存使qt程序运行很卡,所以替换方法为在/lib目录下创建各动态库链接)

#create ln

         # cp /mnt/nand1-1/lib/arm-linux-gnueabi /lib -r

         mkdir /lib/arm-linux-gnueabi/lib –p

.......................

 

 

export LD_LIBRARY_PATH=/lib/arm-linux-gnueabi/lib:/lib/qt:/mnt/nand1-1/lib/qtlib:$LD_LIBRARY_PATH

echo "LD_LIBRARY_PATH=$LD_LIBRARY_PATH"

#(配置所有环境变量后启动qt程序脚本)

/mnt/nand1-1/qt.sh

 

编写qt.sh示例

#!/bin/sh

 

#export QWS_SIZE=324*240

#export QWS_DISPLAY="LinuxFb:mmWidth300:mmHeight330:0"

#export TSLIB_CONSOLEDEVICE=none

 

#配置tslib环境:

export TSLIB_ROOT=/mnt/nand1-1/lib/ts  #tslib根目录

export TSLIB_CONFFILE=$TSLIB_ROOT/ts.conf #tslib配置文件

export TSLIB_PLUGINDIR=$TSLIB_ROOT        #tslib插件目录

export TSLIB_TSDEVICE=/dev/input/event0   #tslib对应的设备驱动

export TSLIB_CALIBFILE=$TSLIB_ROOT/pointercal         #tslib校验后的配置文件目录

export TSLIB_FBDEVICE=/dev/fb0  

export TSLIB_CONSOLEDEVICE=none

 

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$TSLIB_ROOT

export LD_LIBRARY_PATH=/lib/arm-linux-gnueabi/lib:/lib/qt:/mnt/nand1-1/lib/qtlib:$LD_LIBRARY_PATH

echo "LD_LIBRARY_PATH=$LD_LIBRARY_PATH"

 

#配置qt插件以及执行环境

export QTDIR=/mnt/nand1-1

export PATH=$QTDIR/bin:$PATH

export QT_QPA_PLATFORM_PLUGIN_PATH=$QTDIR/plugins #qt插件加载目录

export QT_QPA_GENERIC_PLUGINS=tslib   #qt所要加载的插件名

export QT_QPA_PLATFORM=linuxfb:tty=/dev/tty0          #qt图形插件平台

export QT_QPA_FONTDIR=$QTDIR/lib/fonts           #qt字体库目录

export LD_PRELOAD=$QTDIR/lib/qtlib/preloadable_libiconv.so #qt加载preloadable_libiconv.so的路径

 

#开发板自带程序

/mnt/nand1-1/desktopManager &

/mnt/nand1-1/powerManager &

 

#ubuntu下交叉编译的qt测试程序

/mnt/nand1-1/qt -platform linuxfb -plugin Tslib &

 

5. tslib触屏校验

要使开发板触屏工作正常,必需进行一次tslib触屏校验

 

编写ts.sh脚本

#!/bin/sh

 

export TSLIB_ROOT=/mnt/nand1-1/lib/ts

#export TSLIB_ROOT=/usr/gui/tslib

export TSLIB_CONFFILE=$TSLIB_ROOT/ts.conf

export TSLIB_PLUGINDIR=$TSLIB_ROOT

export TSLIB_TSDEVICE=/dev/input/event0

export TSLIB_CALIBFILE=$TSLIB_ROOT/pointercal

export TSLIB_FBDEVICE=/dev/fb0  

export TSLIB_CONSOLEDEVICE=none

 

 

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$TSLIB_ROOT

export LD_LIBRARY_PATH=/lib/arm-linux-gnueabi/lib:/lib/qt:/mnt/nand1-1/lib/qtlib:$LD_LIBRARY_PATH

./ts_calibrate

#./ts_test

【转】Qt5.2.1移植新唐n32905测试 转的一位朋友的过程,基本能够通过。_第15张图片

 

最后声明:错误很多,字体大小有问题,和qt设计器字体不同步,此板也没支持opengl es2,qt5很多功能受限,如果学习目的建议换其他硬件配置更高的板玩,如果硬件板能跑安卓,还用什么qt5呢、。。。。。。


david4383注:1、字体很小的问题:是通过设置QFont来实现的,设置字为128,才与正常差不多,环境中此设置不起作用。

 2、在环境变量中设置QT_QPA_DEFAULT_PLATFORM=linuxfb,则不需要在程序启动的时候加上-platform linuxfb

3、注意在QT5中使用的QPA,而的QT4中是QWS,所以原来设置QWS的环境变量在QT5中都不会起作用。

4、我写了一个简单的界面程序就是一个界面两个按钮使用了91%的内存,在32926中实现的,几乎不能做其它工作,因此按楼主做法只是体验一下QT5,并不能用。

你可能感兴趣的:(嵌入式QT)