62 Comentários

Qt5.4 na Raspberry Pi 2 com Yocto Project (fido) – Parte 1

raspberry pi 2 qt5 qt creator
Este post faz parte da série Qt5.4 na Raspberry Pi 2 com Yocto Project. Leia também os outros posts da série:

Dando continuidade em nossa série de posts sobre o Yocto Project, neste post ensinaremos como construir uma imagem Linux embarcado contendo o Qt5.4 para a Raspberry Pi 2 usando seu acelerador gráfico VideoCore IV. Na segunda parte veremos como gerar um SDK e integrá-lo ao QtCreator para que possamos desenvolver e compilar aplicações para o nosso target. Se você ainda não teve contato com o Yocto, sugiro que faça o tutorial do Henrique Rossi sobre Beaglebone Black + Yocto.

Umas das principais evoluções do Qt5 em relação ao Qt4 é o melhor uso da GPU , dentre outras características.

Preparando o Host

O Yocto Project suporta oficialmente as seguintes distribuições GNU/Linux como ambiente de construção:

  • Ubuntu 14.04 e 14.10;
  • Fedora 21;
  • CentOS 6.x e 7.x;
  • Debian 7.x e 8.x;
  • openSUSE 13.2.

Para que ele execute no Host alguns pacotes necessitam ser instalados.

Ubuntu e Debian:

Fedora:

openSUSE:

CentOS:

Montando o Ambiente de construção

Vamos criar os diretórios e baixar os fontes necessários:

Note que estamos usando a versão "fido"  do Yocto Project. E baixamos também o layer meta-raspberrypi  que possui o BSP (Board Support Package) com os fontes necessários (bootloader, kernel, bibliotecas para o acelerador gráfico, etc.) para rodar a nossa distribuição na Raspberry Pi 2. Além disso iremos utilizar os layers meta-qt5 (que possuem as receitas para compilar o Qt5), meta-openembedded (com aplicativos adicionais) e o meta-embarcados (com as customizações necessárias para gerarmos a imagem de testes).

Agora vamos configurar o ambiente para gerarmos os artefatos de software:

Edite o arquivo ~/yocto/build-fido/conf/bblayers.conf  para que fique da seguinte maneira:

O arquivo bblayers.conf configura quais serão as camadas a serem consideradas pelo sistema de build.

Adicione as seguintes variáveis no começo do arquivo ~/yocto/build-fido/conf/local.conf

Note que configuramos nossa machine como sendo a raspberrypi2, mudamos o diretório de download para podermos reutilizar os fontes baixados em outros projetos e usaremos o gerenciador de pacotes ipk (ele é mais indicado para sistemas embarcados porque não exige muitos recursos para funcionar). Além disso configuramos a GPU para usar 128MB de memória RAM.

NOTA: Se você quiser fazer este tutorial para a Raspberry Pi (modelos antigos), basta trocar o texto "rapberrypi2" por "raspberrypi".

Gerando a imagem com Qt5

Depois de baixado os fontes e ter configurado o sistema de build , vamos gerar uma imagem com diversos aplicativos de demostração (qt5-image-demo) do Qt5 (no momento de escrita desse artigo a versão do Qt utilizada é a 5.4.1).

Esta é a configuração de build que foi utilizada:

Gravando a imagem

A camada meta-raspberrypi possui uma classe que implementa a construção da imagem do sistema a ser gravada diretamente em um SDcard.

O Yocto gerou a imagem do SDcard que está disponível em: ~/yocto/build-fido/tmp/deploy/images/raspberrypi2/ . De posse desse arquivo podemos gravá-lo no SDcard.

Insira um SDcard card no computador PC ou notebook (sistema host) e descubra qual o device node criado pelo sistema operacional. Tente um dos seguintes comandos:

Caso, por exemplo, o device node criado seja /dev/sdb, use o seguinte comando:

Testando a imagem

Remova o SDcard do computador e insira-o na Rpi, conecte-a a uma TV por um cabo HDMI, e a um mouse através do conector USB da placa. Você precisará acessar o sistema via conexão serial. Para fazer a conexão entre o HOST e a Rpi siga os passos dessa wiki.

Abaixo segue o log da serial depois do boot do sistema:

Vamos rodar o Qt5 Cinematic Experience que é um exemplo bastante interessante que visa explorar diversos recursos usando aceleração gráfica por hardware. Para isso faça o login como root e execute o programa: 

Note que subimos o aplicativo com a opção "-platform eglfs", isso configura o Qt para utilizar o OpenGL através do pluging EGLFS.

A figura 1 mostra um screenshot do Qt5 Cinematic Experience.

raspberry pi 2 qt5 yocto cinematic experience
Figura - 1 Qt Cinematic Experience

Agora vamos rodar o exemplo do QtSmartHome:

A figura 2 mostra um screenshot do QtSmartHome:

raspberry pi 2 qt5 yocto smart home
Figura 2 - QtSmatHome

Agora vamos rodar o exemplo Qt5EveryWhereDemo:

A figura 3 mostra um screenshot do Qt5EveryWhereDemo:

raspberry pi 2 qt5 yocto qt5everywheredemo
Figura 3 - QtDemo

Aproveite para explorar os diversos exemplos presentes no caminho /usr/share/qt5 e lembre-se de sempre passar a opção "-platform eglfs" quando carregar os programas.

Dicas e Truques

Para remover o cursor piscante na tela rode o comando:

Para desabilitar o desligamento da saída de vídeo rode o comando:

O que vem por aí

Na próxima parte veremos como gerar uma toolchain com o Qt5 para ser integrada a IDE QtCreator para desenvolvimento e compilação das aplicações Qt.

Saiba mais

Desvendando Yocto Project – Primeiros passos

Raspberrypi + Yocto

Raspberry pi + Qt5 + Yocto 

Outros artigos da série

Qt5.4 na Raspberry Pi 2 com Yocto Project (fido) - Parte 2 >>
Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.

Receba os melhores conteúdos sobre sistemas eletrônicos embarcados, dicas, tutoriais e promoções.

Linux Embarcado » Qt5.4 na Raspberry Pi 2 com Yocto Project (fido) - Parte 1
Comentários:
Notificações
Notificar
guest
62 Comentários
recentes
antigos mais votados
Inline Feedbacks
View all comments
Michele
Michele
14/02/2016 19:05

Hi Diego, I got this problem:
NOTE: Applying patch '0060-gcc-var-tracking.c-backport-from-gcc-trunk-r212178.patch' (../poky-fido-1.8/meta-embarcados/recipes-devtools/gcc/gcc-source-4.9/0060-gcc-var-tracking.c-backport-from-gcc-trunk-r212178.patch)

ERROR: Command Error: exit status: 1 Output:

Applying patch 0060-gcc-var-tracking.c-backport-from-gcc-trunk-r212178.patch

patching file gcc/var-tracking.c

Hunk #1 FAILED at 5997.

Can you help me?

Thanks

Michele

dailydols
dailydols
18/10/2015 18:24

I get some errors during bitbake for qt5-image-demo: ERROR: Function failed: do_install (log file is located at /home/yocto/yocto/build-fido/tmp/work/x86_64-linux/mklibs-native/0.1.40-r0/temp/log.do_install.19750) ERROR: Logfile of failure stored in: /home/yocto/yocto/build-fido/tmp/work/x86_64-linux/mklibs-native/0.1.40-r0/temp/log.do_install.19750 Log data follows: | DEBUG: Executing shell function do_install | NOTE: make -j 4 DESTDIR=/home/yocto/yocto/build-fido/tmp/work/x86_64-linux/mklibs-native/0.1.40-r0/image install | make: *** No rule to make target `install'. Stop. | ERROR: oe_runmake failed The "image" folder is empty, and seems to get cleared before I run bitbake, same for e2fsprogs-native, so unpacking the downloaded tar.gz into the folder also does not help. And the qwebkit fails to fetch. qtwebkit-5.4.2+gitAUTOINC+ea590d74ea-r0 do_fetch (pid 19880) Is there something that be done… Leia mais »

T K Saha
T K Saha
12/10/2015 05:57

Qt demos are running nicely. Thanx. Please suggest, how to make use of GPIO of RPi2 from Qt? WiringPi is an option. But, how to include that in this build?

Diego Sueiro
Diego Sueiro
Reply to  T K Saha
13/10/2015 11:37

Saha,

On your local.conf put:
IMAGE_INSTALL += "wiringpi"

T K Saha
T K Saha
Reply to  Diego Sueiro
14/10/2015 08:02

Where is the wiringPi image? Its source code is available at their site. If I have to use that source code, what steps do I have to follow?

Diego Sueiro
Diego Sueiro
Reply to  T K Saha
14/10/2015 08:44

There is already a recipe for wiringpi on Yocto:

http://git.yoctoproject.org/cgit/cgit.cgi/meta-raspberrypi/tree/recipes-devtools/wiringPi/wiringpi_git.bb?h=fido

You just need to put at IMAGE_INSTALL, as I told you before.

T K Saha
T K Saha
Reply to  Diego Sueiro
14/10/2015 11:52

Thanks. I'll try. Is there any list of recipe for RPi available on Yocto?

Diego Sueiro
Diego Sueiro
Reply to  T K Saha
14/10/2015 12:06
T K Saha
T K Saha
Reply to  Diego Sueiro
15/10/2015 01:36

Thanks. With IMAGE_INSTALL += "wiringpi" in local.conf, I have created the image. bitbake only added wiringpi to the existing image. But now it does not boot. I see only four Raspberry images on top-left. What could be wrong?

Diego Sueiro
Diego Sueiro
Reply to  T K Saha
15/10/2015 08:33

Do you have access to the system terminal console?
If yes, post the boot messages.

Diego Sueiro
Diego Sueiro
Reply to  Diego Sueiro
15/10/2015 08:45

Are you using Raspberry Pi 2?
If so, I think you'd have to use the most recent version of wiringpi.
To do so, edit it's recipe (meta-raspberrypi/recipes-devtools/wiringPi/wiringpi_git.bb) with:
SRCREV = "d79506694d7ba1c3da865d095238289d6175057d"

But maybe it's not going to build cleanly, since Yocto recipe has a patch on the wiringpi Makefile and probably it's going to fail on patch task.

T K Saha
T K Saha
Reply to  Diego Sueiro
17/10/2015 09:21

As you predicted it failed while patching. Any other solution? ERROR: Command Error: exit status: 1 Output: Applying patch Makefiles-install.patch patching file examples/Makefile Hunk #1 FAILED at 26. 1 out of 1 hunk FAILED -- rejects in file examples/Makefile patching file gpio/Makefile Hunk #1 FAILED at 23. Hunk #2 FAILED at 61. 2 out of 2 hunks FAILED -- rejects in file gpio/Makefile patching file wiringPi/Makefile Hunk #1 FAILED at 25. Hunk #2 FAILED at 67. Hunk #3 FAILED at 89. 3 out of 3 hunks FAILED -- rejects in file wiringPi/Makefile Patch Makefiles-install.patch does not apply (enforce with -f)… Leia mais »

Diego Sueiro
Diego Sueiro
Reply to  T K Saha
17/10/2015 09:36

You have to understand the patch and update it to the newer version of that package.
After the rework, update the Makefiles-install.patch file.

T K Saha
T K Saha
Reply to  Diego Sueiro
15/10/2015 10:32

Yes, I am using RPi2. Is system terminal console means serial port debug output? If so, I'll connect a serial cable and try to get the messages.

T K Saha
T K Saha
Reply to  T K Saha
15/10/2015 10:52

Following is the boot messages [ 0.000000] Booting Linux on physical CPU 0xf00 [ 0.000000] Initializing cgroup subsys cpu [ 0.000000] Initializing cgroup subsys cpuacct [ 0.000000] Linux version 3.18.5 ([email protected]) (gcc version 4.9.2 (GCC) ) #1 SMP PREEMPT Sat Sep 26 01:57:59 IST 2015 [ 0.000000] CPU: ARMv7 Processor [410fc075] revision 5 (ARMv7), cr=10c5387d [ 0.000000] CPU: PIPT / VIPT nonaliasing data cache, VIPT aliasing instruction cache [ 0.000000] Machine model: Raspberry Pi 2 Model B [ 0.000000] cma: Reserved 8 MiB at 0x36800000 [ 0.000000] Memory policy: Data cache writealloc [ 0.000000] On node 0 totalpages: 225280 [… Leia mais »

Diego Sueiro
Diego Sueiro
Reply to  T K Saha
15/10/2015 13:22

I don't think that the problem is related to wiringpi package.

I suggest you to burn sdcard again and if it's reproduced, generate another image without wirinpi and test again.

T K Saha
T K Saha
Reply to  Diego Sueiro
17/10/2015 08:00

I tried many times, without wiringPi no problem, with wiringPi it does not boot. Even though there is no error while building. Is the boot image getting corrupted? Do I need to rebuild the whole image from the beginning?

Diego Sueiro
Diego Sueiro
Reply to  T K Saha
17/10/2015 08:13

Maybe it's because the version of wiringpi in the Yocto recipe is not compatible with Rpi2.

See my comment below and try to build the most recent version of wiringpi.

Vinicius Maciel
vinifr
13/08/2015 11:46

Diego, esses aplicativos de teste do QT rodam a partir de uma interface gráfica que já vem no Yocto(Xfce,Gnome), a partir de Directfb ou algo do próprio QT?

Diego Sueiro
Diego Sueiro
Reply to  vinifr
13/08/2015 16:01

Vinicius,

Tudo vai depender dos plugins de plataforma do QT que vc tiver instalado no target.

Nesse tutorial estamos compilando com suporte a eglfs.

Se quiser usar em conjunto com o Xfce/Gnome, você terá que compilar o qtbase com suporte ao plugin xcb, e para o Directfb terá que adicionar o plugin do diretcfb.

No link abaixo você pode ter uma ideia tos tipois de configurações que podem ser aplicadas na hora de compilar o Qt:
https://github.com/meta-qt5/meta-qt5/blob/fido/recipes-qt/qt5/qtbase_git.bb#L44

Michael
Michael
10/07/2015 05:46

I'm trying to run this tutorial, but I keep getting the following error:

ERROR: No recipes available for:
/home/MYHOME/yocto/poky/meta-embarcados/recipes-browser/chromium/chromium_%.bbappend

Summary: There was 1 ERROR message shown, returning a non-zero exit code.

Running nano /home/MYHOME/yocto/poky/meta-embarcados/recipes-browser/chromium/chromium_%.bbappend gives me this:
LDFLAGS += "-Wl,--no-keep-memory"
PARALLEL_MAKE = "-j 4"

(same error happens on the RPi 1 tutorial)

Diego Sueiro
Diego Sueiro
Reply to  Michael
10/07/2015 07:31

Michael,

To bypass this put the following line on your conf/local.conf:
BBMASK = "meta-embarcados/recipes-browser/chromium/chromium_%.bbappend"

Michael
Michael
Reply to  Diego Sueiro
10/07/2015 15:14

That did it. Thank you. Now I get the following, after a while:

WARNING: Failed to fetch URL http://kernel.org/pub/linux/kernel/v3.0/linux-3.19.tar.xz, attempting MIRRORS if available
ERROR: Fetcher failure: Fetch command failed with exit code 4, output:
wget: unable to resolve host address 'kernel.org'

ERROR: Function failed: Fetcher failure for URL: 'http://kernel.org/pub/linux/kernel/v3.0/linux-3.19.tar.xz'. Unable to fetch URL from any source.
ERROR: Logfile of failure stored in: /home/MYHOME/yocto/build-fido/tmp/work/cortexa7hf-vfp-vfpv4-neon-poky-linux-gnueabi/linux-libc-headers/3.19-r0/temp/log.do_fetch.18253
ERROR: Task 861 (/home/MYHOME/yocto/build-fido/../poky-fido/meta/recipes-kernel/linux-libc-headers/linux-libc-headers_3.19.bb, do_fetch) failed with exit code '1'

joël maranhão
26/06/2015 08:25

Hey there! Any way to test sound output on Raspberry Pi2? Does any of the Qt5 example applications have sound? Cheers!!

Diego Sueiro
Diego Sueiro
Reply to  joël maranhão
26/06/2015 09:19

Take a look at: /usr/share/qt5/examples/multimedia/

joël maranhão
19/06/2015 16:39

Hey there, On Ubuntu 14.04 getting this message, any suggestion? ... linking bin/qmake + ret=0 + trap 0 + exit 0 NOTE: Tasks Summary: Attempted 2472 tasks of which 3 didn't need to be rerun and 1 failed. Waiting for 0 running tasks to finish: Summary: 1 task failed: /home/joel/yocto/build-fido/../poky-fido/meta-raspberrypi/recipes-multimedia/omxplayer/omxplayer_git.bb, do_compile Summary: There were 4 WARNING messages shown. Summary: There was 1 ERROR message shown, returning a non-zero exit code. ok the error happened around here (getting how to find logs, that's progress already right?) [email protected]:~/yocto$ find . -name log.do_compile | grep omxplayer ./build-fido/tmp/work/cortexa7hf-vfp-vfpv4-neon-poky-linux-gnueabi/omxplayer/git-r3/temp/log.do_compile and here the tail of the… Leia mais »

joël maranhão
Reply to  joël maranhão
20/06/2015 03:43

... and the error mysteriously disappeared after a second run (??) - Let's mark it as RESOLVED!

Ciro Peixoto
Ciro Peixoto
15/06/2015 12:37

Beleza de artigo!!! - Vou destrinjar mais tarde, porem fica o Parabens!!!

E parabens tambem pelo gosto musical!!!

Diego Sueiro
Diego Sueiro
Reply to  Ciro Peixoto
15/06/2015 13:12

Obrigado pelo apoio Ciro.

Se tiver problemas avise por aqui.

joël maranhão
11/06/2015 19:24

Here you go Chromium Web Engine running on RPi2!!! Thanks Diego, Thanks Embarcados! import QtQuick 2.1 import QtQuick.Controls 1.1 import QtWebEngine 1.0 ApplicationWindow { width: 1280 height: 720 color: "lightgray" visible: true WebEngineView { id: webview url: "http://embarcados.com.br/raspberry-pi-2-qt5-qt-creator-yocto-fido/" anchors.fill: parent } } Run [email protected]:~# /usr/bin/qt5/qmlscene --platform eglfs chromium.qml Now if I changed the URL to http://duckduckgo.com or http://google.com ... it never loads but I will call it a day 😉 UPDATE I have tested several websites, I think I was lucky to have started with your website. It could be something about the fonts ... but sometimes I also get… Leia mais »

Diego Sueiro
Diego Sueiro
Reply to  joël maranhão
11/06/2015 20:04

Send some Screenshots.
😉

joël maranhão
11/06/2015 07:04

Hello there
Why not GPU_MEM = "1024" in your local.conf?

Diego Sueiro
Diego Sueiro
Reply to  joël maranhão
11/06/2015 07:10

Why do you want ot allocate all system memory to GPU?
It does not make any sense.

On my tests 128MB for GPU is enough to get a good performance on the accelerated graphics.

joël maranhão
Reply to  Diego Sueiro
11/06/2015 07:14

No you are right I don't know what I was thinking.

I guess I was wondering if Chromium Web Engine will be more demanding on memory though. I think I saw a post where they set mem to 512, but I am not sure on which ground they'd do that. I am not an embedded system specialist.

Talvez você goste:

Séries



Outros da Série

Menu

WEBINAR
 

Soluções inteligentes para acionamento de MOSFETs/IGBTs com família STDRIVE

Data: 08/10 às 15:00h - Apoio: STMicroelectronics
 
INSCREVA-SE AGORA »



 
close-link