1  开发环境

  • 目标版:FS4412(Cortex-A9)开发板
  • 交叉工具链:arm-linux-gcc 4.6.4 版本
  • Qt:qt-everywhere-opensource-src-5.4.2.tar.xz
  • Linux:Ubuntu 16.04

2  QT源码配置、编译及安装

这里以 QT5.4.2 版本为例,在 Qt 官网下载 qt-everywhere-opensource-src-5.4.2.tar.xz 文件。

(1)解压:

# .tar.xz

(2)备份 qmake 配置文件:

# cp -a qtbase/mkspecs/linux-arm-gnueabi-g++/ qtbase/mkspecs/linux-arm-g++/

(3)修改 qmake 配置文件,指定交叉工具链:

# vim qtbase/mkspecs/linux-arm-g++/qmake.conf

将配置文件中所有的 arm-linux-gnueabi 都替换为 arm-linux。

(4)编辑一个自动配置的脚本文件(如 config.sh)存放在源码顶层目录下,并添加可执行权限。内容如下:

#!/bin/bash
./configure -release -opensource -confirm-license -qt-sql-sqlite -no-sse2 -no-sse3 -no-ssse3 -no-sse4. -no-sse4. -no-avx -no-avx2 -no-mips_dsp -no-mips_dspr2 -no-pkg-config -qt-zlib -qt-libpng -qt-libjpeg -qt-freetype -no-openssl -qt-pcre -qt-xkbcommon -no-glib -nomake examples -nomake tools -nomake tests -no-cups -no-iconv -no-dbus -xplatform linux-arm-g++ -no-use-gold-linker -qreal float
exit 

(5)执行配置:

# ./config.sh

配置成功后,会在最后打印如下信息:

Qt is now configured for building. Just run 'make'.
Once everything is built, you must run 'make install'.
Qt will be installed into /usr/local/Qt-5.4.2
Prior to reconfiguration, make sure you remove any leftovers from
the previous build.

(6)编译以及安装:

# make
# make install

因为没有在配置中指定安装路径,所以使用的是默认的安装路径,即 /usr/local/Qt-5.4.2/。

3  在根文件系统中添加 Qt

(1)进入根文件系统目录,把安装好的Qt目录下的所有内容拷贝到根文件系统中:

# cd /home/rootfs/rootfs-fs4412
# mkdir usr/local
# / usr/local/

(2)然后编辑 etc 目录下的 profile 文件:

# Qt环境
export QTDIR=/usr/local/Qt-5.4.2
# 指定字体的路径
export QT_QPA_FONTDIR=$QTDIR/lib/fonts
# 指定插件的路径
export QT_QPA_PLATFORM_PLUGIN_PATH=$QTDIR/plugins
# 指定QT运行的平台,linuxfb指定帧缓存设备,size指定设备的分辨率,tty指定非GUI程序使用的tty
export QT_QPA_PLATFORM=linuxfb:fb=/dev/fb0:size=1024x600:tty=/dev/ttySAC2
export PATH=$QTDIR/bin:$PATH
# 指定Qt库路径
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH$QTDIR:$QTDIR/lib

4  安装 Qt 集成开发环境 

Qt 的集成开发环境以 qt-opensource-linux-x64-5.4.2.run 为例。

(1)运行安装包:

# ./qt-opensource-linux-x64-.run

(2)指定安装路径:

(3)一路采取默认,至此,安装完成:

【温馨提示】在编译 Qt 代码时可能出现“error: GL/gl.h: No such file or directory”错误,需要使用下面命令安装库:

# apt-get install libqt4-dev

 5  添加 ARM 平台的构建环境

Qt集成开发环境安装后,默认只有PC机上的构建环境,需要手动添加 ARM 平台上的构建环境。

(1)指定 Qt 版本,选择“工具”->“选项”(增加qmake)

(2)指定编译器:

(3)增加构建套件:

设置完成后,点击“0K”,完成配置工作。

6  编写并运行 Qt 程序

(1)新建项目,“文件”->“新建文件或项目…”:

(2)编辑UI文件:

添加一个 Line Edit 和一个 Push Button,并将 Push Button 的显示的名称改为 Clear,将窗口的大小改为 1024x600,这样窗口可以布满整个显示屏。接下来为按钮添加槽函数,右击按钮,然后在弹出的菜单中选择 go to slot 子菜单即可。

在自动生成的槽函数中,添加如下的代码:

void MainWindow::on_pushButton_clicked() {
    ui->lineEdit->clear();
}

(3)代码编写完成后进行保存,然后先选择 PC 上的构建套件进行编译测试,点击下图中的三角形按钮即可运行。

测试成功后,在切换构建套件成 ARM,执行“构建”->“构建所有项目”。

(4)编译成功后,会在相应的目录生成可在开发板运行的可执行程序,拷贝到开发板即可运行。

# cp ./test /home/rootfs/rootfs-fs4412

将开发板接上 USB 的鼠标和键盘,然后上电,使用 NFS 挂载根文件系统,使用下面命令运行 Qt 程序:

# ./test  -plugin evdevmouse:/dev/input/event1 -plugin evdevkeyboard:/dev/input/event2

开发板上运行的程序功能将会和刚才在PC机上运行的程序功能一样。在命令行中通过 evdevmouse 指定了鼠标设备,通过 evdevkeyboard 指定了键盘设备。这些设备的路径需要根据系统的实际情况而定。

嵌入式QT移植的更多相关文章

  1. 移植QT5.6到嵌入式开发板(史上最详细的QT移植教程)

    目前网上的大多数 QT 移植教程还都停留在 qt4.8 版本,或者还有更老的 Qtopia ,但是目前 Qt 已经发展到最新的 5.7 版本了,我个人也已经使用了很长一段时间的 qt5.6 for w ...

  2. 基于mini2440的Qt移植

    花了很长时间,终于把Qt移植到mini2440开发板上了,不能说完全成功,总算是完成一大步,各中过程心酸,废话不多说,下面正式讲解移植过程. 移植环境: win7系统,虚拟机是ubuntu12.04 ...

  3. 嵌入式Qt开发环境的搭建详解

    一.嵌入式Qt开发环境的搭建前奏 1.下载arm-linux-gcc-4.4.3-20100728.tar.gz 2.下载qt-everywhere-opensource-src-4.8.5.tar. ...

  4. 基于arm的嵌入式QT开发(课程设计)

    一. 项目要求 配置QT5.7基于x86及arm 等两种CPU架构的调试及开发环境: 移植arm编译后的QT5.7及屏幕校准工具tslib1.4至CORTEX ARM9实验平台: 开发基于QT5.7的 ...

  5. 【Linux开发】【Qt开发】嵌入式Qt程序使用触屏或USB鼠标方式

    上文<嵌入式Qt开发-移植到ARM开发板 >介绍了Qt程序的移植,本文再说下如何使开发板Qt程序使用触摸屏或USB方式进行交互. 之前刚把一个qt程序移植到arm板上成功运行显示时就开心的 ...

  6. 【Linux开发】【Qt开发】ARM QT移植详细步骤教程

    ARM QT移植详细步骤教程 米尔SAM9X5和A5D3X上默认的Qt版本是4.5.3,当这个版本的Qt库不能满足实际开发需求时,可通过此方法制定Qt开发.运行环境. 移植的步骤如下: 1.下载新版q ...

  7. iMX287A嵌入式Qt环境搭建

    目录 1.嵌入式Qt简介 2.查看开发板Qt库的版本 3.第一个嵌入式Qt程序--Hello World 4.Linux桌面版本Qt环境的搭建 5.注意 @ 1.嵌入式Qt简介 Qt 是一个跨平台的应 ...

  8. QT移植无法启动 This application failed to start because it could not find or load the QT platform

    QT配置好在自己机器上可以运行,但在别人机器上一直弹出 "This application failed to start because it could not find or load ...

  9. MISP版本嵌入式QT编译时出现mips-linux-gcc command not found

    configure的时候都没什么问题我的configure是:./configure -prefix /opt/qt-jz -xplatform qws/linux-mips-g++ -embedde ...

随机推荐

  1. Go同步和异步执行多个任务封装

    同步执行类RunnerAsync 支持返回超时检测,系统中断检测 错误常量定义 //超时错误 var ErrTimeout = errors.New("received timeout&qu ...

  2. [转载]innodb 的预读

    innodb在io的优化上有个比较重要的特性为预读,innodb以64个page为一个extent,那么innodb的预读是以page为单位还是以extent? 这样就进入了下面的话题:linear ...

  3. django 1.10.3 admin后台管理设置显示中文

    在网上搜索的什么设置settings.py的LANGUAE_CODE,在1.10.3下完全不行,直接报错,后来使用了django.middleware.locale.LocaleMiddleware才 ...

  4. js面向对象学习笔记(一):创建空对象,理解this指向

    var obj = new Object();//创建一个空对象 obj.name = '小王';//属性 obj.sayName = function () { //对象方法 对象最重要的是this ...

  5. 江西理工大学南昌校区cool code竞赛

    这次比赛原本就是来打酱油的,想做个签到题就走!一开始不知道1002是签到题,一直死磕1001,WA了四发过了,回头一看Rank,三十名,我靠!看了1001的AC率,在我AC之前只有一个人AC了,当时我 ...

  6. 51 Nod 1028 大数乘法 V2【Java大数乱搞】

    1028 大数乘法 V2 基准时间限制:2 秒 空间限制:131072 KB 分值: 80 难度:5级算法题 给出2个大整数A,B,计算A*B的结果. Input 第1行:大数A 第2行:大数B (A ...

  7. Codeforces 626E Simple Skewness(暴力枚举+二分)

    E. Simple Skewness time limit per test:3 seconds memory limit per test:256 megabytes input:standard ...

  8. [bzoj3282]Tree (lct)

    昨天看了一天的lct..当然幸好最后看懂了(也许吧..) 论善良学长的重要性T_T,老司机带带我! 这题主要是删边的时候还要判断一下..蒟蒻一开始天真的以为存在的边才能删结果吃了一发wa... 事实是 ...

  9. UVa 12186 树形dp

    题意  分析   白皮书 P282  例题9-12 AC代码 #include <stdio.h> #include <math.h> #include <string. ...

  10. PLSQL 注册码

    注册码:Product Code:4t46t6vydkvsxekkvf3fjnpzy5wbuhphqzserial Number:601769 password:xs374ca 本人版本 Versio ...