QT5.6移植到ARM三星4412

嵌入式linux之QT5.6移植 1

1.1 简介 1

1.2 移植 2

1.2.1 源码下载链接 2

1.2.2 移植准备工作 3

1.2.3 解压qt源码包 3

1.2.4 配置编译环境 3

1.2.5 删除目录 4

1.2.6 生成Makefile 5

1.2.7 编译安装 5

1.2.8 编译成功 6

1.2.9 添加环境变量 6

1.2.10 查看qmake版本 7

1.2.11 编译ARM版的QT程序
7

1.3 部署开发板运行环境 7

1.3.1 拷贝QT运行库 7

1.3.2 libiconv库下载 8

1.3.3 创建相关配置文件 8

1.3.4 拷贝QT依赖库 9

1.3.5 QT中文支持 9

1.3.6 开发板运行效果 10

1.3.7 鼠标设置方法 11

嵌入式linux之QT5.6移植

嵌入式linxu内核版本:3.5.0

交叉编译器:arm-linux-gcc 4.5.1

宿主机:redhat红帽6.3

1.1 简介

Qt 是一个跨平台的C++图形用户界面应用程序框架。它提供给开发者建立图形用户界面所需的功能,广泛用于开发GUI程序,也可用于开发非GUI程序。Qt是完全面向对象的,很容易扩展,并且允许真正地组件编程。

 作为一款领先级的跨平台C 图形用户界面应用程序框架,Qt提供给开发者建立图形用户界面所需的功能,广泛用于开发GUI程序,也可用于开发非GUI程序。Qt完全面向对象、且模块化程度更高,易与扩展,并且允许真正组件编程。此外,Qt支持更多的平台与丰富的API,支持2D/3D 图形渲染、OpenGL、大量的开发文档、XML等等。

在2015世界峰会上,Qt就曾宣布,Qt5.6将作为一款受长期支持的旗舰版本引领Qt5系列。自三年前Qt5.0问世以来,历经洗炼,不断成长,直至近日Qt公司才决定借此成熟时机发布该款日臻完满的长期版本。这意味着Qt5.6将享有三年的技术支持,且此后的支持服务亦可通过购买获得。其间兼容各种新版本的同步更新,漏洞修复,安全升级,并支持新操作系统和编译器等。

Qt5.6 最新特性:

n 新持续集成系统。由于Qt每一版本的发布都历经了各式平台各类配置的反复测试,这便对其背后的相  应支持基础设施要求极高。此次Qt5.6便应用到了其新持续集成系统以极大节省系统及CPU时间;

n 高分辨率支持。可使标清标准下开发的应用自动调整至高清显示,而不同显示设备间也可通过字体、图标、图片等元素的调整依像素配置自动相互转换。

n 全面支持Windows10。在5.5的基础上更进一步,全面支持Win32及WinRT的API。台式机,平板电脑和Windows Phone上所有Qt应用均可通过Windows商店发布和获取。一般来说,对于32位系统应用,兼容至Win10和WinRT直如重新开发,但通过Qt,只需要对您的应用做一个简单的重新编译即可轻松实现。另外,5.6在本次Win10的全面支持中还为MS Visual Studio2015提供了预设文件库,并将随着5.6.0的发布更新其VS插件。

1.2移植

1.2.1 源码下载链接

官网下载链接:http://download.qt.io/archive/qt/

图1-1 最新版本5.6

图1-2 选择单一的压缩包

图1-3 选择linux格式的压缩包下载

1.2.2 移植准备工作

1.需要提前移植好交叉编译器,如果编译QT时出现错误,大半都是编译器版本太低引起的,低版本的编译器编译QT会出现错误。

2.移植前需要先移植好tslib库,tslib 是电阻式触摸屏用于校准的一个软件库,是一个开源的程序,能够为触摸屏驱动获得的采样提供诸如滤波、去抖、校准等功能,通常作为触摸屏驱动的适配层,为上层的应用提供了一个统一的接口。操作触摸屏时,QT需要依赖tslib获取屏幕坐标。

1.2.3 解压qt源码包


[[email protected] qt5.6]# tar xvf qt-everywhere-opensource-src-5.6.0

[[email protected] qt5.6]# cd qt-everywhere-opensource-src-5.6.0

1.2.4 配置编译环境


[[email protected] qt-everywhere-opensource-src-5.6.0]# gedit qtbase/mkspecs/linux-arm-gnueabi-g++/qmake.conf

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 #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                = /work/arm-linux-gcc/opt/FriendlyARM/toolschain/4.5.1/bin/arm-none-linux-gnueabi-gcc

QMAKE_CXX               = /work/arm-linux-gcc/opt/FriendlyARM/toolschain/4.5.1/bin/arm-none-linux-gnueabi-g++

QMAKE_LINK              = /work/arm-linux-gcc/opt/FriendlyARM/toolschain/4.5.1/bin/arm-none-linux-gnueabi-g++

QMAKE_LINK_SHLIB        = /work/arm-linux-gcc/opt/FriendlyARM/toolschain/4.5.1/bin/arm-none-linux-gnueabi-g++

# modifications to linux.conf

QMAKE_AR                = /work/arm-linux-gcc/opt/FriendlyARM/toolschain/4.5.1/bin/arm-none-linux-gnueabi-ar cqs

QMAKE_OBJCOPY           = /work/arm-linux-gcc/opt/FriendlyARM/toolschain/4.5.1/bin/arm-none-linux-gnueabi-objcopy

QMAKE_NM                = /work/arm-linux-gcc/opt/FriendlyARM/toolschain/4.5.1/bin/arm-none-linux-gnueabi-nm -P

QMAKE_STRIP             = /work/arm-linux-gcc/opt/FriendlyARM/toolschain/4.5.1/bin/arm-none-linux-gnueabi-strip

load(qt_config)

注:上面蓝色部分的是修改部分,需要根据自己的实际情况进行修改。

修改说明:

n QT_QPA_DEFAULT_PLATFORM选项是指定图形插件, Qt5将各平台底层抽象为一个 qpa 插件,通常在mac上是cocoa, 在window上是windows, 在linux X11下是xcb, 如果有OPENGL支持, 那么选eglfs。而对于无硬件加速的设备,则选择linuxfb。

n armv7-a :是当前CPU的构架,需要根据当前的CPU实际构架填写。

通过交叉编译器查看当前处理器构架:


[[email protected] qt-everywhere-opensource-src-5.6.0]# arm-none-linux-gnueabi-gcc --target-help

n /work/arm-linux-gcc/opt/FriendlyARM/toolschain/4.5.1/bin/ :是交叉编译器的路径,需要根据自己的交叉编译器路径填写。

1.2.5 删除目录


[[email protected] qt-everywhere-opensource-src-5.6.0]# rm qt3d qtcanvas3d qtweb* -fr

如果没有修改,编译时会出现如下的错误:

图1-5错误信息

1.2.6 生成Makefile


[[email protected] qt-everywhere-opensource-src-5.6.0]#

./configure -release -opensource -xplatform linux-arm-gnueabi-g++ -prefix $PWD/tmp -no-c++11 -no-opengl -no-dbus

说明:

$PWD/tmp :配置安装的路径。

查看配置的帮助信息:


[[email protected] qt-everywhere-opensource-src-5.6.0]# ./configure -help

1.2.7 编译安装


[[email protected] qt-everywhere-opensource-src-5.6.0]# make && make install

编译过程需要持续1到3个小时。

图1-6 编译成功

1.2.8 编译成功


[[email protected] tmp]# ls

bin  doc  examples  include  lib  mkspecs  plugins  qml  translations

编译成功生成的文件。

bin目录下存放了qmake命令。

1.2.9 添加环境变量

为了方便使用qmake命令,可以将bin目录加入到系统的环境变量PATH中。


[[email protected] bin]# pwd

/work/qt5.6/qt_5.6/qt-everywhere-opensource-src-5.6.0/tmp/bin

[[email protected] bin]# gedit /etc/profile

图1-7 添加环境变量

使修改的/etc/profile文件立即生效:


[[email protected] bin]# source /etc/profile

1.2.10 查看qmake版本


[[email protected] /]# qmake -v

QMake version 3.0

Using Qt version 5.6.0 in /work/qt5.6/qt_5.6/qt-everywhere-opensource-src-5.6.0/tmp/lib

1.2.11 编译ARM版的QT程序

① 先创建一个完整的QT工程。


[[email protected] window_1]# ls

main.cpp        mainwindow.h    win_1.h   window_1   mainwindow.cpp  mainwindow.ui  win_1.cpp  win_1.ui  window_1.pro

② 使用qmake命令构建Makefile


[[email protected] window_1]# qmake

[[email protected] window_1]# ls

main.cpp        mainwindow.h   Makefile   win_1.h   window_1      window_1.pro.user

mainwindow.cpp  mainwindow.ui  win_1.cpp  win_1.ui  window_1.pro

③ 编译程序


[[email protected] window_1]# make

[[email protected] window_1]# ls

main.cpp        mainwindow.h   Makefile   moc_win_1.cpp    ui_win_1.h  win_1.o   window_1.pro

main.o          mainwindow.o   moc_mainwindow.cpp  moc_win_1.o      win_1.cpp   win_1.ui

mainwindow.cpp  mainwindow.ui  moc_mainwindow.o    ui_mainwindow.h  win_1.h     window_1

window_1:编译生成的可执行程序。可以直接拷贝到开发板运行。


示例: ./window_1

1.3部署开发板运行环境

1.3.1 拷贝QT运行库

先创建一个文件夹qt5.6_lib,用来存放相关的代码!将QT编译生成的lib 目录和 plugins 目录,拷贝到qt5.6_lib目录下,然后再将qt5.6_lib目录拷贝至开发板根文件系统待用!

操作步骤如下:


① [[email protected] window_1]# cd /work/qt5.6/qt_5.6/qt-everywhere-opensource-src-5.6.0/tmp/

② [[email protected] tmp]# ls

bin  doc  examples  include  lib  mkspecs  plugins  qml  translations

③ [[email protected] tmp]# mkdir qt5.6_lib

④ [[email protected] tmp]# cp lib plugins qt5.6_lib/ -rfd

⑤ [[email protected] tmp]# cd qt5.6_lib/

⑥  [[email protected] qt5.6_lib]# ls

lib  plugins

1.3.2 libiconv库下载

QT程序在运行时需要依赖libiconv库。

更新libiconv库,到iconv官网下载最新的库源码包,下载地址为:

http://ftp.gnu.org/gnu/libiconv/libiconv-1.14.tar.gz

编译步骤:

在libiconv目录下:

$./configure --prefix=$PWD/temp --host=arm-linux

$make

$make install

上述命令执行完成后会在libiconv目录下生成新的temp目录,该目录下存在4个目录分别是:


bin  include  lib  share

在lib目录下为生成的库文件,其中一个为preloadable_libiconv.so,把它下载到开发板的lib目录下,然后再设置开发板的系统环境变量即可:


$ export LD_PRELOAD=/lib/preloadable_libiconv.so

1.3.3 创建相关配置文件

① 在/qt5.6_lib下创建一个配置文件(qt5.6_path.config),用来存放QT相关的环境变量设置。

内容如下:


#QT相关的路径

export QTDIR=/qt5.6_lib

#库路径

export LD_LIBRARY_PATH=$QTDIR/lib

#键盘

export QWS_KEYBOARD=USB:/dev/input/event1

#鼠标指定为触摸屏

export QWS_MOUSE_PROTO=Tslib:/dev/input/event0

#qt字体库目录

export QT_QWS_FONTDIR=$QTDIR/lib/fonts

#LCD尺寸

export QWS_SIZE=800x480

#qt图形插件平台

export QT_QPA_PLATFORM=linuxfb:tty=/dev/fb0

#触摸屏-一般的插件

export QT_QPA_GENERIC_PLUGINS=tslib

#平台插件

export QT_QPA_PLATFORM_PLUGIN_PATH=$QTDIR/plugins

#libiconv库的声明

export LD_PRELOAD=$QTDIR/lib/preloadable_libiconv.so

② 创建一个qt5.6_config.sh 脚本文件,用来开机自动加载QT的配置。该脚本只是用来方便移植使用,只需要在移植的时候执行一次,以后就不需要再执行。

内容如下:


#!/bin/bash

grep -q "source /qt5.6_lib/qt5.6_path.config" ../etc/profile||echo "source /qt5.6_lib/qt5.6_path.config">>../etc/profile

1.3.4 拷贝QT依赖库

QT运行时需要用到ibjpeg.so.8、libpng14.so.14 等一系列库。这些库在交叉编译器目录下已经编译好,直接拷贝到开发板的lib目录下即可。

库存放的路径:


/work/arm-linux-gcc/opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/sys-root/usr/lib

拷贝示例:


[[email protected] lib]# pwd

/work/arm-linux-gcc/opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/sys-root/usr/lib

[[email protected] lib]# cp ./* /work/rootfs/lib/ -fd

1.3.5 QT中文支持

Qt的字体目录是根据自己在PC机的QT源码编译安装目录有关。

比如我在PC端编译安装QT源码的目录如下:


/work/qt5.6/qt_5.6/qt-everywhere-opensource-src-5.6.0/tmp/

那么QT字体的目录就是:


/work/qt5.6/qt_5.6/qt-everywhere-opensource-src-5.6.0/tmp/lib/fonts

如果想让QT显示中文,可以将windows下的中文字体拷贝到QT的字体库目录下。

图1-8 Windows下的字体

1.3.6 开发板运行效果

图1-9 运行效果图

图1-10 运行效果图

图1-11

1.3.7 鼠标设置方法

如果输入源不想使用触摸屏,可以直接使用USB鼠标代替。

环境变量配置如下:


#QT相关的路径

export QTDIR=/qt5.6_lib

#库路径

export LD_LIBRARY_PATH=$QTDIR/lib

#键盘

export QWS_KEYBOARD=USB:/dev/input/event1

#鼠标

export QWS_MOUSE_PROTO=/dev/input/event0

#LCD尺寸

export QWS_SIZE=800x480

#qt图形插件平台

export QT_QPA_PLATFORM=linuxfb:tty=/dev/fb0

#平台插件

export QT_QPA_PLATFORM_PLUGIN_PATH=$QTDIR/plugins

export LD_PRELOAD=$QTDIR/lib/preloadable_libiconv.so

时间: 2024-08-26 13:24:48

QT5.6移植到ARM三星4412的相关文章

移植qt5.3.1到arm

最近刚入手一款开发板(比较低端,刚毕业工作还没一个月,穷屌丝一个).在学校以前都是用的是Friendly Arm的6410,使用的qt版本是使用的最多的4.7.0版本,入手的板子是4.7.4.qt5出来也有好长的时间了,其中提供了很多的特性,所以这次移植的是qt5的最新版本5.3.1. 第一步准备好源码包,这里需要qt的源码包,和tslib包,tslib我使用的是开发板提供的包. 设置交叉编译环境,我使用的是friendly arm的交叉工具.将其加到PATH中. 然后看看是不是已经安装成功.

qt5.3.2移植到arm上出undefined reference to '__sync_sub_and_fetch_4的错

qt5.3.2移植到arm上出undefined reference to '__sync_sub_and_fetch_4的错.解决办法如下, 使用工具:GCC4.4.1 QT源码:qt5.3.2 前提是确保你的工具已经安装成功了. 解决:1.下载gcc源码:我用的4.4.1解压,在gcc-4.4.3/gcc/config/arm/目录下找到一个linux-atomic.c:2.制作链接库:使用libtool制作,输入命令 libtool --tag=CC --mode=compile arm-

三星4412开发卡刷android系统

使用SD卡烧写cpu核心为三星4412为核心的CortexA9的Android开发版. 1.准备一张4G或者是8G的SD卡. 2.使用Ubunt12.04下自到的fdisk工具对sd卡进行格式化成(Win95/Fat32)格式. 2.1格式是应该需要注意预留100M左右的空间要存放Supportboot.bin, 格式化u盘的步骤如下: [email protected]:~/ARM/mycode/blog$ sudo fdisk -l [sudo] password for zshh: Dis

如何将lua移植到arm平台的linux内核

将脚本移植到内核是一件很酷的事情,lua已经被移植到NetBSD的内核中,也有一个叫lunatik的项目把lua移植到了linux内核,只可惜只支持x86,不支持arm,在网上搜索了下,没有找到现成的,于是自己研究了下,现将它分享出来. 移植到arm平台,主要是要重新实现setjmp和longjmp两个函数,网上相关的资料很少,最后终于找到一个klibc的项目,里面有setmp和longjmp的arm平台的实现,于是直接拿来用了,不用说,当看到脚本在内核中执行并打印出"hello,world&q

vnc移植成功 VNC移植到arm开发板(4.1.3)

VNC移植过程 所用系统ubuntu 移植好的包下载地址http://download.csdn.net/detail/guoqianqian5812/8948849 移植的arm库下载地址http://download.csdn.net/detail/guoqianqian5812/8948885 一.准备工作 1.下载vnc源码包,这里移植的是vnc-4_1_3-unixsrc 下载地址http://www.realvnc.com/download/open/4.0/ 2.交叉编译器:arm

iTOP-IMX6UL 实战项目:ssh 服务器移植到 arm 开发板

实验环境:迅为提供的Ubuntu12.04.2 以及虚拟机 编译器:arm-2009q3 编译器 开发板系统:QT系统 开发板使用手册中给Windows 系统安装了 ssh 客户端,给 Ubuntu 安装了 ssh 服务器,这样就可以通过ssh 在 Windows 和虚拟机 Ubuntu 之间传输文件.其实在开发 板上也是可以移植和安装ssh 服务器,这样就可以通过网络,在 Windows 和开发板之间传 输文件.“实战教程-ssh 服务器移植到开发板”,我们要完成的目标是能够通过 ssh 在开

QT5.4.2在ARM上的移植

准备移植phonon,4.5移植失败.播放声音就出错...没办法.转移到QtMutimedia 安装交叉编译工具这里就不提了... 1.下载QT5.4.2:http://download.qt.io/archive/qt/ 不小下载5.0,这个版本有问题... 2.配置 配置时需要注意的几点是: 如果是交叉编译,需要配置 xplatform选项,比如要在arm-linux平台上移植Qt的话,就在配置项中加上 -xplatform linux-arm-gnueabi-g++ ,Qt5支持的交叉平台

玩转树莓派- RaspBerry,Qt5交叉编译移植新手指南

Raspberry Pi (BCM2835): Device Information Architecture ARMv6 CPU ARM11 RAM 256MB OR 512MB since October 2012 (shared with GPU) GPU VideoCore IV OpenGL OpenGL ES 2.0 Multimedia OpenMax IL 1.1.2 Qt 5.0 (eglfs/QPA) Supported, with OpenGL ES 2.0 Qt 5 po

QT unixODBC+freetds连接sqlserver并交叉编译移植到ARM上

最近产品需要做一个数据上传功能.客户要求直接写入SQLserver数据库.之前QT连接数据库是默认来年将诶sqlite数据库.由于sqlite是QT默认自带的操作起来比较简单,但是SQLserver QT没有带驱动所以需要安装驱动插件.下面我们来看一下是QT支持SQLServer所需要的插件. 一.unixODBC 二.QT的ODBC驱动 三. FreeTDS Ubuntu篇: 编译QT的ODBC驱动需要unixODBC,所以要先编译unixODBC 一.编译unixODBC 下载:http:/