文档章节

玩转树莓派- RaspBerry,Qt5交叉编译移植

openthings
 openthings
发布于 2015/03/20 06:46
字数 1160
阅读 10742
收藏 2

Raspberry Pi (BCM2835): Device Information

Architecture ARMv6
CPU ARM11
RAM 256MB OR 512MB since October 2012 (shared with GPU)
GPU VideoCore IV
OpenGL OpenGL ES 2.0
Multimedia OpenMax IL 1.1.2
Qt 5.0 (eglfs/QPA) Supported, with OpenGL ES 2.0

 

Qt 5 port functional state (against Raspbian Wheezy (primary reference platform))

Feature State Additional info
Hardware accelerated cursor Done upstream
Wayland support Done upstream
Hardware decoding of images To Do
Scenegraph tailoring To Do
HardFP support Done Requires v8 patch
Qt Multimedia Done Requires gst-omx
Webkit integration To Do webgl, tex mapper

 

  • 开始

    首先我们先创建一个目录来存放Qt5的源代码以及交叉编译所需要的所有文件,我选择在当前用户家目录下创建一个叫做“opt”的目录。

    1 diveinedu@debian :~$ mkdir  ~/opt
    2 diveinedu@debian :~$ cd  ~/opt

    然后,下载以下文件:

    下载Raspbian Wheezy 镜像  (这里下载 [raspberrypi.org]):

    1 diveinedu@debian :~/opt$ wget  http://downloads.raspberrypi.org/images/raspbian/2013-02-09-wheezy-raspbian/2013-02-09-wheezy-raspbian.zip
    2 diveinedu@debian :~/opt$unzip  2013-02-09-wheezy-raspbian.zip

    下载解压完后挂载镜像:

    1 diveinedu@debian :~/opt$ sudo  mkdir  /mnt/rasp-pi-rootfs
    2 diveinedu@debian:~/opt$ sudo mount  -o loop,offset=62914560 2013-03-09-wheezy-raspbian.img    /mnt/rasp-pi-rootfs

    我们这不介绍交叉工具链的编译,直接下载针对树莓派优化定制的交叉编译工具链(或者用github上树莓派的工具链https://github.com/raspberrypi/tools):

    1 diveinedu@debian:~/opt$  wget  http://blueocean.qmh-project.org/gcc-4.7-linaro-rpi-gnueabihf.tbz
    2 diveinedu@debian:~/opt$   tar -xf gcc-4.7-linaro-rpi-gnueabihf.tbz

    因为上面的交叉编译工具是32位Linux的,如果你所使用的是64位Linux的话,还需要安装32位的运行库软件包:

    1 diveinedu@debian:~/optsudo apt-get install ia32-libs

    如果用的是Debian Wheezy的64位系统,上面的行不通,因为Debian Wheezy 64位开启了multiarch-support ,需要执行:

    1 diveinedu@debian:~/opt$  sudo apt-get install multiarch-support
    2 diveinedu@debian:~/opt$  sudo dpkg --add-architecture i386
    3 diveinedu@debian:~/opt$  sudo apt-get update
    4 diveinedu@debian:~/opt$  sudo apt-get install ia32-libs

     

    从远程仓库克隆一份cross-compile-tools到本地:

    1 diveinedu@debian:~/opt$  git clone git://gitorious.org/cross-compile-tools/cross-compile-tools.git

    从远程仓库克隆一份Qt5的源码库到本地:

    1 diveinedu@debian:~/opt$  git clone git://gitorious.org/qt/qt5.git
    2 diveinedu@debian:~/opt$   cd qt5
    3 diveinedu@debian:~/opt/qt5$  ./init-repository

    最后,把qtjsbackend子项目打补丁让其支持armv6指令集的树莓派:

    1 diveinedu@debian:~/opt/qt5cd ~/opt/qt5/qtjsbackend
    2 diveinedu@debian:~/opt/qt5$  git fetch https://codereview.qt-project.org/p/qt/qtjsbackend  refs/changes/56/27256/4   &&   git  cherry-pick  FETCH_HEAD

    如果有冲突的话就解决冲突的代码。

     

     

  • 编译qtbase

    现在我们已经准备好了为树莓派交叉编译Qt5所需要的全部资源,在正式编译之前只需要执行一个小脚本来修正一下符号链接和库文件路径设置:

    1 diveinedu@debian:~/opt/qt5cd  ~/opt/cross-compile-tools
    2 diveinedu@debian:~/opt/qt5sudo  ./fixQualifiedLibraryPaths /mnt/rasp-pi-rootfs/ ~/opt/gcc-4.7-linaro-rpi-gnueabihf/bin/arm-linux-gnueabihf-gcc

    进入qt5/qtbase目录执行以下脚本进行配置和编译工作:

    1 diveinedu@debian:~/opt/qt5$ cd ~/opt/qt5/qtbase
    2 diveinedu@debian:~/opt/qt5/qtbase$ ./configure -opengl es2 -device linux-rasp-pi-g++ -device-option CROSS_COMPILE=~/opt/gcc-4.7-linaro-rpi-gnueabihf/bin/arm-linux-gnueabihf- -sysroot /mnt/rasp-pi-rootfs -opensource -confirm-license -optimized-qmake -reduce-relocations -reduce-exports -release -make libs -prefix /usr/local/qt5pi -no-pch
    3 diveinedu@debian:~/opt/qt5/qtbase$ make -j 4
    4 diveinedu@debian:~/opt/qt5/qtbase$ sudo make install

     

  • 编译其他模块

    执行到这步的时候,你已经有了针对树莓派交叉编译的qmake工具了,你可以一一的去交叉编译Qt5的其他模块了,为里避免模块编译过程中可能 出现的依赖错误,建议按照这个模块顺序去编译: qtimageformats, qtsvg, qtjsbackend, qtscript, qtxmlpatterns, qtdeclarative, qtsensors, qt3d, qtgraphicaleffects,qtjsondb,qtlocation, qtdocgallery.

    模块编译相关的类似命令:

    1 diveinedu@debian:~/opt/qt5$ cd qtimageformats
    2 diveinedu@debian:~/opt/qt5/qtimageformats$ /usr/local/qt5pi/bin/qmake .
    3 diveinedu@debian:~/opt/qt5/qtimageformats$ make -j4
    4 diveinedu@debian:~/opt/qt5/qtimageformats$ sudo make install

    把你所需要或者所想编译的模块都按顺序执行编译安装命令后,所有需要的东西都安装在了镜像文件(raspbain wheezy image)里面了。我们接下来就是把他烧到SD卡上去。 SD卡烧写命令:

    1 diveinedu@debian:~/opt/qt5$ cd ~/opt/
    2 diveinedu@debian:~/opt$ sync; sudo umount /mnt/rasp-pi-rootfs
    3 diveinedu@debian:~/opt$ sudo dd bs=1M if=2013-02-09-wheezy-raspbian.img of=/dev/sdc; sync

    提示:/dev/sdc是我使用的SD的设备, 请根据自己的实际情况修改。

     

    到这里,树莓派的Qt5运行库的编译移植过程就Done了。

    后续会有例程Demo以及Qt5的QPA机制在树莓派上的eglfs平台插件的特点介绍和传统QtWidget程序在EGLFS环境下遇到的问题和解决分析。

     

    C/C++开发,嵌入式Linux,嵌入式开发, Qt开发, Qt5移植 等, 尽在长沙戴维营教育 ,欢迎前来学习。


本文转载自:http://blog.diveinedu.net/%E6%A0%91%E8%8E%93%E6%B4%BE%E4%B8%8Aqt5%E4%BA%A4%E5%8F%89%E7%BC%96%E8%A...

openthings
粉丝 320
博文 1129
码字总数 675031
作品 1
东城
架构师
私信 提问
树莓派3B的Qt交叉编译环境搭建

转自: http://blog.csdn.net/shenhuan1104/article/details/53486619 http://blog.csdn.net/shenhuan1104/article/details/53500829 本文永久地址:https://my.oschina.net/bysu/blog/1557......

不最醉不龟归
2017/10/27
313
0
树莓派笔记02—树莓派硬件环境准备

在开始玩转树莓派之前,我们需要了解下树莓派的硬件配置以及所需要的配件。跟电脑PC机类似,树莓派也需要必要的输入输出设备才能工作。 1. 树莓派3B+ 2018年3月14日,树莓派基金会正式发布新...

TonyCode
2018/08/03
0
0
Chromium 操作系统即将支持所有 SBC 单板电脑

几天前Chromium OS发布了第四个版本,采用了重新设计的内核,性能提升巨大。不过,从今天开始,Chromium OS树莓派2项目有一个新网站,网址是http://www.chromiumosforsbc.org,所以,从现在开...

oschina
2016/03/01
3.2K
3
树莓派使用入门:树莓派上的模拟器和原生 Linux 游戏

树莓派是一个很棒的游戏平台。在我们的系列文章的第九篇中学习如何开始使用树莓派。 回到我们关于树莓派入门系列文章的第五篇,我提到 Minecraft 是一种教孩子们使用游戏平台进行编程的方法。...

作者: Anderson Silva
04/04
0
0
Banana Pi VS Raspberrry Pi,是敌是友?

现在开源硬件,已经成为了一种潮流,很多开源硬件项目不断推出各自的开源硬件产品. 市场上主流的有: raspberrry Pi, arDuino,Pcduino, CubieBoard, 在各自的发展过程中,大家都在维护各自的社区...

sinovoip
2014/07/31
684
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周一乱弹 —— 熟悉的味道,难道这就是恋爱的感觉

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @xiaoshiyue :好久没分享歌了分享张碧晨的单曲《今后我与自己流浪》 《今后我与自己流浪》- 张碧晨 手机党少年们想听歌,请使劲儿戳(这里)...

小小编辑
今天
236
8
SpringBoot中 集成 redisTemplate 对 Redis 的操作(二)

SpringBoot中 集成 redisTemplate 对 Redis 的操作(二) List 类型的操作 1、 向列表左侧添加数据 Long leftPush = redisTemplate.opsForList().leftPush("name", name); 2、 向列表右......

TcWong
今天
19
0
排序––快速排序(二)

根据排序––快速排序(一)的描述,现准备写一个快速排序的主体框架: 1、首先需要设置一个枢轴元素即setPivot(int i); 2、然后需要与枢轴元素进行比较即int comparePivot(int j); 3、最后...

FAT_mt
昨天
4
0
mysql概览

学习知识,首先要有一个总体的认识。以下为mysql概览 1-架构图 2-Detail csdn |简书 | 头条 | SegmentFault 思否 | 掘金 | 开源中国 |

程序员深夜写bug
昨天
11
0
golang微服务框架go-micro 入门笔记2.2 micro工具之微应用利器micro web

micro web micro 功能非常强大,本文将详细阐述micro web 命令行的功能 阅读本文前你可能需要进行如下知识储备 golang分布式微服务框架go-micro 入门笔记1:搭建go-micro环境, golang微服务框架...

非正式解决方案
昨天
11
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部