一个关于在raspberry上运行的交叉编译Qt现代指南,这个指南主要是介绍带有eglfs硬件加速OpenGL ,并在QtCreator将其配置

https://wiki.qt.io/RaspberryPi2EGLFS#A_modern_guide_for_cross-compiling_Qt_for_HW_accelerated_OpenGL_with_eglfs_on_Raspbian_and_setting_up_Qt_Creator

题前科普

eglfs是Qt的一个平台插件,使Qt程序可以利用opengl es画图而无需窗口系统. 这种方式是在支持gpu的嵌入式设备主要采用的方式. 一般需要gpu厂商提供egl和gles驱动模块.
Qt可以利用eglfs插件实现直接画图(全屏),或者在有窗口管理系统(如wayland合成器weston或Qtwayland合成器)时,通过窗口画图.前者只能全屏显示一个程序,后者可以实现多进程应用

OpenGL ES (OpenGL for Embedded Systems) 是 OpenGL 三维图形 API 的子集,针对手机、PDA和游戏主机等嵌入式设备而设计。
关于这篇文章我在raspberryPi3 上做了实践

首先环境:

Distributor ID:    Ubuntu
Description:    Ubuntu 14.04.5 LTS
Release:    14.04
Codename:    trusty

Linux ubuntu 3.13.0-153-generic #203-Ubuntu SMP Thu Jun 14 08:54:48 UTC 2018 i686 i686 i686 GNU/Linux

raspberryPi3

Distributor ID: Raspbian
Description:    Raspbian GNU/Linux 9.4 (stretch)
Release:        9.4
Codename:       stretch

Linux once 4.14.34-v7+ #1110 SMP Mon Apr 16 15:18:51 BST 2018 armv7l GNU/Linux

这里的raspbian 版本跟官方的版本不一样官方的是jessie.但是不对于所用的知识点不大要紧。

按着官方的步骤一步一步的走。

[on RPi]sudo raspi-config 调整配置为the console ,将GPU Memory 该为256Mb

[on RPi] 选择rip-update;

[on RPi] reboot

[on RPi] 1.sudo nano /etc/apt/sources.list 将里面的关于deb-src 的注释掉

              2. sudo apt-get update
                  sudo apt-get build-dep qt4-x11
                  sudo apt-get build-dep libqt5gui5
                  sudo apt-get install libudev-dev libinput-dev libts-dev libxcb-xinerama0-dev libxcb-xinerama0

[on RPi] sudo mkdir /usr/local/qt5pi ;sudo chown pi:pi /usr/local/qt5pi

现在回顾上面的关于树莓派的准备工作;首先注意下工作环境;

其次在树莓派上配置层上电启动后为终端模式,将GPU 内存设为最大,因为我们要跑个3d OpenGL ;

同时更新树莓派让更改的生效。然后安装好一些运行测试openGL 的库

在创建个qt5pi 为之后同步我们PC机,交叉编译的Qt源码的安装文件

【on host PC】mkdir ~/raspi ;cd ~/raspi ;git clone https://github.com/raspberrypi/tools

【on host PC】mkdir sysroot sysroot/usr sysroot/opt
                         rsync -avz pi@raspberrypi.local:/lib sysroot
                         rsync -avz pi@raspberrypi.local:/usr/include sysroot/usr
                         rsync -avz pi@raspberrypi.local:/usr/lib sysroot/usr
                         rsync -avz pi@raspberrypi.local:/opt/vc sysroot/opt

raspberrypi.local 为树莓派的ip

【on host PC】wget https://raw.githubusercontent.com/riscv/riscv-poky/priv-1.10/scripts/sysroot-relativelinks.py
                         chmod +x sysroot-relativelinks.py
                         ./sysroot-relativelinks.py sysroot

【on host PC】git clone git://code.qt.io/qt/qtbase.git -b <qt-version> ;     cd qtbase

./configure -release -opengl es2 -device <rpi-version> -device-option CROSS_COMPILE=~/raspi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin/arm-linux-gnueabihf- -sysroot ~/raspi/sysroot -opensource -confirm-license -make libs -prefix /usr/local/qt5pi -extprefix ~/raspi/qt5pi -hostprefix ~/raspi/qt5 -v

这里<qt-version> 我的为v5.9.1 版本;也可去http://download.qt.io/archive/qt/ 下载

<rpi-version> linux-rasp-pi3-g++ 这个主要是这路径下qt-everywhere-opensource-src-5.9.1/qtbase/mkspecs/devices/linux-rasp-pi3-g++$的qmake.conf

还需要加-no-use-gold-linker(For higher Qt version (like 5.9.1) you may also need to add)

如果配置这步成功啦就

make &&make install

在此回顾下前面的pc 机所做的:

1,首先我们去把交叉编译工具下载下来,为编译raspberry 平台的Qt源码和应用做准备;

交叉编译工具要与我们的编译raspberry镜像的一致,不然在configure会出错,

一般用最新的交叉编译和最新的raspberry就一致的

2,然后我们做个文件同步工作,就是把树莓派上的/lib;/usr/include;/usr/lib/;/opt/vc这几个目录的文件搬到PC的sysroot下

其实这里的sysroot 这个文件具体的作用(我只能意会,懂得给我说下)在配置的时候也用到啦。

我的理解是模拟出raspberry的环境,因为我们编译时qt和qt应用可能依赖于树莓派的环境和库。

就像我们在pc上编译qt源码一样,只不过pc 上不要sysroot啦
3,自己看py脚本吧,这个我也没看哈哈照着做

4,说下这configure 配置的参数选项

-release 发行版   -opengl es2  支持openGL api类型为es2  -device <rpi-version> 这个就是生成qmake的配置信息

-device-option CROSS_COMPILE= 交叉编译路径 

如果configure 这步出错;唯一的思路是去看config.log ,查错;在解决好后,把config.cache 删啦(这玩意太可恶啦);再重新配置

【on host PC】rsync -avz qt5pi pi@raspberrypi.local:/usr/local

【on host PC】cd qtbase/examples/opengl/qopenglwidget
                         ~/raspi/qt5/bin/qmake
                         make; scp qopenglwidget pi@raspberrypi.local:/home/pi

这里就把我们安装的qt5pi 同步到之前我们在树莓派mkdir的/usr/local/qt5pi 同步啦

然后在把我们的测试app程序编译出来 放到树莓派上去运行测试

接下来的比较烦;在树莓派上运行去找所需要的库;设置QT 环境变量

这里没有必要看官方文档;我这里给出思路去解决

主要用的是ldd 这个工具来添加,复制,所需要的库到目的路径;

 

主要是将/opt/vc/lib 的not found 的库做个ln 到/usr/lib/arm-linux-gnueabihf/下;

这里解决的办法有点多也可以添加个环境变量吧/opt/vc/lib 加入到LD_LIBRARY_PATH 里

大概就是这样的拉。

 

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,这里是一个简单的Python程序,可以在Raspberry Pi e-ink Display Module GDE0213B1电子纸上显示红绿灯倒计时: ```python import time from PIL import Image, ImageDraw, ImageFont import epd2in13b # 设置电子纸屏幕的大小和字体 width = 128 height = 250 font_size = 20 font = ImageFont.truetype('/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf', font_size) # 初始化电子纸屏幕 epd = epd2in13b.EPD() epd.init() # 创建一个空白的图片 image = Image.new('1', (width, height), 255) # 创建一个绘图对象 draw = ImageDraw.Draw(image) # 定义倒计时的时间(秒) countdown = 30 # 循环倒计时 while countdown > 0: # 清空屏幕 draw.rectangle((0, 0, width, height), fill=255, outline=255) # 计算剩余时间 minutes = countdown // 60 seconds = countdown % 60 # 绘制倒计时文本 text = "{:02d}:{:02d}".format(minutes, seconds) text_width, text_height = draw.textsize(text, font) x = (width - text_width) // 2 y = (height - text_height) // 2 draw.text((x, y), text, font=font, fill=0) # 更新屏幕 epd.display(epd.getbuffer(image)) # 等待一秒钟 time.sleep(1) # 减少倒计时时间 countdown -= 1 # 显示最终的结果 text = "Green Light" text_width, text_height = draw.textsize(text, font) x = (width - text_width) // 2 y = (height - text_height) // 2 draw.text((x, y), text, font=font, fill=0) epd.display(epd.getbuffer(image)) ``` 这个程序将在电子纸上显示一个倒计时器,然后显示一个"Green Light"的文本。你可以根据需要进行修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值