在树莓派上设计桌面应用一般情况会依赖于X11环境,如果是Windows平台,就目前而言,我们也可以选择Windows 10 IoT环境进行开发。UWP目前也支持在树莓派2上进行部署。至于常见的Linux X11或者Wayland环境,相比之下比较冗余,但是QT Emebedded直接利用Framebuffer,显示GUI,会更加轻便。利用树莓派 Open GL支持,更可以开发出3D效果,是工业领域开发设计可视化设备的不错选择,更是物联网设备一个比较好的交互方案。

1. 准备工具

我们要在Windows上对QT 5.5进行交叉编译,所以我们需要准备以下工具:

  • 树莓派 1代或者2代,官方的Rasbian系统(基于Debian),目前最新版本基于Debian 8 Jessie,我们可以从官方站点下载最新版本 https://downloads.raspberrypi.org/raspbian_latest
  • 下载交叉编译工具集 cross-toolchain (http://gnutoolchains.com/raspberry/) 。如果你是基于Jessie的Rasbian,选择 raspberry-gcc-4.9.2-r2.exe。 如果是Wheezy,你需要选择 raspberry-gcc4.6.3.exe。安装toolchain.

  • 下载MinGW toolchain (http://gnutoolchains.com/mingw32)并安装,我们需要在Windows中编译QMake

  • 下载安装Python 2.7 for Windows (https://www.python.org/ftp/python/2.7.11/python-2.7.11.msi) 并且确保Python执行路径写入了系统环境变量PATH
  • 下载QT 5.5 源代码,http://download.qt.io/archive/qt/5.5/5.5.0/single/

2. 安装Rasbian

大家可以参考这个链接 https://www.raspberrypi.org/documentation/installation/installing-images/windows.md 来安装Rasbian,不过简单来讲,在Windows下安装Rasbian只需要用WinfFlashTool 或者 Win32DiskImager 将系统镜像刷入一张不小于8GB的SD

  • WinFLASHTool: http://winflashtool.sysprogs.com/
  • Win32DiskImager: https://sourceforge.net/projects/win32diskimager/

将SD插入树莓派,接上电源和HDMI,启动系统,默认用户pi,密码raspberry登入系统 (建议打开Raspi-config配置系统默认进入CLI,修改管理员密码,配置GPU内存128MB,然后重启)。

运行命令进行系统更新。

sudo apt-get update

sudo apt-get upgrade

建议:先预先安装下面库,交叉编译Qt,xcb依赖这些库,默认Raspbian中可能不带

sudo apt-get install libxcb1 libxcb1-dev libx11-xcb1 libx11-xcb-dev libxcb-keysyms1 libxcb-keysyms1-dev libxcb-image0 libxcb-image0-dev libxcb-shm0 libxcb-shm0-dev libxcb-icccm4 libxcb-icccm4-dev libxcb-sync1 libxcb-sync-dev libxcb-render-util0 libxcb-render-util0-dev libxcb-xfixes0-dev libxrender-dev libxcb-shape0-dev libxcb-randr0-dev libxcb-glx0-dev

你可能会碰到某些库无法下载,你可以手动下载然后通过 dpkg -i 来安装。

3. 同步Linux环境

在Windows中交叉编译Qt,需要先同步树莓派Linux 库、头文件到sysroot下。在<sysgcc>\Raspberry\TOOLS中打开 UpdateSysroot.bat (<sysgcc>为toochain的安装目录,例如C:\SysGCC)

在Targeted Linux machine输入选择你的树莓派,如上图输入你需要同步的目录,建议同步/opt目录(在输入框里按 Ctl+Enter换行,直接按Enter默认为开始同步,请注意),里面包含了OpenGL的头文件,我们在编译Qt需要引用。 注意,千万不要同步/etc目录,因为他会复写本地的/etc/ld.so.conf文件,会破化Windows下编译时的头文件引用。如果不小心同步了,我们需要重新安装  aspberry-gcc4.6.3.exe 来提取恢复此文件。

4. 配置编译qmake

我们需要先解压缩下载下来的qt源码包,比如解压缩在C:\qt-everywhere-opensource-src-5.5.0 (可以用7-zip来解压缩)。或者打开MinGW32下的msys (<sysgcc>\MinGW32\msys\1.0\msys.bat) 进入你的qt代码下载目录(例如 C:\download)

然后确认代码全部解压缩到当前目录下,确认gccarm-linux-gnueabihf-gcc工具的路径

如果没有找到gcc和arm-linux-gnueabihf-gcc,你可以设置你的Windows系统PATH环境变量,加入 c:\SysGCC\Raspberry\bin和c:\SysGCC\MinGW32\bin

打开 qt-everywhere-opensource-src-5.5.0\qtbase\mkspecs\linux-arm-gnueabi-g++下的qmake.conf文件,将所有的arm-linux-gnueabi-替换成arm-linux-gnueabihf-,如下图:

好了,现在我们可以开始编译Qt。由于Qmake编译脚本的一个bug,我们无法直接交叉编译Raspberry版本,需要分为两步,先编译Windows Qmake然后再交叉编译Raspberry Qt。

打开 qt-everywhere-opensource-src-5.5.0\qtbase\mkspecs\win32-g++ 下的qmake.conf文件,在 CXXFLAGS 后面添加 -U__STRICT_ANSI__ 标记

输入下面的命令开始编译Qmake for Windows

cd /c/download

mkdir qt-build

cd qt-build

../qt-everywhere-opensource-src-5.5.0/configure -platform win32-g++ -xplatform linux-arm-gnueabi-g++ -release -opengl es2 -device linux-rasp-pi2-g++ -sysroot C:/SysGCC/Raspberry/arm-linux-gnueabihf/sysroot -prefix /usr/local/qt5

选择 'o' Open Source和yes同意GPLV2&3许可证

-opengl es2参数:配置Qt直接使用Raspberry framebuffer 而不是X11

全部配置完成后,你可以用命令 qtbase/bin/qmake -v 检查下qmake是否配置成功

5. 交叉编译Qt for Raspberry

现在我们打开 C:\download\qt-everywhere-opensource-src-5.5.0\qtbase\configure 文件,找到3900行左右 "Creating qmake...",修改为:

if [ '!' -f "$outpath/bin/qmake.exe" ]; then

注意qmake.exe后面的.exe扩展名和最后的then。使用已经编译好的Windows qmake而不用再去生成qmake

好了,到此我们做好了所有的准备工作,就要开始编译Qt for Raspberry Pi了。在这之前,建议大家再次确认下是否有遗漏或者错误,不然一次编译就需要十几个小时,中断后再来很费时间。

回到msys窗口,进入qt-build目录,输入下面的命令开始配置:

../qt-everywhere-opensource-src-5.5.0/configure -platform win32-g++ -xplatform linux-arm-gnueabi-g++ -release -opengl es2 -device linux-rasp-pi2-g++ -sysroot C:/SysGCC/Raspberry/arm-linux-gnueabihf/sysroot -prefix /usr/local/qt5 -device-option CROSS_COMPILE=C:/SysGCC/Raspberry/bin/arm-linux-gnueabihf- -qt-xcb

同样输入 "o" 和 "yes" 使用开源版本和同意许可证内容。

可以忽略出现的警告。但如果出现缺少库依赖的错误,请回到第3步,同步Linux环境,检查是否已经同步了必要的目录。检查是否在Raspbian中遗漏了必须的库。可以按照输出提示,去检查Qt环境的依赖库,并且在Raspbian中手动安装,然后再进行一次同步。

你也可以检查 <sysgcc>\Raspberry\arm-linux-gnueabihf\sysroot\etc\ld.so.conf文件,是否包含了下面配置

/opt/vc/lib

/lib/arm-linux-gnueabihf

/usr/lib/arm-linux-gnueabihf

/usr/lib/arm-linux-gnueabihf/libfakeroot

/usr/local/lib

如果你看到了下面的内容,那么你就可以输入 make && make install 开始编译安装。不出意外,整个过程打开需要15小时左右,具体视机器性能,反正我花了20小时完成所有编译安装。默认会安装到 <sysgcc>\Raspberry\arm-linux-gnueabihf\sysroot\usr\local\qt5 目录。

6. 同步Qt到Raspbian并测试

等待一天后,编译安装完成,我们就可以将安装在本地PC上的Qt复制到Raspberry中。不建议使用SFTP工具进行上传,因为SFTP上传无法将文件属性复制过去。这里建议使用 toolchain 中自带的SmarTYY来完成上传。打开 <sysgcc>\Raspberry\TOOLS\PortableSmartty下的 SmarTTY.exe 工具,配置连接到你的树莓派。

cd/usr/local

sudomkdirqt5
sudo chown pi qt5

创建Qt 5的安装目录,然后打开SmarTYY菜单,选择上传目录。

配置本地目录为 <sysgcc>\Raspberry\arm-linux-gnueabihf\sysroot\usr\local\qt5, 远程目录为 /usr/local/qt5,开始上传

完成后,我们就可以在SSH中进行测试,进入 /usr/local/qt5/examples/widgets/richtext/textedit 运行例子 ./textedit。这时如果你的树莓派连接着显示器,你就会看到一个文本编辑器显示出来,接上鼠标键盘,你就可以进行图形化界面操作了。

SSH端:

树莓派连接的显示器:

下一篇:适用于树莓派Raspberry Pi的嵌入式QT平台(二) -- 在Windows下用Qt Creator开发编译Raspberry Qt 5应用程序


大部分内容参考自:http://visualgdb.com/tutorials/raspberry/qt/embedded/

接着上篇 "交叉编译安装Qt Embedded 5.5",我们已经成功在Windows上交叉编译了Raspberry Pi的嵌入式Qt 5.5。那么我们就可以开始开发基于Qt 5的应用程序。接下来,我们需要在Windows上搭建必要的Qt开发工具,首当其冲就是官方的Qt Creator,不仅提供了原生的C++编辑器,Qt界面设计器,而且还可以集成现有的 Qmake, gcc 甚至于Visual Studio C++编译器来配置编译Qt项目,自带的QML解释器可以快速的将QML内容翻译成代码并集成子啊项目中;而且利用自带的GDB可以进行代码运行时调试。

下面,我们就利用Windows平台上的Qt Creator与我们已经准备好的树莓派中的 Qt 5.5 来集成开发基于Raspberry Pi的Qt Embedded应用程序。过程中,我们需要交叉编译Raspberry Pi版的GDB用于远程调试。

1. 准备工作

  • Qt Creator for Windows:http://download.qt.io/official_releases/qtcreator/3.6/3.6.0/qt-creator-opensource-windows-x86-3.6.0.exe
  • 或者我们也可以下载安装 Qt 5.5.1 for Windows 32-bit (MinGW 4.9.2):http://download.qt.io/official_releases/qt/5.5/5.5.1/qt-opensource-windows-x86-mingw492-5.5.1.exe

    里面已经带了Qt Creator
  • 当然,我们也可以选择Qt for Windows (VS编译版本)

安装Qt for Windows,我们可以注册一个Qt账号,然后选择安装目录并继续。

2. 配置编译环境

安装完成后,打开Qt Creator。在Creator中的项目,类似于 Xcode,我们需要配置好多种目标环境,不同的项目需要配置指定目标环境,就可以针对目标编译生成。

打开Tools -> Options...

选择Devices,点击Add..增加一个Generic Linux Device,然后Start Wizard,填入设备名字,网络地址以及用户名密码等。

完成后,会自动开始测试设备连接。

然后我们可以开始配置Build & Run,选择Qt Versions,添加一个Qt Version,选择我们之前编译好的Windows下的qmake:

然后添加一个Compiler,选择Compilers选项卡,Add.. 一个MinGW类型的编译器,选择<sysgcc>\Raspberry\bin\arm-linux-gnueabihf-g++.exe

添加一个CMake,<sysgcc>\Raspberry\bin\make.exe

好了,最后我们就需要配置出一个Kit,包含一个目标环境所需要的qmake,设备,CMake,以及配置文件。点击Kits选项卡:

  • Device type:Generic Linux Device
  • Device:选择你刚才新建的设备
  • Sysroot:<sysgcc>\Raspberry\arm-linux-gnueabihf\sysroot
  • Compiler:选择新建的编译器
  • Qt version:选择Raspberry Pi的Qt
  • Qt mkspec:<sysgcc>\Raspberry\arm-linux-gnueabihf\sysroot\usr\local\qt5\mkspecs\devices\linux-rasp-pi2-g++
  • CMake Tool:选择新建的CMake

保存新的Kit配置。

因为Qt Creator的Debugger GDB需要有Python支持,但是MinGW中提供的GDB均没有支持Python,所以我们目前无法指定Debugger,需要之后交叉编译一个Raspebrry Pi支持的GDB with Python才可以作为Debugger来调试。

3. 新建Qt for Raspberry Pi项目并编译测试

点击 File -> New File or Project,打开新建项目向导,选择Qt Widgets项目模板,填入项目名称,务必在Kit Selection中选择才新建的Kit环境。

完成代码后,我们可以通过左下侧的编译运行按钮直接编译输出到Raspberry Pi

目前我们只能使用Run,还无法使用调试器。我们可以打开Qt Examples中的项目来进行测试。

上篇讲到“在Windows下用Qt Creator开发编译Raspberry Qt 5应用程序”,由于目前Qt Creator所支持的GDB需要有Python支持,但是目前MinGW中的GDB都是无Python支持的,所以我们需要自己下载GDB代码并且编译成针对Raspberry Pi支持Python的版本。

1. 准备工作

  • 下载MinGW最新版本:https://sourceforge.net/projects/mingw/files/Installer/ 从sourceforge下载 mingw-get-setup.exe,这是一个MinGW软件包安装管理器,类似于Debian上的新得利包管理器,有一个GUI版本可以可视化的管理安装MinGW环境的软件包
  • 从 Qt 站点下载 http://download.qt.io/development_releases/qtcreator/3.6/3.6.0-rc1/qt-creator-opensource-src-3.6.0-rc1.zip 下载Qt Creator 代码,里面包含了配置编译GDB的脚本。
  • 从GNU站点下载GDB源码(推荐GDB 7.1.0):http://ftp.gnu.org/gnu/gdb/gdb-7.10.tar.xz
  • 从 Qt 站点下载GDB所依赖的Python 2.7库:http://download.qt.io/development_releases/prebuilt/gdb/build-prerequisites/python.zip
  • 从其他站点下载其他所依赖的库源码:
    • libiconv 1.14: http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.14.tar.gz
    • expat 2.1.0: https://sourceforge.net/projects/expat/files/expat/2.1.0/expat-2.1.0.tar.gz/download

解压缩Qt Creator源码,放入C:\Download目录,并且将其他下载的库及代码放入 C:\Download\qt-creator-opensource-src-3.6.0-rc1\dist\gdb\source (在gdb目录下新建一个source目录)

2. 配置编译环境

有人要说,为什么不用之前toolchain for Windows的MinGW32来编译,因为经过本人多次尝试,发现toolchain中的MinGW版本过低,有一个time.h的结构体声明bug导致我们GDB编译无法进行。所以我们需要更新到最新的MinGW版本来编译GDB

安装MinGW-get到C:\MinGW

完成后打开 C:\MinGW\bin\mingw-get.exe,选择 Basic Setup->勾选右侧列表中 mingw-developer-toolkit, mingw32-base,mingw32-gcc-g++以及msys-base软件包,点击菜单Installation->Apply Changes 完成软件包的安装。

安装软件完成后,打开 C:\MinGW\msys\1.0\msys.bat 进入MinGW shell环境。

3. 配置编译GDB with Python for Win/Linux/ARM

打开 C:\Download\qt-creator-opensource-src-3.6.0-rc1\dist\gdb\Makefile.mingw 文件

在targets那一行添加Raspberry Pi的ABI:arm-linux-gnueabihf,然后保存文件。打开msys shell,进入目录 C:\Download\qt-creator-opensource-src-3.6.0-rc1\dist\gdb,make这个Makefile.mingw开始编译:

注意:过程中可能会下载一些软件包,确保你的网络连接的稳定,有条件的可以FQ连上VPN。如果下载一直出现问题,则可以选择手动下载那些软件包放入source目录中。

当编译打包全部完成后(大概会花一个小时编译),你可以在 C:\Download\qt-creator-opensource-src-3.6.0-rc1\dist\gdb\qtcreator-gdb-7.10找到编译好的GDB,并且也有一个打包好的 qtcreator-gdb-7.10-mingw32_nt-6.2-i686.tar.gz 在\dist\gdb目录下。

4. 在Qt Creator中配置并联机调试Qt for Raspberry Pi应用

打开Qt Creator,进入Tools->Options...->Build & Run->Debugger,添加一个Debugger,选择刚才编译出来的gdb.exe,如下图,保存后。

打开Kits,选择之前配置好的Rasspberry Pi的开发Kit,在Debugger下选择配置好的Debugger,点击OK保存关闭。

好了,至此,Qt Creator就可以使用按钮进行联机调试,可以设置断点,查看运行时内存,线程状态。GDB会向Raspberry Pi推送一个gdbserver,并且联合本地的GDB进行调试。下面面是我调试一个Qt for Raspberry Pi应用时的截图:

树莓派Raspberry Pi的嵌入式QT平台相关推荐

  1. 适用于树莓派Raspberry Pi的嵌入式QT平台(二) -- 在Windows下用Qt Creator开发编译Raspberry Qt 5应用程序...

    接着上篇 "交叉编译安装Qt Embedded 5.5",我们已经成功在Windows上交叉编译了Raspberry Pi的嵌入式Qt 5.5.那么我们就可以开始开发基于Qt 5的 ...

  2. 树莓派Raspberry Pi 系统搭建和智能机器人小车的组装调试

    本文的出发点:无意接触到树莓派这款优秀的芯片,比较适合青少年编程,激发孩子的编程思维的培养,最好的学习就是实战,借助于淘宝上现成零件式的智能小车硬件和树莓派实现智能机器人小车的实现,给孩子带来低成本高 ...

  3. 树莓派(raspberry pi)日记1之个人网站的构建(localhost内网穿透实现公网可以访问)

    树莓派(raspberry pi)日记1之个人网站的构建(localhost内网穿透实现公网可以访问) 板子:raspberry pi 3B+ // 作者:shawn 2021.2.9 14:10 A ...

  4. 树莓派 Raspberry Pi 3B+安装官方系统(一)

    两年前购买的树莓派(可看当时我的记录树莓派 3B + 重装系统并配置 WiFi | YouForever)已经在角落里吃灰了好长时间,一度以为已经损坏,几天前试着拿出来折腾一下,竟然神奇地复活了,开心 ...

  5. 零基础学树莓派Raspberry Pi - 基于Pi 2 Imager -从清华镜走起到设置镜像源后远程连接桌面

    重点:此篇较旧了,新版请看博客原文.旧版仅作记录使用 Introduction - 介绍 Raspbian 是专门用于 ARM 卡片式计算机 Raspberry Pi® "树莓派" ...

  6. VLOG丨树莓派Raspberry Pi 3安装PLEX并挂载USB硬盘打造最牛的微型家庭影音服务器2018...

    视频介绍 树莓派3安装目前最流行的PLEX服务器,实现既能最大限度降低功耗,也能随时随地观看分享影片. 一.在树莓派下安装PLEX媒体服务器 1.在终端,将你的树莓派更新至最新 sudo apt up ...

  7. 树莓派(Raspberry Pi 3) - 系统烧录及系统使用

    转自:https://blog.csdn.net/u012313335/article/details/53405734 树莓派(Raspberry pi)是一块集成度极高的ARM开发板,不仅包含了H ...

  8. 树莓派要mysql的密码_树莓派raspberry Pi 3B+系统中安装mysql过程中不提示输入密码,安装完后如何设置密码...

    树莓派raspberry Pi 3B+安装mysql未提示输入密码,安装后修改mysql密码默认密码 使用mysql -uroot -p 命令连接mysql时,报错 pi@raspberrypi:/ ...

  9. 树莓派Raspberry Pi OS开机自启动脚本

    树莓派Raspberry Pi OS开机自启动脚本 1. 需求和来源 2. 后台运行Python 3. 运行Terminal 1. 需求和来源 想让设备开机后就要运行Python工程文件 那么需设置l ...

最新文章

  1. Android之ActivityManagerService详解(APP启动过程)
  2. python核心数据类型_Python核心数据类型-列表
  3. 关于 QAbstractItemModel 学习的一点分享
  4. 中国人民公安大学网络对抗技术作业一
  5. Centos6.4 编译安装 nginx php
  6. 三层架构dao service 表示层 115721935
  7. php urledcode_攻防世界 php 2 函数urldecode 使用说明
  8. 华中师范大学邮箱matlab,正版软件管理与服务平台(华中师范大学)
  9. 数据类型 swift
  10. matlab中低通滤波器的用法,matlab中低通滤波器
  11. 16.第二十二章.信息安全管理
  12. 电脑翻页时钟屏保Fliqlo
  13. 肌营养不良最新研究进展(2021年)
  14. Maven插件 [WARNING] 'parent.relativePath' of POM 类似警告处理
  15. 从“傻X”到牛X——写在最前面的话
  16. 如何新建一个ccs工程文件
  17. Aria2打造离线网盘
  18. Android Remote Administrator Tool ——SpyNote 6.5 Released
  19. 把屏幕竖起来看代码很爽
  20. Oracle - Database 甲骨文

热门文章

  1. 钡铼智能楼宇控制BACnet 接入Modbus TCP Server云平台
  2. android代码实现手机加速功能,神奇的安卓手机提速方法 只需设置两步立即提速70%以上...
  3. 中文翻译版php.ini配置文件
  4. python空气质量分析与预测_干货!如何用 Python+KNN 算法实现城市空气质量分析与预测?...
  5. 三全食品安全阴云未散:京东自营店未公示生产许可证
  6. 网络爬虫学习第一弹:urllib库使用
  7. 路由器能赚钱 这事靠谱吗
  8. Flink 的 emit 作用
  9. PYTHON用LSTM长短期记忆神经网络的参数优化方法预测时间序列洗发水销售数据
  10. Android实战技巧之八:Ubuntu下切换JDK版本