移植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,一经查实,立即删除!

相关文章

c++面试常用知识(sizeof计算类的大小,虚拟继承,重载,隐藏,覆盖)

一. sizeof计算结构体 注&#xff1a;本机机器字长为64位 1.最普通的类和普通的继承 #include<iostream> using namespace std;class Parent{ public:void fun(){cout<<"Parent fun"<<endl;} }; class Child : public Parent{ public:void fun(){…

嵌入式面试题(一)

目录1 关键字volatile有什么含义&#xff1f;并给出三个不同的例子2. c和c中的struct有什么不同&#xff1f;3.进程和线程区别4.ARM流水线5.使用断言6 .嵌入式系统的定义7 局部变量能否和全局变量重名&#xff1f;8 如何引用一个已经定义过的全局变量&#xff1f;9、全局变量可…

能ping通ip但无法ping通域名和localhost //ping: bad address 'www.baidu.com'

错误描述&#xff1a; ~ # ping localhost ping: bad address localhost原因&#xff0c;在/etc目录下缺少hosts文件&#xff0c;将linux中的/etc hosts文件拷入即可 ~ # ping localhost PING localhost (127.0.0.1): 56 data bytes 64 bytes from 127.0.0.1: seq0 ttl64 tim…

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

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

arm开发板通过网线连接笔记本电脑上外网

需要工具&#xff1a;arm开发板&#xff0c;网线&#xff0c;一台双网卡的win7笔记本电脑&#xff08;笔记本电脑一般都是双网卡&#xff09; 一、笔记本电脑需要先连上外网&#xff0c;可以连上家里的WIFI&#xff0c;或者手机开热点&#xff08;本人未测试过连接手机的热点&…

windows下实现Git在局域网使用

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

解决linux下QtCreator无法输入中文的情况

安装了QtCreator(Qt5.3.1自带版本)后无法输入中文&#xff0c;确切的说是无法打开输入法。以前使用iBus输入法的时候没有这个问题&#xff0c;现在使用sougou输入法才有的这个问题。 可以查看此文 http://www.cnblogs.com/oloroso/p/5114041.html 原因 有问题就得找原因&…

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

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

你的main函数规范吗?

在学习c语言的时候&#xff0c;有一个函数一直被我们使用&#xff0c;那就是main函数&#xff0c;但是你知道标准里面是怎么规定它的写法吗&#xff1f; 平时看见的main函数有下面这几种&#xff1a; 1.int main(void){ }2.int main(){ }3.int main(int argc, char *argv[])…

lintcode 最长上升连续子序列 II(二维最长上升连续序列)

题目链接&#xff1a;http://www.lintcode.com/zh-cn/problem/longest-increasing-continuous-subsequence-ii/ 最长上升连续子序列 II 给定一个整数矩阵&#xff08;其中&#xff0c;有 n 行&#xff0c; m 列&#xff09;&#xff0c;请找出矩阵中的最长上升连续子序列。&a…

适用于Linux的Windows子系统WSL

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

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

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

permission denied是什么鬼?

问题&#xff1a;在PC端编译了一个arm芯片的测试程序&#xff0c;出现了permission denied 解决办法&#xff1a; 1.给文件赋予可执行权限 chmod ax xxx这是一般第一反应会想到的答案 2. 有时候已经有可执行权限&#xff0c;还是提示上面的错误此时要注意你的交叉编译器是否正…

CSS中div覆盖另一个div

将一个div覆盖在另一个div上有两种手段&#xff1a;一是设置margin为负值&#xff0c;二是设置绝对定位。 可以根个人情况设置z-index的值 1->position 为absolute的情况 <html> <head> <style> #div1{position:absolute;width:300px;height:300px;backgr…

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

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

c++堆

c reference: http://www.cplusplus.com/reference/algorithm/make_heap/ heap并不属于STL容器组件&#xff0c;它分为 max heap 和min heap&#xff0c;在缺省情况下&#xff0c;max-heap是优先队列&#xff08;priority queue&#xff09;的底层实现机制。 而这个实现机制中的…

关于Ubuntu拒绝root用户ssh远程登录

今天使用SecureCRT远程登陆Ubuntu时一直提示密码或用户名错误&#xff0c;实际输入是正确的&#xff0c;我按照网上教程改还是不行&#xff0c;后来才想起来我是root登录的&#xff0c;Ubuntu默认的ssh远程root登录是关闭的&#xff0c;在这里记录一下 1.编辑配置文件 #sudo v…

windows8建立局域网的方法

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

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

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

lintcode Permutation Index

题目&#xff1a;http://www.lintcode.com/zh-cn/problem/permutation-index/ 排列序号 给出一个不含重复数字的排列&#xff0c;求这些数字的所有排列按字典序排序后该排列的编号。其中&#xff0c;编号从1开始。 样例 例如&#xff0c;排列[1,2,4]是第1个排列。 思路&#xf…