目录

  • (一) 环境准备
  • (二) 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版本的


选择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

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

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

将上面的字体拷贝到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年维护的):

移植QT到tiny4412开发板相关推荐

  1. 迅为4412开发板一键烧写QT程序到开发板

    之前我们写好一个程序,都是先交叉编译完,然后在通过 nfs/tftp 或者其他的方法拷贝到开发板,然后在手动执行,如果我们调试程序很频繁,那我们每次都重新拷贝到开发板,那这样就太麻烦了,有没有方便一点 ...

  2. imx6q 开发板_mplayer移植-迅为IMX6Q开发板

    0 1 mplayer简介 mplayer是一款开源多媒体播放器,以gnu通用公共许可证发布.它资源占用率低,无论是音频还是视频方面,支持的格式相当全面,支持的输出设备也很多,可以在各种主流操作系统中 ...

  3. mysql移植海思_live555 交叉编译移植到海思开发板

    1.首先到它的主页下载一个源码包: http://www.live555.com/liveMedia/public/ 我下载的是latest的,具体什么版本还真不清楚 2.放到linux目录下解压: ...

  4. tiny4412开发板LED灯驱动写法

    简介 led灯成本很低,操控简单,在嵌入式产品中不可或缺,可以作为调试标识,状态指示等等,高级用法还可以作为呼吸灯进一步增强其美观性.本章介绍只控制led灯的亮灭,tiny4412开发板有四个LED灯 ...

  5. tiny4412开发板实现uboot引导启动android 5.0.2系统

    1目的 实现uboot引导启动android 5.0.2系统. 2 现有环境 友善之臂tiny 4412开发板,superboot引导启动android5.0.2系统,内核版本为linux3.0.8. ...

  6. [长文干货]MicroPython移植到野火STM32F429开发板

    最近通过参考网上的文章,成功将MicroPython移植到野火STM32F429开发板上,给大家分享一下自己的移植过程,可以作为STM32系列移植MicroPY的参考. 1.移植前准备工作 实验环境: ...

  7. 物联网操作系统HelloX已成功移植到MinnowBoard MAX开发板上

    在HelloX开发团队的努力下,以及Winzent Tech公司(总部在瑞典斯德哥尔摩)的支持下,HelloX最新版本V1.78已成功移植到MinnowBoard MAX开发板上.相关源代码已经发布到 ...

  8. tiny4412开发板Android篇_2基于tiny4412的Android系统的编译

    tiny4412开发板使用的android系统版本是android5.0.2,由友善之臂公司提供,下载网址: https://pan.baidu.com/s/1pnn6N8Wpsx8PISLmKT59 ...

  9. mplayer移植-迅为IMX6Q开发板

    0 1 mplayer简介        mplayer是一款开源多媒体播放器,以gnu通用公共许可证发布.它资源占用率低,无论是音频还是视频方面,支持的格式相当全面,支持的输出设备也很多,可以在各种 ...

最新文章

  1. oracle增量备份如何恢复,【Oracle】增量备份和全库备份怎么恢复数据库
  2. 遇到问题描述:Android Please ensure that adb is correctly located at问题解决
  3. 为什么深度学习没有取代传统的计算机视觉?
  4. c语言打开文件出现分段故障,c fclose() 导致分段故障_segmentation-fault_开发99编程知识库...
  5. 第三章 ASP.NET MVC (模型绑定)
  6. 有了它,让我在bug面前一点也不慌!
  7. GCD 代码以及GCD思想
  8. 几种数据可视化框架分析
  9. echarts入门教程(超级详细带案例)
  10. windows11(win10大部分通用)系统C盘清理 | 深度优化
  11. 软件设计师中级考试备考资料
  12. 搞懂特征值与特征向量
  13. 20172328《程序设计与数据结构》第六周学习总结
  14. mysql更新加锁_一条简单的更新语句,MySQL是如何加锁的?
  15. Riedel 水晶杯:葡萄酒终极发烧设备
  16. 企业的性质:诺奖得主科斯经典原文翻译及解读1
  17. 全球地名中英文对照表(I-J)
  18. c语言 w 的作用,C语言当中文件W什么意思?
  19. CF489C Given Length and Sum of Digits
  20. 最近标杆型自媒体程苓峰发文章说自己的广告效果多么好

热门文章

  1. apache 统计404日志_Apache监控与调优(四)Apachetop监控
  2. php7 daemon,编译PHP7
  3. VS Code vue 模板
  4. KAFKA 集成 SpringBoot2 消息发送和消费消息(基础篇)
  5. 解决Windows中PLSQL连接虚拟机中Oracle缓慢的问题
  6. PLSQL 设置布局
  7. MySQL 输入任何语句都提示You must reset your password using ALTER USER 解决方法
  8. 第九篇:Spring Boot整合Spring Data JPA_入门试炼05
  9. 从javaScript数据类型开始了解垃圾回收机制
  10. C++中关于隐藏的理解