Qt是嵌入式平台常用的GUI库,具有丰富的控件与开发资料。本文介绍如何在x86计算机上搭建ARM开发环境,并交叉编译ARM平台上运行的Demo。

准备

下载交叉编译器

下载Linaro公司推出的的arm-linux-gnueabihf-gcc交叉编译器,放入/opt目录下,具体安装过程可以参考为荔枝派Zero编译可启动Linux系统镜像,并安装编译所需的依赖:

sudo apt install autoconf automake libtool m4 pkg-config

配置Buildroot支持Qt

下载并配置Buildroot。我选择的是Buildroot 2020.2.10版本,这个版本支持的Qt版本为5.12.8

Target packages → Audio and video → alsa-util中,勾选上编译alsa-util,并选择需要的模块。我选中了alsactl alsamixer amixer aplay/arecord 这些模块。

接下来,在Target packages → Libraries → Hardware handling中勾选上tslib的支持。

最后,在Target packages → Graphic libraries and applications (graphic/text) → Qt5下选择需要的模块。我选择了qt5base gui module → widgets module gui module → linuxfb support GIF support JPEG support PNG support Enable Tslib support,并配置Default graphical platformlinuxfb

编译ALSA

buildroot2020.02/dl中解压Buildroot下载好的alsa-lib源码。Buildroot 2020.02所使用的alsa lib版本为1.2.1.2

tar -jxf alsa-lib-1.2.1.2.tar.bz2 -C ~/code/arm_source

对源码进行配置,然后编译并安装:

./configure --host=arm-linux-gnueabihf --disable-python \
--prefix=/home/wangyz/code/arm_install/alsamake -j6 && make install

编译tslib

buildroot2020.02/dl中解压Buildroot下载好的tslib源码:

tar -xf tslib-1.21.tar.xz -C ~/code/arm_source

对源码进行配置,然后编译并安装:

./autogen.sh./configure -host=arm-linux-gnueabihf \
-prefix=/home/wangyz/code/arm_install/tslibmake -j6 && make install

安装Qt

为了能够在x86计算机上开发并生成ARM平台的Qt程序,一共需要安装3份Qt:

  • x86架构的Qt,用于在x86主机上开发(使用Qt官方安装包直接安装二进制版本)
  • ARM架构的Qt,用于Qt程序在开发板上运行(使用Buildroot编译并放入开发板的根文件系统中)
  • x86架构的ARM编译环境,用于在x86主机上编译生成开发板上的Qt程序(使用Qt源码交叉编译得到,其包含一份与开发板上相同的环境以及在x86主机上运行的qmake

其中第二条的ARM架构的Qt已经在前面Buildroot中编译完成了,现在介绍剩下两种的安装方法。

在主机上安装Qt

从Qt官网上下载与Buildroot内置Qt版本相同的二进制安装包。这里我使用的是与Buildroot 2020.2.10内置Qt版本相同的5.12.8版本,可以从下载得到。

双击下载得到的qt-opensource-linux-x64-5.12.8.run文件,根据图形指引安装即可。不要忘记勾选安装源代码,我们将使用这个源代码编译x86架构的ARM编译环境。

勾选安装源码

配置主机Qt交叉编译环境

主机中的环境可以使用Buildroot编译时使用的环境或自行编译安装。

编译安装

从Qt的安装路径复制一份代码包到源码目录。

cp ~/Qt5.12.8/5.12.8/Src ~/code/arm_source/qt5.12.8 -r

由于使用了自定义的编译器,因此需要对Qt的编译脚本做出一些修改。打开qt5.12.8/qtbase/mkspeces/linux-arm-gnueabi-g++/qmake.conf,将其中所有的arm-linux-gnueabi改为arm-linux-gnueabihf

配置Makefile:

./configure -release -opensource -recheck-all \
-prefix /home/wangyz/code/arm_install/qt5.12.8 \
-no-opengl -nomake tests -nomake examples \
-xplatform linux-arm-gnueabi-g++ \
-I/home/wangyz/code/arm_install/tslib/include \
-L/home/wangyz/code/arm_install/tslib/lib \
-I/home/wangyz/code/arm_install/alsa/include \
-L/home/wangyz/code/arm_install/alsa/lib

其中,-opensource是编译开源版本的Qt,由于嵌入式CPU不含GPU,因此不需要OpenGL相关的功能,使用-no-opengl禁用Qt对于OpenGL的支持,同时也需要使用-nomake tests -nomake examples关闭对测试和示例程序的编译,因为其中会包含一些代码引用OpenGL导致整个项目编译失败。-xplatform是指定qmake所使用的编译方案,也就是前面修改的qtbase/mkspeces/linux-arm-gnueabi-g++/qmake.conf。最后,连接刚刚编译好的tslibalsa即可。

在执行configure脚本时,会询问是否同意协议,y回车同意即可。


配置完成后,编译并安装代码。这需要一段时间。

make -j12 V=s && make install

注意

在安装好之后就不要移动安装与源码位置了,qmake依赖绝对路径,若必须移动位置,可以修改qmake的配置文件或者重新编译,这里不详细展开。

使用Buildroot提供的环境

Buildroot编译Qt的过程中,自然也需要一套交叉编译环境。若不愿自己再编译一遍交叉编译环境,可以直接使用Qt编译过程中所使用的环境。Buildroot目录下的output/build/qt5base-5.12.8/qmake/qmake即为所需要的交叉编译环境。

警告

Buildroot所使用的环境随着清理等操作,存在失效的风险。

在开发板上运行Demo

完成上述步骤,我们已经有了一套完整的的开发环境。接下来,可以打开Qt Creator尝试编译一个Demo并下载到开发板运行了。

打开Qt Creator,打开一个实例。这里我选择Animated Tiles Example作为示例。

打开项目后,首先需要对项目进行配置。默认的项目已经配置好了在PC上运行的环境,现在需要将适用于arm的构建套件加入。点击Manage Kits...按钮,进入构建套件配置。在配置中,可以看到自动检测到了PC上的构建套件。点击右边的添加按钮,新建一个配置。配置的名称可以随便填写,这里我填写Embedded Qt %{Qt:Version} ARMv7 32bit,设备类型选择通用Linux设备

接下来配置编译器与qmake。可以看到,上图中编译器仍为x86的编译器,点击右边的Manage按钮,然后分别点击右边的添加按钮,分别添加GCC - CGCC - C++两个编译器,分别命名为arm-linux-gnueabihf-gccarm-linux-gnueabihf-g++,并分别指向/opt/arm-linux-gnueabihf-gcc/bin/arm-linux-gnueabihf-gcc/opt/arm-linux-gnueabihf-gcc/bin/arm-linux-gnueabihf-g++。然后回到构建套件选项卡,分别选择C与C++的编译器为刚刚配置的。

添加编译器

接下来,点击Qt版本后面的Manage按钮,点击右边的添加,选择一个qmake可执行文件。我的在/home/wangyz/code/arm_install/qt5.12.8/bin/qmake下,此处也可以使用Buildroot的环境,只需要更改qmake的路径即可。版本名称我取为Qt %{Qt:Version} ARMv7 32bit。同样,回到构建套件界选项卡,选择刚刚添加的Qt版本。

添加构建套件

这样,针对arm平台的构建套件便配置完毕。点击确定关闭选项窗口,在配置工程的界面勾上新增的Qt 5.12.8 ARMv7 32bit套件并点击配置工程按钮,即可配置工程同时用于PC以及开发板。

配置工程

可以先在左下角的目标选择按钮中选择PC端,点击运行按钮,即可看到Demo在PC端运行的效果。

Animated Tiles演示

如果编译过程报错,可能是因为未安装OpenGL支持,可以使用下面的命令安装。

sudo apt install libgl1-mesa-dev

然后,再选择arm_v7的目标,点击编译(没有配置开发板的远程连接,因此无法直接运行),待构建完毕生成可执行文件后,将/home/wangyz/Qt5.12.8/Examples/Qt-5.12.8/widgets/animation/build-animatedtiles-Embedded_Qt_5_12_8_ARMv7_32bit-Release下的可执行文件复制到开发板,即可查看在开发板上运行的效果。

选择arm_v7作为目标

值得注意的是,若程序可以运行,但是没有字体显示,则需要拷贝一个ttf格式的字体到/lib/fonts/下,重启程序,即可正确显示字体。或者,也可以在Buildroot的Qt编译设置中,选中fontconfig support,再在Target packages → Fonts, cursors, icons, sounds and themes中选择一款你喜欢的字体,将字体直接加入Buildroot生成的镜像中。

在开发板上运行的效果

在Linux下搭建嵌入式Qt交叉编译环境[转载]相关推荐

  1. 17.2 搭建嵌入式QT运行环境

    17.2 搭建嵌入式QT运行环境 17.2.1采用的嵌入式开发板介绍 嵌入式开发板: 采用友善之臂Tiny4412 Tiny4412开发板的内核.uboot.交叉编译器 均采用友善之臂光盘自带的包. ...

  2. Linux 下搭建 Java Web 开发环境

    Linux 下搭建 Java Web 开发环境 我的小站.Github Java Web,是用Java技术来解决相关web互联网领域的技术栈,下方为 Linux 下搭建 Java Web 开发环境教程 ...

  3. 在linux下搭建git环境,在linux下搭建git github开发环境

    在linux下搭建git github开发环境 github git linux 1.安装git sudo apt-getinstall git 2.Generating SSH keys 2.1.g ...

  4. 【嵌入式linux】linux上搭建嵌入式QT环境

    嵌入式QT是嵌入式产品中常用的GUI,其实更像是一个C++图形库,但是可以跨平台使用,我们可以在windows开发QT程序,然后将QT程序移植到开发板上,大大方便了应用层工程师的开发.QT lib是连 ...

  5. 64位Ubuntu 12.04下搭建嵌入式Qt(4.8.6)、QtCreator、qvfb过程全记录

    最新公司搞一个新项目,需要在Linux下进行UI界面设计.选来选去,最后选择采用Qt平台来做,于是要开始研究一下Qt. Qt作为业内最著名的UI开发工具之一,是一套完整的跨平台C++图形用户界面应用程 ...

  6. linux下搭建游戏服务器运行环境

    最近一直只在搭建公司游戏服务器的运行环境. ps背景:  使用java开发,之前一直都是在window环境下开发的,现在要将项目部署到linux环境下 ,所以历程缓慢啊... 说说过程中都遇到啥吧! ...

  7. Linux下搭建asp.net运行环境

    最近有个项目,是在Windows平台下开发的,需要把 asp.net web应用移植到 CentOS下,甚是头疼: 翻阅资料,发现Jexus是个可行的方案,下面是官方对Jexus的定义: 什么是Jex ...

  8. Ubuntu20.04下 嵌入式 Qt 开发环境的搭建(适用于Tiny6410)

    Ubuntu 下 Tiny6410 嵌入式 Qt 开发环境的搭建 目录导航 Ubuntu 下 Tiny6410 嵌入式 Qt 开发环境的搭建 前言 1.安装前的准备工作 2.安装交叉编译器 3.安装t ...

  9. 在Linux下搭建 miniGUI mStudio环境

    嵌入式环境搭建准备工作 Linux操作系统:ubuntu 8.04 准备好mStudio 安装文件和运行mStudio的第三方软件 在Eclipse官方网站http://www.eclipse.org ...

最新文章

  1. 黄峥为何放手拼多多?数据揭秘电商平台布局背后逻辑
  2. 吴恩达 coursera AI 专项三第一课总结+作业答案
  3. 近20万奖金:天池异常检测大赛来了!
  4. 6个精心整理的资源网站,送给正在努力的你
  5. sublime-cssrem-安装与使用
  6. 行星齿轮设计_行星减速机内部结构图与传动原理
  7. 转载 webstrom识别 React语法
  8. 一个hitbernate配置文件,带几个表(注意mapping);如果连接字符串没有设置utf-8,向insert mysql 会产生乱码(utf8 或 utf-8)...
  9. [USACO08NOV]奶牛混合起来Mixed Up Cows
  10. android mat分析,android内存泄露MAT分析心得与注意点
  11. 常用视频播放器插件汇总
  12. oracle学习札记72
  13. cisco思科交换机的基本使用
  14. Unity 关于双叶高光(Dual lobe Specular)
  15. 2020年,最优秀的大数据公司有哪些?
  16. Java 基础.JDK 和 JRE 有什么区别
  17. C1认证学习五(HTTP)
  18. 吼 困 鸭
  19. 一天学会MYSQL数据库_笔记
  20. 项目管理软件Microsoft Project 2019和 Visio 2019下载

热门文章

  1. Java Web中动态网页开发基础重点总结
  2. 东华大学2021考研基本练习题91~120
  3. UMFPACK的使用
  4. IIS部署服务访问C盘权限不足问题处理
  5. 自定义 Discuz 样式
  6. 简单直接了解沉浸式状态栏
  7. Map集合中获取key-value值的方法
  8. 剑三千岛湖服务器是不是维护了,剑网3千岛湖公共事件 温泉抗倭图文教学
  9. Android如何使用Camera2拍照【简易快速上手篇】
  10. 2017年电大计算机应用统考题,[2017年电大]2017年电大网考计算机应用基础统考试题.doc...