0. 前言
我也不知道为什么我毕设要用QT,但是这都是我自己画的饼,哭着也要摊出来。
由于用的是树莓派4,而树莓派4恰好使用了和前几代都不一样的图形驱动(以前是博通的,现在是mesa的),所以网上资料很少,我一开始还陷入了旧教程之中导致各种各样的问题,坑了我好多时间。
然后再谈谈EGLFS,EGLFS是一个Qt5的平台插件,它的作用就是让QT应用直接运行在EGL和OpenGL ES 2.0上(关于EGL和OpenGL ES 2.0的介绍具体可以看这篇文章)。说白了,就是能让你绕过图形桌面,直接从显卡输出Qt图像到屏幕。如果想直观地体验我刚说的“绕过桌面直接输出”,可以看我的这篇文章。
当然也许你也想让Qt程序在图形界面中,以窗口形式运行。这当然也是可以的,后面会具体说。
本文的步骤如下:
- 在树莓派4上安装依赖包,并进行一些准备
- 在PC上安装QT Creator,下载源码,下载交叉编译工具工具链
- 将树莓派4上的库复制到到PC上做一个sysroot,交叉编译时用
- 配置,编译,安装到树莓派4上
- 在树莓派4上配置运行环境,运行例程
1. 在树莓派上的前期准备
换源之类的基本操作就不再多啰嗦了(记得src的源的注释要取消掉),只说重要的。
1.1.【在树莓派上】更新固件(重要)
使用sudo rpi-update
,直接运行大概率不会成功(因为功夫网)。解决方法可以看我的这篇文章。
具体可以查看/opt/vc/lib
目录下的内容,更新前是没有libEGL.so
和libGLESv2.so
的,只有libbrcmEGL.so
和libbrcmGLESv2.so
,brcm的意思是博通,而我们前面说了博通的驱动是以前的树莓派用的......所以老实更新吧。
完事之后重启
sudo reboot
【紧急补充】在换了树莓派官方7寸屏幕以后,发现rpi-update会导致屏幕只能显示而无法触摸。这是因为官网下载的树莓派系统自带rpi-ft5406触摸驱动,但是更新后的内核还没添加这个驱动支持。于是我用:
sudo apt --reinstall install raspberrypi-kernel
把内核版本改了回去,触摸屏又能用了;同时,/opt/vc/lib里面的libEGL.so和libGLESv2.so库还在,所以QT还能继续支持eglfs。
1.2.【在树莓派上】安装以下包:
# Qt base依赖的包
sudo apt-get install libboost1.58-all-dev libudev-dev libinput-dev libts-dev libmtdev-dev libjpeg-dev libfontconfig1-dev libssl-dev libdbus-1-dev libglib2.0-dev libxkbcommon-dev
# mesa gbm驱动
sudo apt-get install libgles2-mesa-dev libgbm-dev
# 蓝牙相关 可以不用安装
sudo apt-get install bluez libbluetooth-dev
# 中文字体
sudo apt-get install ttf-wqy-zenhei
# 用于远程调试的GDB Server
sudo apt-get install gdbserver
1.3.【在树莓派上】建立文件夹并修改权限:
sudo mkdir /usr/local/qt5pi # 用来安装qt运行库
sudo chown -R pi:pi /usr/local/qt5pi
mkdir /home/pi/qt5 # 用来存放以后自己写的qt程序可执行文件
1.4.【在树莓派上】开启GL Driver,并以命令行模式启动:
sudo raspi-config
- 选择 Boot Options —— Desktop/CLI —— Console Autologin —— OK
- 选择Advanced Options —— GL Driver —— GL ( fake KMS ) —— OK
前者让你以命令行方式启动树莓派;后者启用GL Driver。完事之后Finish,重启就行。查看/dev/dri/
目录是否存在,就知道GL Driver启用了。
1.5 【在树莓派上】把用户pi添加到渲染组(重要)
sudo gpasswd -a pi render
2. 在PC上的前期准备
我使用的是Ubuntu 18.04,不是虚拟机。
2.1.【在PC上】下载交叉编译器并配置环境变量
先创建一个文件夹
mkdir ~/raspi
mkdir ~