0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

ElfBoard技术贴|如何在ELF 1开发板上交叉移植Qt

ElfBoard 2025-02-24 16:18 次阅读

嵌入式系统开发领域,针对特定硬件平台进行Qt框架的移植与适配是一项关键技术任务。作为业界主流的跨平台应用开发框架,Qt凭借其完善的图形界面支持能力,在嵌入式开发图形界面应用程序中占据重要地位。本文将基于ELF 1开发板详细阐述Qt 5.12 版本的交叉编译与系统移植方案。

1、源码下载
Qt5.12可在Qt官网或者GitHub等下载,以下为GitHub链接:https://github.com/zhoujun59761/qtsrc512

2、源码配置修改

(1)解压源码包并设置权限

elf@ubuntu:~/work$ unzip qtsrc512-master.zip elf@ubuntu:~/work$ chmod 777 -R qtsrc512-master(设置最大权限,避免编译时权限问题) elf@ubuntu:~/work$ cd qtsrc512-master/

(2)修改qmake.conf配置文件

由于ELF 1开发板是 ARM 架构,所以需要修改 qmake.conf 文件以适应交叉编译环境。编辑文件路径为 qtbase/mkspecs/linux-arm-gnueabi-g++/qmake.conf,并进行如下修改。

elf@ubuntu:~/work/qtsrc512-master$ 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 include(../common/linux.conf) include(../common/gcc-base-unix.conf) include(../common/g++-unix.conf) # modifications to g++.conf QMAKE_CC = arm-poky-linux-gnueabi-gcc -march=armv7ve -mfpu=neon -mfloat-abi=hard -mcpu=cortex-a7 --sysroot=/opt/fsl-imx-x11/4.1.15-2.0.0/sysroots/cortexa7hf-neon-poky-linux-gnueabi QMAKE_CXX = arm-poky-linux-gnueabi-g++ -march=armv7ve -mfpu=neon -mfloat-abi=hard -mcpu=cortex-a7 --sysroot=/opt/fsl-imx-x11/4.1.15-2.0.0/sysroots/cortexa7hf-neon-poky-linux-gnueabi QMAKE_LINK = arm-poky-linux-gnueabi-g++ -march=armv7ve -mfpu=neon -mfloat-abi=hard -mcpu=cortex-a7 --sysroot=/opt/fsl-imx-x11/4.1.15-2.0.0/sysroots/cortexa7hf-neon-poky-linux-gnueabi QMAKE_LINK_SHLIB = arm-poky-linux-gnueabi-g++ -march=armv7ve -mfpu=neon -mfloat-abi=hard -mcpu=cortex-a7 --sysroot=/opt/fsl-imx-x11/4.1.15-2.0.0/sysroots/cortexa7hf-neon-poky-linux-gnueabi 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 QMAKE_LDFLAGS = -Wl,-O1 -Wl,--hash-style=gnu -Wl,--as-needed -Wl,-z,relro,-z,now # modifications to linux.conf QMAKE_AR = arm-poky-linux-gnueabi-ar cqs QMAKE_OBJCOPY = arm-poky-linux-gnueabi-objcopy QMAKE_NM = arm-poky-linux-gnueabi-nm -P load(qt_config)

wKgZPGe8KI-ASSOIAAGWnoe7dps892.pngwKgZO2e8KZCATJ99AACbt5R82WA802.png

3、交叉编译

(1)编写编译脚本

由于 configure 生成 Makefile 时需要大量参数,可以编写一个脚本保存这些配置。首先创建脚本文件 shell.sh。

elf@ubuntu:~/work/qtsrc512-master$ touch shell.sh elf@ubuntu:~/work/qtsrc512-master$ chmod 777 shell.sh

在 shell.sh 中填入以下内容(-prefix 后面的路径需要根据实际情况修改)。

./configure -prefix /home/elf/work/qtsrc512-master/__install \ -opensource \ -confirm-license \ -release \ -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 qtxmlpatterns \ -make libs \ -make examples \ -nomake tools -nomake tests \ -gui \ -widgets \ -dbus-runtime \ --glib=no \ --iconv=no \ --pcre=qt \ --zlib=qt \ -no-openssl \ --xcb=qt \ --freetype=qt \ --harfbuzz=qt \ -no-opengl \ --libpng=qt \ --libjpeg=qt \ --sqlite=qt \ -plugin-sql-sqlite \ -recheck-all \ -no-strip

(2)执行环境变量

elf@ubuntu:~/work/qtsrc512-master$ . /opt/fsl-imx-x11/4.1.15-2.0.0/environment-setup-cortexa7hf-neon-poky-linux-gnueabi

(3)编译

运行脚本并进行编译。

elf@ubuntu:~/work/qtsrc512-master$ ./shell.sh

执行脚本可能会出现以下错误。

+ cd qtbase + /home/elf/work/qtsrc512-master/qtbase/configure -top-level -prefix /home/elf/work/qtsrc512-master/__install -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 qtxmlpatterns -make libs -make examples -nomake tools -nomake tests -gui -widgets -dbus-runtime --glib=no --iconv=no --pcre=qt --zlib=qt -no-openssl --xcb=qt --freetype=qt --harfbuzz=qt -no-opengl --libpng=qt --libjpeg=qt --sqlite=qt -plugin-sql-sqlite -recheck-all Please make sure to unset the QMAKESPEC, XQMAKESPEC, QMAKEPATH, and QMAKEFEATURES environment variables prior to building Qt.

这是因为Ubuntu中已经有Qt的环境了,如需解决可以参考提示执行如下命令。

elf@ubuntu:~/work/qtsrc512-master$ unset QMAKESPEC XQMAKESPEC QMAKEPATH QMAKEFEATURES

继续执行shell.sh脚本。

elf@ubuntu:~/work/qtsrc512-master$ ./shell.sh elf@ubuntu:~/work/qtsrc512-master$ make elf@ubuntu:~/work/qtsrc512-master$ make install

编译完成后,__install 文件夹包含了 Qt 5.12 所需的所有文件。

elf@ubuntu:~/work/qtsrc512-master$ cd __install/ elf@ubuntu:~/work/qtsrc512-master/__install$ ls bin doc examples include lib mkspecs plugins qml

其中,lib文件夹为所需的lib库,examples文件夹为demo工程。

4、功能测试

(1)打包Qt文件夹

将编译生成的文件打包。

elf@ubuntu:~/work/qtsrc512-master/__install$ tar -cjvf qt5.12.tar.bz2 *

(2)解压至开发板

将打包后的文件放到U盘,拷贝至开发板并解压。

root@ELF1:~# tar -mxvf qt5.12.tar.bz2 -C /

(3)执行环境变量

在开发板上设置环境变量,确保 Qt 正常运行。其中export QT_ROOT=/ 为qt5.12文件相关的路径(填解压的路径)。

export QT_ROOT=/ export QT_QPA_FONTDIR=/usr/share/fonts export QT_QPA_PLATFORM_PLUGIN_PATH=$QT_ROOT/plugins 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_PLATFORM=linuxfb:tty=/dev/fb0 //采用Linuxfb显示框架 export QT_QPA_PLATFORM=xcb:tty=/dev/fb0 //采用x11显示框架


(4)运行示例应用

Linuxfb显示框架运行 Qt 的示例应用进行功能测试。

root@ELF1:~# /examples/charts/areachart/areachart

效果如下:

wKgZO2e8KtKAWDzCAACaFlaM06Y953.png

X11 显示框架运行 Qt 的示例应用进行功能测试。

root@ELF1:~# export DISPLAY=:0.0 root@ELF1:~# /examples/charts/areachart/areachar

效果如下:

wKgZO2e8KtuALgrYAABbL8jnvyI333.png

经过上述一系列步骤就可以顺利地将Qt 5.12版本交叉编译并成功移植至ELF 1开发板。衷心希望本文能为屏幕前的小伙伴在嵌入式开发领域的Qt移植工作带来实质性的帮助与指导!

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    6057

    文章

    44807

    浏览量

    644172
  • 嵌入式
    +关注

    关注

    5122

    文章

    19422

    浏览量

    312696
  • 开发板
    +关注

    关注

    25

    文章

    5377

    浏览量

    100613
  • Qt
    Qt
    +关注

    关注

    1

    文章

    311

    浏览量

    38594
收藏 人收藏

    评论

    相关推荐

    何在嵌入式Linux开发板上配置Qt运行环境

    本文基于I.MX6ULL芯片的Linux开发板,介绍如何在嵌入式Linux开发板上配置Qt运行环境,并运行Qt程序进行测试
    发表于 10-10 09:56 2795次阅读

    ElfBoard技术|如何在NXP源码基础上适配ELF 1开发板的UART功能

    UART即通用异步收发器,是一种支持全双工串行通信协议的接口。在i.MX6ULL处理器平台上,该处理器原生支持多达8路的UART接口,提供了丰富的串行通信能力。 针对ELF 1开发板,实际引出
    的头像 发表于 09-25 13:56 2599次阅读
    <b class='flag-5'>ElfBoard</b><b class='flag-5'>技术</b><b class='flag-5'>贴</b>|如<b class='flag-5'>何在</b>NXP源码基础上适配<b class='flag-5'>ELF</b> <b class='flag-5'>1</b><b class='flag-5'>开发板</b>的UART功能

    ElfBoard技术|ELF 1开发板适配摄像头详解

    ELF1ELF1S开发板适配的OV5640摄像头,集成了CMOS图像传感器,作为一款500万像素级别的摄像头,不仅能够支持最高达2592x1944分辨率的QSXGA图像输出,帧率可达15fps
    的头像 发表于 12-27 10:16 1077次阅读
    <b class='flag-5'>ElfBoard</b><b class='flag-5'>技术</b><b class='flag-5'>贴</b>|<b class='flag-5'>ELF</b> <b class='flag-5'>1</b><b class='flag-5'>开发板</b>适配摄像头详解

    飞凌嵌入式ElfBoard ELF 1板卡-在ELF 1开发环境中使用QT Creator进行远程调试

    Qt Creator会通过网络连接到远程设备,将调试信息传输回本地环境。下面将介绍如何在ELF 1开发环境中配置
    发表于 04-30 09:35

    飞凌嵌入式-ElfBoard-项目分享|基于ELF 1S开发板完成的物联网开源项目

    工程师借助ELF 1S开发板完成的嵌入式物联网项目,见证智慧与技术的火花。 关于这个项目的思维导图,如下图所示: 接下来,将会从云-网-边-端的物联网体系架构出发,描述整个开源项目的
    发表于 05-16 09:12

    飞凌嵌入式ElfBoard ELF 1板卡-开发板适配之移植前的准备

    ELF 1开发平台。 获取NXP内核源码 在ELF 1的资料包当中已经提供了下载好的NXP原厂sdk:
    发表于 01-21 14:30

    技术分享 | i.MX8M Plus开发板交叉编译qt5.15.2

    为了满足客户在启扬i.MX8MPlus开发板使用过程中编译qt版本的需求,这里小编出一期关于i.MX8MPlus开发板交叉编译qt5.15.
    的头像 发表于 11-18 09:35 1863次阅读
    <b class='flag-5'>技术</b>分享 | i.MX8M Plus<b class='flag-5'>开发板</b><b class='flag-5'>交叉</b>编译<b class='flag-5'>qt</b>5.15.2

    ELF 1技术|在NXP源码基础上适配ELF 1开发板的LED功能

    本次源码适配工作是在NXPi.MX6ULLEVK评估的Linux内核源码(特定版本:Linux-imx_4.1.15)基础上进行的。主要目标是调整功能接口引脚配置,以适应ELF1开发板。下面以
    的头像 发表于 12-29 10:04 1048次阅读
    <b class='flag-5'>ELF</b> <b class='flag-5'>1</b><b class='flag-5'>技术</b><b class='flag-5'>贴</b>|在NXP源码基础上适配<b class='flag-5'>ELF</b> <b class='flag-5'>1</b><b class='flag-5'>开发板</b>的LED功能

    如何将Go程序编译到ELF 1开发板

    编译并运行在ELF1开发板上的。一、在GoLand中配置(一)配置SSH连接Ubuntu虚拟机以及ELF1开发板1、打开GoLand的设置选
    的头像 发表于 01-29 10:42 668次阅读
    如何将Go程序编译到<b class='flag-5'>ELF</b> <b class='flag-5'>1</b><b class='flag-5'>开发板</b>

    ELF 1技术|如何移植Boa 到开发板

    Boa作为Web服务解决方案显得尤为适宜。接下来,将跟各位小伙伴详细介绍一下基于ELF1开发板移植Boa的方法。1、Boa官网下载源码官网网址:Boadownlo
    的头像 发表于 02-04 09:30 506次阅读
    <b class='flag-5'>ELF</b> <b class='flag-5'>1</b><b class='flag-5'>技术</b><b class='flag-5'>贴</b>|如何<b class='flag-5'>移植</b>Boa 到<b class='flag-5'>开发板</b>上

    ELF 1技术|如何将Python3.6.9移植开发板

    如何进行交叉编译并移植ELF1开发板上。在网址:https://www.python.org/ftp/python/下载Python-3.6.9.tar.xz压缩
    的头像 发表于 02-22 14:06 587次阅读
    <b class='flag-5'>ELF</b> <b class='flag-5'>1</b><b class='flag-5'>技术</b><b class='flag-5'>贴</b>|如何将Python3.6.9<b class='flag-5'>移植</b>到<b class='flag-5'>开发板</b>上

    ELF技术|如何在开发板上实现对Java的支持

    Java作为一种功能强大且广泛应用的编程语言,具有广泛的适应性和实用性。在ELF1开发板上集成Java支持,无疑将赋予嵌入式开发者更广阔的选择空间,今天就为各位小伙伴详细解析如何在
    的头像 发表于 03-13 16:47 633次阅读
    <b class='flag-5'>ELF</b><b class='flag-5'>技术</b><b class='flag-5'>贴</b>|如<b class='flag-5'>何在</b><b class='flag-5'>开发板</b>上实现对Java的支持

    elfboard配置交叉编译

    elfboard开发板上手
    的头像 发表于 05-26 11:17 416次阅读

    ElfBoard技术|在NXP源码基础上适配ELF 1开发板的按键功能

    本次源码适配工作是在NXPi.MX6ULLEVK评估的Linux内核源码(特定版本:Linux-imx_4.1.15)基础上进行的。主要目标是调整功能接口引脚配置,以适应ELF1开发板。接下来
    的头像 发表于 07-10 09:54 800次阅读
    <b class='flag-5'>ElfBoard</b><b class='flag-5'>技术</b><b class='flag-5'>贴</b>|在NXP源码基础上适配<b class='flag-5'>ELF</b> <b class='flag-5'>1</b><b class='flag-5'>开发板</b>的按键功能

    ElfBoard技术|如何在ELF 1开发板上搭建流媒体服务器

    流媒体服务器是一种专门用于传输实时数据流的服务器软件,广泛用于视频直播、视频会议、音频播放等应用场景。在嵌入式开发领域,将流媒体服务器部署到开发板上可以实现诸如视频监控、实时数据传输等功能。本文将介绍如何利用nginx和其rtmp流媒体模块,在
    的头像 发表于 08-20 14:48 773次阅读
    <b class='flag-5'>ElfBoard</b><b class='flag-5'>技术</b><b class='flag-5'>贴</b>|如<b class='flag-5'>何在</b><b class='flag-5'>ELF</b> <b class='flag-5'>1</b><b class='flag-5'>开发板</b>上搭建流媒体服务器