首页 > 其他分享 >QT之ARM平台的移植

QT之ARM平台的移植

时间:2023-09-27 11:46:13浏览次数:46  
标签:QT skip ARM linux tslib arm 移植 qt

原文: https://www.cnblogs.com/jzcn/p/15201582.html

在开发板中运行QT程序的基本条件是具备QT环境,那么QT的移植尤为重要,接下载我将和小伙伴们一起学习QT的移植。

一、准备材料

  1. tslib源码
  2. qt-everywhere-src-5.12.9.tar.xz源码
  3. arm开发版

二、获取安装包

  1. tslib源码的git获取地址是:https://github.com/libts/tslib
  2. qt-everywhere-src-5.12.9.tar.xz源码的获取地址是:https://download.qt.io/archive/qt/5.12/5.12.9/single/

三、编译tslib

  由于QT触摸需要相应的触摸插件,而嵌入式QT一般使用的都是tslib库,所以在编译QT之前需要将tslib库编译一下,在编译QT时需要用到。

  1. 将tslib源码拷贝至虚拟下进行解压
  tar vxf tslib-1.21.tar.bz2
  cd tslib-1.21
  1. 安装所需软件以免编译时出现错误
  sudo apt-get update
  sudo apt-get install autoconf automake libtool
  1. 生成Makefile
  ./autogen.sh
  1. 配置安装路径
  ./configure --host=arm-linux-gnueabihf ac_cv_func_malloc_0_nonnull=yes --cache-file=arm-linux.cache -prefix=/home/tslib-1.21/arm-tslib

编译并安装

  make
  make install

四、编译QT

  1. qt-everywhere-src-5.12.9.tar.xz源码拷贝至虚拟机并解压
  tar vxf qt-everywhere-src-5.12.9.tar.xz
  cd qt-everywhere-src-5.12.9
  1. 修改 qmake.conf文件
  vi qtbase/mkspecs/linux-arm-gnueabi-g++/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
  QMAKE_CFLAGS += -O2 -march=armv7-a -mtune=cortex-a7 -mfpu=neon -mfloat-abi=hard
  QMAKE_CXXFLAGS += -O2 -march=armv7-a -mtune=cortex-a7 -mfpu=neon -mfloat-abi=hard
   
  include(../common/linux.conf)
  include(../common/gcc-base-unix.conf)
  include(../common/g++-unix.conf)
   
  # modifications to g++.conf
  QMAKE_CC = arm-linux-gnueabihf-gcc
  QMAKE_CXX = arm-linux-gnueabihf-g++
  QMAKE_LINK = arm-linux-gnueabihf-g++
  QMAKE_LINK_SHLIB = arm-linux-gnueabihf-g++
   
  # modifications to linux.conf
  QMAKE_AR = arm-linux-gnueabihf-ar cqs
  QMAKE_OBJCOPY = arm-linux-gnueabihf-objcopy
  QMAKE_NM = arm-linux-gnueabihf-nm -P
  QMAKE_STRIP = arm-linux-gnueabihf-strip
  load(qt_config)
   

  1. 配置编译选项
    可以通过./configure -help查看可配置的选项,由于需要配置的选项比较多,所以新建一个脚本存放配置选项。
  vim autoconfigure.sh
   

文件中的配置内如如下所示:

  ./configure -prefix /home/linux/tool/qt-everywhere-src-5.12.9/arm-qt \
  -opensource \
  -confirm-license \
  -release \
  -strip \
  -shared \
  -xplatform linux-arm-gnueabi-g++ \
  -optimized-qmake \
  -c++std c++11 \
  --rpath=no \
  -pch \
  -skip qt3d \
  -skip qtactiveqt \
  -skip qtandroidextras \
  -skip qtcanvas3d \
  -skip qtconnectivity \
  -skip qtdatavis3d \
  -skip qtdoc \
  -skip qtgamepad \
  -skip qtlocation \
  -skip qtmacextras \
  -skip qtnetworkauth \
  -skip qtpurchasing \
  -skip qtremoteobjects \
  -skip qtscript \
  -skip qtscxml \
  -skip qtsensors \
  -skip qtspeech \
  -skip qtsvg \
  -skip qttools \
  -skip qttranslations \
  -skip qtwayland \
  -skip qtwebengine \
  -skip qtwebview \
  -skip qtwinextras \
  -skip qtx11extras \
  -skip qtxmlpatterns \
  -make libs \
  -make examples \
  -nomake tools -nomake tests \
  -gui \
  -widgets \
  -dbus-runtime \
  --glib=no \
  --iconv=no \
  --pcre=qt \
  --zlib=qt \
  -no-openssl \
  --freetype=qt \
  --harfbuzz=qt \
  -no-opengl \
  -linuxfb \
  --xcb=no \
  -tslib \
  --libpng=qt \
  --libjpeg=qt \
  --sqlite=qt \
  -plugin-sql-sqlite \
  -I/home/tslib-1.21/arm-tslib/include \
  -L/home/tslib-1.21/arm-tslib/lib \
  -recheck-all
   

注意:./configure -prefix /home/linux/tool/qt-everywhere-src-5.12.9/arm-qt 是个人的QT安装路径
-I/home/tslib-1.21/arm-tslib/include \ 是个人的tslib安装路径

  1. 更改脚本执行权限并执行文件
  chmod +x autoconfigure.sh
  ./autoconfigure.sh
  1. 开始编译并安装
  make -j 16
  make install

五、移植tslib和QT到开发版

  1. 将编译生成的arm-tslib文件拷贝到开发版的'/usr/local',路径下并配置环境变量
  export TSLIB_ROOT=/usr/local/arm-tslib
  export TSLIB_CONSOLEDEVICE=none
  export TSLIB_FBDEVICE=/dev/fb0
  export TSLIB_TSDEVICE=/dev/input/event1
  export TSLIB_CONFFILE=$TSLIB_ROOT/etc/ts.conf
  export TSLIB_PLUGINDIR=$TSLIB_ROOT/lib/ts
  export TSLIB_CALIBFILE=/etc/pointercal
  export LD_PRELOAD=$TSLIB_ROOT/lib/libts.so
  1. 将编译生成的arm-qt文件拷贝到开发版的'/usr/local',路径下并配置环境变量
  export QT_ROOT=/usr/local/arm-qt
  export QT_QPA_GENERIC_PLUGINS=tslib:/dev/input/event1
  export QT_QPA_FONTDIR=/usr/share/fonts
  export QT_QPA_PLATFORM_PLUGIN_PATH=$QT_ROOT/plugins
  export QT_QPA_PLATFORM=linuxfb:tty=/dev/fb0
  export QT_PLUGIN_PATH=$QT_ROOT/plugins
  export LD_LIBRARY_PATH=$QT_ROOT/lib:$QT_ROOT/plugins/platforms
  export QML2_IMPORT_PATH=$QT_ROOT/qml
  export QT_QPA_FB_TSLIB=1
   
  1. 使能环境变量
  source /etc/profile
  1. 运行qt的测试案例
  /usr/lib/arm-qt/examples/widgets/animation/animatedtiles/animatedtiles

自己测试的效果如下图示

问题

此方法是适用于制作生成的根文件系统,如果是标准的ubuntu系统时,无需对QT进行移植,因为在ubuntu系统中自带QT的运行环境,直接ubuntu根文件系统的小伙伴可以在路径中'/usr/lib/arm-linux-gnueabihf'查看QT库是否存在。

  ls libQt5*


在路径'/usr/lib/arm-linux-gnueabihf/qt5'中可以看到相关文件

参考文献

tslib移植arm及使用:https://www.cnblogs.com/silencehuan/p/11207996.html
QT5.9移植:https://www.jianshu.com/p/de6b0bc7893c
正点原子的《I.MX6U移植 Qt5.12.9 V1.1》简称手册

本文来自博客园,作者:浇筑菜鸟,转载请注明原文链接:https://www.cnblogs.com/jzcn/p/15201582.html

如本博客的内容侵犯了你的权益,请与以下地址联系,本人获知后,马上删除。同时本人深表歉意,并致以崇高的谢意! [email protected]

  分类: QT

标签:QT,skip,ARM,linux,tslib,arm,移植,qt
From: https://www.cnblogs.com/bruce1992/p/17732320.html

相关文章

  • OpenHarmony装饰指定自定义组件:@BuilderParam装饰器
     当开发者创建了自定义组件,并想对该组件添加特定功能时,例如在自定义组件中添加一个点击跳转操作。若直接在组件内嵌入事件方法,将会导致所有引入该自定义组件的地方均增加了该功能。为解决此问题,ArkUI引入了@BuilderParam装饰器,@BuilderParam用来装饰指向@Builder方法的变量,开......
  • HarmonyOS线性容器特性及使用场景
     线性容器实现能按顺序访问的数据结构,其底层主要通过数组实现,包括ArrayList、Vector、List、LinkedList、Deque、Queue、Stack七种。线性容器,充分考虑了数据访问的速度,运行时(Runtime)通过一条字节码指令就可以完成增、删、改、查等操作。ArrayListArrayList即动态数组,可用来......
  • 使用PyCharm敲出你的第一行python代码
    首先安装python解释器国内镜像https://registry.npmmirror.com/binary.html?path=python/   找到软件开始安装   然后下载python开发工具https://www.jetbrains.com/pycharm/download/download-thanks.html?platform=windows&code=PCC     ......
  • Qt报错: variable has incomplete typte ‘QJsonObject’
    Qt常见运行失败的记录1.变量声明未实例化变量在头文件声明了,没new出来直接使用,导致程序运行崩溃2.定义变量时候下面出行红线,出现variblehasincompletetype‘QTextStream’variblehasincompletetype'QTextStream未添加QTextStream头文件3.Qt信号与槽连接失败的几......
  • qt自定义实体类
    在Qt中,可以创建自己的实体类(EntityClass)来表示应用程序中的数据对象或模型。这些实体类通常用于表示数据、管理数据和进行数据操作。以下是创建Qt自定义实体类的一般步骤:创建一个新的C++类:使用QtCreator或您喜欢的C++集成开发环境,创建一个新的C++类来表示实体。可以选择从QObject......
  • HarmonyOS CPU与I/O密集型任务开发指导
    一、CPU密集型任务开发指导CPU密集型任务是指需要占用系统资源处理大量计算能力的任务,需要长时间运行,这段时间会阻塞线程其它事件的处理,不适宜放在主线程进行。例如图像处理、视频编码、数据分析等。基于多线程并发机制处理CPU密集型任务可以提高CPU利用率,提升应用程序响应速度。......
  • ModBus协议原理、Modbus Slave以及基于C++和Qt的代码实现
    ModBus协议目的:规定与PLC交互的指令,其数据帧包括两部分:报文头(MBAP)和帧结构(PDU)。报文头(MBAP)(分为6个部分):1.事务处理标识:即报文序列号,一般每次通信之后就要加1以区别不同的通信数据报文,长度2字节。2.协议标识符:有串口的RTU协议和TCP协议,如0000表示ModbusTCP......
  • OpenHarmony自定义构建函数:@Builder装饰器
     前面章节介绍了如何创建一个自定义组件。该自定义组件内部UI结构固定,仅与使用方进行数据传递。ArkUI还提供了一种更轻量的UI元素复用机制@Builder,@Builder所装饰的函数遵循build()函数语法规则,开发者可以将重复使用的UI元素抽象成一个方法,在build方法里调用。为了简化语言,我......
  • Qt PLC Modbus通信
    项目介绍有一个项目需要PC和PLC通信,PLC通信协议是Modbus协议。前两天研究了一下,QT源码也有例程,不过源码读了有点懵,参考了别人的博客,实现了一个简单的通信Demo,测试可以对PLC内部寄存器和中间继电器读写。软件版本和程序总览QT:5.12.12Kits:MSVC2017PLC:信捷XD5软件预览:软件介绍......
  • pycharm无法打开终端:open Local Terminal_Failed to start [powershell.exe]
    今天在运行pycharm的时候出现了这个问题openLocalTerminal_Failedtostart[powershell.exe]直接上解决办法1.进入设置2.选择tools下的terminal然后修改shellpath 如果没有的话需要找到本机的powershell的路径然后对其进行修改就能正常运行了  ......