ubuntu 搭建 arm 的 Qt 环境

QT 移植

需要 配置好 arm 的交叉编译工具了

1. tslib

在 arm 中,qt 控制显示屏和触摸屏用的是 tslib,所以需要移植 tslib

编译:

  1. 获得源码后解压(git 地址为 https://github.com/kergoth/tslib)

  2. 进入源码目录

  3. 配置:

    ./configure  --host=arm-linux-gnueabihf   --prefix=$PWD/tslib-arm
    make
    make install
    

2 qt source

  1. 下载 Qt5.12.9 源码(https://download.qt.io/)

    wget https://download.qt.io/archive/qt/5.12/5.12.9/single/qt-everywhere-src-5.12.9.tar.xz

  2. 解压并进入目录

  3. 修改 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)
    
  4. 配置编译选项

    ./configure -prefix /home/luo/tool/qt-everywhere-src-5.12.9/qt-arm \		#根据自己的目录改(设置编译输出路径)
    -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/luo/linux/tool/tslib-1.21/tslib-arm/include \		#根据自己的目录改(tslib 编译输出的头文件路径)
    -L/home/luo/linux/tool/tslib-1.21/tslib-arm/lib \			#根据自己的目录改(tslib 编译输出的库文件路径)
    -recheck-all
    
  5. 赋予 autoconfigure.sh 可执行权限sudo chmod 777 autoconfigure.sh

  6. 执行前先安装 g++sudo apt-get install g++

  7. 执行配置文件./autoconfigure.sh

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-krLCZk5c-1662991417005)(D:\TyporaNote\1 Linux\Linux\mqtt.assets\image-20220911171945747.png)]

  8. 开始编译,执行 make

  9. 开始安装,执行 make install

3 移植到文件系统

将编译好的 tslib 和 qt 移植到开发板上

  1. 烧写文件系统到开发板

    如果 nfs 挂载文件系统,在运行 qt 程序时,可能会网络中断

  2. 移植 tslib 到文件系统

    将编译安装好的 tslib-arm 打包(tar -cjf ./tslib-arm.tar.bz2 tslib-arm),可在烧写文件系统时就将 tslib-arm.tar.bz2 放到文件系统,或者通过 u 盘烤到开发板上,然后将 tslib-arm.tar.bz2 解压到 /usr/lib 下(tar -xjf tslib-arm.tar.bz2 -C /usr/lib)

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ciE4fBF3-1662991417006)(D:\TyporaNote\1 Linux\Linux\mqtt.assets\image-20220911174125101.png)]

    配置 tslib 环境变量:

    1. 打开/etc/ts.conf文件,找到下面这一行:module_raw input,如果有注释,就去掉

    2. 打开/etc/profile 文件,在里面加入如下内容:

      export TSLIB_ROOT=/usr/lib/tslib-arm
      export TSLIB_TSDEVICE=/dev/input/event1 #表示触摸设备文件,这里设置为/dev/input/event1,这个要根据具体情况设置
      export TSLIB_CALIBFILE=/etc/pointercal #表示校准文件,如果进行屏幕校准的话校准结果就保存在这个文件中,这里设置校准文件为/etc/pointercal,此文件可以不存在,校准的时候会自动生成。
      export TSLIB_CONFFILE=/etc/ts.conf #触摸配置文件,文件为/etc/ts.conf,此文件在移植 tslib 的时候会生成。
      export TSLIB_PLUGINDIR=/lib/ts #表示 tslib 插件目录位置,目录为/lib/ts。
      export TSLIB_CONSOLEDEVICE=none #表示控制台设置,这里不设置,因此为 none
      export TSLIB_FBDEVICE=/dev/fb0	#屏幕驱动文件
      

    测试:

    source /etc/profile 	# 使能环境变量
    ./usr/lib/tslib-arm/bin/ts_test_mt  # 运行 ts_test 测试触摸是否正常,点击界面的Draw测试
    

  3. 移植 Qt

    将编译安装好的 qt-arm 打包(tar -cjf ./qt-arm.tar.bz2 qt-arm),可在烧写文件系统时就将 qt-arm.tar.bz2 放到文件系统,或者通过 u 盘烤到开发板上,然后将 qt-arm.tar.bz2 解压到 /usr/lib 下(tar -xjf qt-arm.tar.bz2 -C /usr/lib)

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6UZHH8EN-1662991417007)(D:\TyporaNote\1 Linux\Linux\mqtt.assets\image-20220911174125101.png)]

    配置 qt 环境变量:

    1. 打开/etc/profile 文件,在里面加入如下内容:

      export QT_ROOT=/usr/lib/qt-arm
      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_PATH=$QT_ROOT/qml
      export QT_QPA_FB_TSLIB=1
      

    测试:

    source /etc/profile 	# 使能环境变量
    ./usr/lib/qt-arm/examples/widgets/animation/animatedtiles/animatedtiles
    

3 搭建 ARM 平台的 Qt Creator

要用带桌面的 Linux,不然运行 Qt Creator 会有麻烦

  1. 下载 Qt Creator

    wget http://download.qt.io/archive/qt/5.12/5.12.9/qt-opensource-linux-x64-5.12.9.run

  2. 赋予可执行权限,然后运行

    chmod 777 qt-opensource-linux-x64-5.12.9.run 
    sudo ./qt-opensource-linux-x64-5.12.9.run # 建议加 sudo,否则安装在当前目录下。
    
  3. 不出意外,会出现安装 Qt 的界面

  4. 勾选安装选项时,除了 android 的,其他都选上

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8iXTbBRG-1662991417007)(D:\TyporaNote\1 Linux\Linux\mqtt.assets\image-20220911195737685.png)]

  5. 运行 Qt

    可用 命令行(/opt/Qt5.12.9/Tools/QtCreator/bin/qtcreator.sh &

    可用图形界面

  6. 配置 ARM 平台的Qt Creator Kits

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6vtOtRIz-1662991417008)(D:\TyporaNote\1 Linux\Linux\mqtt.assets\image-20220911195953982.png)]

    1. 配置 qmake

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Qg9f5aoc-1662991417009)(D:\TyporaNote\1 Linux\Linux\mqtt.assets\image-20220911200137564.png)]

    2. 配置 C++ 编译器

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XGdgntcs-1662991417010)(D:\TyporaNote\1 Linux\Linux\mqtt.assets\image-20220911200700971.png)]

    3. 配置 Kits

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dwZlr76H-1662991417011)(D:\TyporaNote\1 Linux\Linux\mqtt.assets\image-20220911200924080.png)]

  7. 配置完成

Qt 编程

  1. 配置好网络接口,可利用 tftp 下载文件

    用以太网接口,在板子上配置好 tftp,即可用 tftp 下载编译好的可执行文件(tftp -g -r filename 192.168.19.19),会下载到当然目录

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7qR1hUa4-1662991417012)(D:\TyporaNote\1 Linux\Linux\mqtt.assets\image-20220911201337738.png)]

  2. 用可视化 ui 界面可以根据显示屏的大小先调整好

  3. 在 Qt creator 编程时,在 ubuntu 上不能运行,只能编译出可执行文件

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ksHqKPnw-1662991417012)(D:\TyporaNote\1 Linux\Linux\mqtt.assets\image-20220911201816557.png)]

  • 0
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值