移植QT到tiny4412开发板

目录

        • (一) 环境准备
        • (二) Qt源代码下载
        • (三) 移植tslib库
        • (四)操作流程
            • 1.解压qt源码包
            • 2.配置编译环境
            • 3.生成Makefile
            • 4.编译安装
            • 5.安装一些库用来支持 qt
            • 6. 添加以下内容到开发板目录下的/etc/profile 文件
            • 7. 添加字体
            • 8.QT中文支持
        • (五)使用QtCreater编写测试程序
        • (六)使用命令编译测试
        • (七)关于交叉编译器版本的问题:

(一) 环境准备

  • ubuntu16.04
  • 交叉编译工具:arm-linux-gcc-4.5.1-v6-vfp-20120301.tgz
  • linux内核版本:linux-3.5

一定要注意交叉编译器版本和qt源代码版本的问题,否则制作Makefile会出现问题,关于出现版本问题,在文末有解决办法提示。
交叉编译器的版本是arm-linux-gcc 4.5.1 ,该编译器版本对C++11支持不完善,如果需要编译更加高的QT版本,就需要升级交叉编译器,目前4友善之臂光盘提供的编译器最高只能支持QT5.6版本的交叉编译。
最新的交叉编译器下载地址: https://www.veryarm.com/arm-none-linux-gnueabi-gcc
这里我们下载arm-2014.05-29-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2,文中演示使用的也是这个版本 ,安装交叉编译器参考:linux安装交叉编译环境

(二) Qt源代码下载

下载链接:Qt
图一
这里根据自己的需求选择,我这里选择5.1版本的

tuer
选择single下载完整的源码包

图三
选择.tar.gz结尾的,我这里有以前下载好的5.7.0的源码包直接使用了,如果下载其他版本的方法不变。

(三) 移植tslib库

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

(四)操作流程

1.解压qt源码包
 tar -xvf qt-everywhere-opensource-src-5.1.0.tar.gz cd qt-everywhere-opensource-src-5.1.0

注意这里解压的时候不要选择ubuntu自带的提取到此处,有可能丢失文件,我在这个部分找了好久错误

2.配置编译环境

由于我用的是新更新的源代码,所以交叉编译器安装的是5.4的,在配置qmake.conf的时候需要注意。

root@1:/qt-everywhere-src-5.1.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 = sublibQT_QPA_DEFAULT_PLATFORM = linux #eglfs
QMAKE_CFLAGS_RELEASE += -O2 -march=armv7-a
QMAKE_CXXFLAGS_RELEASE += -O2 -march=armv7-ainclude(../common/linux.conf)
include(../common/gcc-base-unix.conf)
include(../common/g++-unix.conf)#modifications to g++.confQMAKE_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.confQMAKE_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)

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

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

3.生成Makefile

创建脚本文件, 生成 Makefile,对 qt 进行裁剪及安装配置

gedit autoConfigure.sh

内容如下:

#!/bin/sh
./configure \
-v \
-prefix /usr/local/Qt5.7.0 \
-release \
-opensource \
-make libs \
-xplatform linux-arm-gnueabi-g++ \
-optimized-qmake \
-pch \
-qt-sql-sqlite \
-qt-libjpeg \
-qt-zlib \
-no-opengl \
-skip qt3d \
-skip qtcanvas3d \
-skip qtpurchasing \
-no-sse2 \
-no-openssl \
-no-nis \
-no-cups \
-no-glib \
-no-iconv \
-nomake examples \
-nomake tools \
-skip qtvirtualkeyboard \
-I/usr/local/tslib/include \
-L/usr/local/tslib/lib
exit

以上的配置选项信息可通过./configure –help 查看

修改脚本运行权限,执行脚本,完成后在文件夹下生成 Makefile

chmod +x autoConfigure.sh
./autoConfigure.sh

编译出现如下错误(如果没错误忽略这一点)(1)(2):

查看config.log信息

root@1:/qt-everywhere-src-5.14.2# vim config.log 

查看配置的帮助信息:

 ./configure -help

(1) -std=c++11 没有
图二
这是交叉编译器版本较低,安装高版本的交叉编译器就行
(2) main.cpp:2:24: fatal error: libspeechd.h: 没有那个文件或目录

图三

4.编译安装
make -j8 && make install -j8

编译过程比较慢,需要几个小时
bainyi
tu

5.安装一些库用来支持 qt
apt-get install libncurses5-dev libreadline-dev 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-sync-dev libxcb-xfixes0-dev libxrender-dev libxcb-shape0-dev libxcb-randr0-dev libxcb-render-util0 libxcb-render-util0-dev libxcb-glx0-dev libxcb-xinerama0-dev

将/usr/local/ Qt5.7.0 拷贝到开发板/usr/local/

cp /usr/local/ Qt5.7.0 /driver/rootfs/usr/local/ -r
6. 添加以下内容到开发板目录下的/etc/profile 文件
export QT_ROOT=/usr/local/Qt5.7.0/
export TSLIB_ROOT=/usr/local/tslib/
export TSLIB_TSDEVICE=/dev/input/event0
export TSLIB_TSEVENTTYPE=input
export TSLIB_CALIBFILE=/etc/pointercal
export TSLIB_CONFFILE=$TSLIB_ROOT/etc/ts.conf
export TSLIB_PLUGINDIR=$TSLIB_ROOT/lib/ts
export TSLIB_FBDEVICE=/dev/fb0
export TSLIB_CONSOLEDEVICE=none
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$TSLIB_ROOT/lib
export QWS_MOUSE_PROTO=tslib:/dev/event2
export LD_LIBRARY_PATH=/lib:/usr/lib:/usr/local/lib:$QT_ROOT/lib:$TSLIB_ROOT/lib
export QT_QPA_PLATFORM_PLUGIN_PATH=$QT_ROOT/plugins
export QT_QPA_PLATFORM=linuxfb:tty=/dev/fb0
export QT_QPA_FONTDIR=$QT_ROOT/lib/fonts
export QT_QPA_GENERIC_PLUGINS=tslib
export QT_QPA_FB_TSLIB=1
7. 添加字体
mkdir /driver/rootfs/usr/local/Qt5.7.0/lib/fonts

将/usr/share/fonts/truetype/ubuntu-font-family 下的字体文件,复制到根文件系统/usr/local/ Qt5.7.0/lib/fonts
目录下

cp /usr/share/fonts/truetype/ubuntu-font-family/* /driver/rootfs/usr/local/Qt5.7.0/lib/fonts –r
8.QT中文支持

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

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

这是我的Qt安装目录:在这里插入图片描述
windows下字体目录在:C:\Windows\Fonts
ziti
将上面的字体拷贝到Qt安装目录下的fonts下就行了。

(五)使用QtCreater编写测试程序

打开QtCreater,这里我已经安装好了,没安装的可以在上面提供的网址下载。
测试图一
测试图三
测试图一

测试图四
测试图六
同时,想要将编译后的文件在开发板环境下运行需要添加
exportLD_PRELOAD=$TSLIB_ROOT/lib/libts.so 到根文件的/etc/profile,否则运行时会出现
Couldnt load module pthres
ts_config() failed (No such file or directory)

除了使用QtCreater编译程序,我们还可以使用qmake命令编译

(六)使用命令编译测试

1.创建qt工程

root@1:/mydriver/rootfs/home/qt/led1# ls
led.pro       main.cpp        mainwindow.h   socket.cpp
led.pro.user  mainwindow.cpp  mainwindow.ui  socket.h

2.使用qmake命令构建Makefile

root@1:/mydriver/rootfs/home/qt/led1# qmake
Info: creating stash file /mydriver/rootfs/home/qt/led1/.qmake.stash
root@1:/mydriver/rootfs/home/qt/led1# ls
led.pro       mainwindow.cpp  Makefile
led.pro.user  mainwindow.h    socket.cpp
main.cpp      mainwindow.ui   socket.h

3.编译程序

root@1:/mydriver/rootfs/home/qt/led1# make 
root@1:/mydriver/rootfs/home/qt/led1# ls
led      led.pro.user  main.o          mainwindow.h  mainwindow.ui  moc_mainwindow.cpp  moc_predefs.h  socket.h  ui_mainwindow.h
led.pro  main.cpp      mainwindow.cpp  mainwindow.o  Makefile       moc_mainwindow.o    socket.cpp     socket.o

上面生成的led就是可执行文件,可以直接复制到开发板运行

./led

图三

(七)关于交叉编译器版本的问题:

最近更新的qt源码要求c++11,没有./configure -no-c++11选项,因为arm-linux-gcc4.8以后才支持c++11
,所以可以下载以前的qt源码+低版本的交叉编译器(arm-linux-gg-4.8以前)或者下载最近的qt源码+高版本的交叉编译器(arm-linux-gg-4.8以后)
如果下载的是以前的qt可以使用上面提供的arm-linux-gcc-4.5,在制作makefile的时候使用:

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

如果下载的是最近的qt可以使用上面提供的arm-linux-gnueabihf-gcc-5.4:

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

qt5.1.0(2013年发布)版本:
在这里插入图片描述
在这里插入图片描述
qt5.14.2(2017年维护的):
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/531398.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

eclipse导入web项目之后项目中出现小红叉解决办法

项目中有小红叉我遇到的最常见的情况: 1、项目代码本身有问题。(这个就不说了,解决错误就OK) 2、项目中的jar包丢失。(有时候eclipse打开时会出现jar包丢失的情况,关闭eclipse重新打开或者重新引入jar包就O…

windows下实现Git在局域网使用

1.首先在主机A上创建一个文件夹用于存放你要公开的版本库。然后进入这个文件夹,右键->Git create repository here,弹出的窗口中勾选Make it Bare!之后将这个文件夹完全共享(共享都会吧?注意权限要让使用这个文件夹…

lintcode 滑动窗口的最大值(双端队列)

题目链接:http://www.lintcode.com/zh-cn/problem/sliding-window-maximum/# 滑动窗口的最大值 给出一个可能包含重复的整数数组,和一个大小为 k 的滑动窗口, 从左到右在数组中滑动这个窗口,找到数组中每个窗口内的最大值。 样例 给出数组 [1…

适用于Linux的Windows子系统WSL

以前使用的都是在虚拟机里安装linux,最近才发现在win10提供了WSL(Windows Subsystem for Linux) ,简单来说就是可以在win10里面直接使用Linux。 (一)首先打开Microsoft Store , 搜索 Linux (二)选择自己需…

jsp通过易宝方式实现在线支付

项目下载地址: https://github.com/hjzgg/OnlinePayment 参考:http://blog.csdn.net/jadyer/article/details/7380259?utm_sourcetuicool&utm_mediumreferral 效果图1:请求界面 效果图2:地支付请求和易宝之间建立连接之后跳转到相应的银…

nand flash和nor flash的这几点区别你知道吗?

这篇文章讲解nand flash和nor flash的特点和区别,不涉及存储原理的讲解 (一)Flash简介 FLASH是一种存储芯片,全名叫Flash EEPROM Memory,通地过程序可以修改数据,即平时所说的“闪存”。Flash又分为NAND f…

windows8建立局域网的方法

win8建立局域网的方法:1、首先笔记本有无线网卡且支持 虚拟WIFI ;2、按winX键,选择"命令提示符(管理员)A"; 3、输入"netsh wlan set hostednetwork modeallow ssid网络名称 key我的密码" ; 4、接着输入"netsh wlan start hoste…

内核移植出现:Kernel panic - not syncing: No init found.

今天在升级SDK的时候,升级到kernel时遇到如题所述的问题,花了天时间调通,在这里记录一下。 报错提示:(当时没有记录,错误的提示大概如下) Kernel panic - not syncing: No init found. Try passing init option to k…

32位和64位机器上C语言数据类型的大小

作为嵌入式开发的人员,是必须了解C语言在不同位数机器上占用的字节大小的,下面做下对比 不同位数平台对比: \16位平台32位平台64位平台char1个字节8位1个字节8位1个字节short2个字节16位2个字节16位2个字节int2个字节16位4个字节32位 4个字节…

lintcode最长回文子串(Manacher算法)

题目来自lintcode, 链接:http://www.lintcode.com/zh-cn/problem/longest-palindromic-substring/ 最长回文子串 给出一个字符串(假设长度最长为1000),求出它的最长回文子串,你可以假定只有一个满足条件的最长回文串。…

全排列总结

接触全排列已经好长时间了,一直没有抽空总结一下全排列的相关问题,下面来说一下! 排列 一般地,从n个不同元素中取出m(m≤n)个元素,按照一定的顺序排成一列,叫做从n个元素中取出m个元…

大小端问题傻傻分不清?

先来熟悉一下概念: 大端:数据的高位数据保存在低位地址,数据的低位数据保存在高地址 小端:数据的高位数据保存在高位地址,数据的低位数据保存在低地址为什么会存在大小端的问题? 这是因为在计算机系统中&a…

mount --bind的用处

(一)mount --bind介绍 mount --bind的作用是将两个目录连接起来,例如:mount ---bind /dir1 /dir2 是将dir1目录挂载到dir2目录上,下面来实际演示一下: 上面的操作中首先创建了dir1 dir2两个目录&#xf…

lintcode 落单的数(位操作)

题目1 落单的数 给出2*n 1 个的数字,除其中一个数字之外其他每个数字均出现两次,找到这个数字。 链接:http://www.lintcode.com/zh-cn/problem/single-number/ 样例 给出 [1,2,2,1,3,4,3],返回 4 挑战 一次遍历,常数级…

旋转图像

旋转图像 给定一个NN的二维矩阵表示图像,90度顺时针旋转图像。 看个例子 算法1: 如上图所示,设一个N阶二维矩阵,则将矩阵从外向里可以分成N/2个圈,例如(1 2 3 4 8 12 16 15 14 13 9 5)这是最外边…

嵌入式开发板模拟器:QEMU

前两天看微信公众号时发现了一个嵌入式模拟器,感觉很不错,自己动手安装了一个,折腾了几天,下载一直是个问题,特此记录如下 模拟器大家应该都听说过,有的小伙伴打游戏也会安装模拟器,今天我们介绍…

gcc: weak_alias如何使用

本文主要说明weak和alias是什么和如何使用它 __attribute__是用来说明函数的属性,weak和alias分别是两个属性。 (一)强符号和弱符号: 强符号:已经初始化的全局变量和未被weak修饰的函数弱符号:未初始化的全…

静态Include和动态Include测试并总结

主要代码 hjzgg.css .center-div{width:auto;margin-left: 40%;margin-right: 40%;display: block;position: absolute;top:0px;left:0px; }.text-div{margin-top: 80px; }.hjzgg-div{color:transparent;font-size:20px;font-weight: bold;letter-spacing:2px;-webkit-animatio…

ueditor的配置和使用

ueditor下载好之后直接复制到项目的WebContent目录下,并将ueditor\jsp\lib下的jar包复制或者剪切到项目的lib目录下。先看一下效果,如下: 1.文件的上传 首先在ueditor/jsp目录下找到config.json文件,就拿Image上传来说吧。 "…

windows上搭建NFS服务器

在进行嵌入式开发的时候,我们常用的做法是搭建NFS服务器,然后使把文件系统、调试程序放在NFS服务器上,这样可以方便调试,以前都是在linux里面开启NFS服务器,今天来说下window里的nfs服务器–haneWin 一、软件安装和使…