Raspberry pi + Qt5 + Yocto – parte 2

rpi-yocto-qt5

Na primeira parte da série vimos como configurar o ambiente e gerar uma distribuição Linux Embarcado com Qt5 para Raspberry pi usando aceleração gráfica por hardware com o Yocto Project.

 

Agora vamos aprender como gerar e configurar as ferramentas necessárias para o desenvolvimento de aplicações Qt que serão executadas no nosso target, a Raspberry Pi. Basicamente precisaremos de uma toolchain contendo os utilitários e bibliotecas para podermos "cross-compilar" as aplicações desenvolvidas através da IDE Qt Creator.

 

Aprenda mais sobre Linux Embarcado e Yocto Project com os vídeos das palestras do "Seminário Linux Embarcado 2015"

 

 

 

Gerando a Toolchain para Qt5

 

É importante que você tenha realizado todos passos descritos no primeiro artigo da série.

 

Para gerarmos a toolchain devemos carregar as variáveis de ambiente do Yocto e instruí-lo a construir a toolchain para o Qt5.

 

O instalador da toolchain gerado está disponível em: ~/yocto/build-daisy/tmp/deploy/sdk/ e serve tanto para construção de aplicações Qt5 quanto para aplicações Linux que não utilizam o Qt.

 

 

Instalando a Toolchain

 

Vamos executar o script com a opção de instalação no caminho padrão sugerido.

 

Após a instalação nossa toolchain estará disponível em: /opt/poky/1.6.2/ .

 

 

Instalando o Qt Creator

 

Vamos baixar a versão 3.2.2 e instala-lá utilizando as opções padrão sugeridas:

 

 

Configurando o Qt Creator

 

Vamos realizar as configurações necessárias para que o Qt Creator utilize a toolchain que geramos. Feche o programa caso ele esteja aberto.

 

A primeira coisa a ser feita é adicionar as variáveis de ambiente da toolchain no script de inicialização do Qt Creator. Para isso adicione o conteúdo abaixo na primeira linha do arquivo ~/qtcreator-3.2.2/bin/qtcreator.sh.

 

O resultado final do arquivo ~/qtcreator-3.2.2/bin/qtcreator.sh. deve ser:

 

Agora vamos executar o Qt Creator. É importante dizer que SEMPRE que formos abrir o programa utilizaremos o comando abaixo, caso contrário o Qt Creator não funcionará corretamente com a toolchain gerada:

 

A figura abaixo mostra a tela inicial do aplicativo:

 

Raspberry Pi Qt5: QtCreator
Figura 1: Tela do Qt

 

Agora vamos criar um Kit contendo as informações do nosso target (Raspberry pi) e da nossa toolchain. Siga os passos descritos abaixo:

 

Ao final desses procedimentos devemos ter a tela de configuração das opções "Build & Run" semelhante a essa:

 

Raspberry Pi Qt5: Adicionando kit no QtCreator
Figura 2: Build and Run

 

 

Compilando uma aplicação

 

Como não poderia deixar de ser, vamos criar uma aplicação "Hello World". Execute os seguintes comandos no shell:

 

Teremos um arquivo de projeto ~/qt5-helloworld/helloworld.pro:

 

E um código fonte da aplicação ~/qt5-helloworld/hello.cpp:

 

Vamos importar nosso projeto para dentro do Qt Creator. Para isso, vá em "File" -> "Open File or Project", e selecione o arquivo ~/qt5-helloworld/helloworld.pro.

 

Na próxima tela aparecerá qual Kit deverá ser utilizado, se você marcou o Kit Rpi como default ("Make Default") na seção anterior ele já estará selecionado. Para finalizar clique em "Configure Project".

 

 Agora vamos construir a aplicação em "Build" -> "Build Project helloworld"

 

 

Testando a aplicação 

 

Copie o binário gerado pelo Qt Creator em ~/qt5-helloworld/build-qt5-helloworld-Rpi-Debug/hello para a raíz de um pendrive.

 

Insira o pendrive na Raspberry Pi, plugue um cabo conversor USB Serial e abra uma conexão serial.

 

Insira o microSD card gerado na primeira parte dessa série, conecte a Rpi a uma TV através de uma cabo HDMI, conecte o pendrive com o binário gerado e energize a placa, logue como root e execute os seguintes comandos:

 

Note que rodamos a aplicação com os parâmetros "-platform eglfs", isso indica ao Qt que ele deve rodar utilizando o plugin de plataforma EGLFS.

 

A TV ficará com a seguinte imagem:

 

Raspberry Pi Qt5: Hello Qt!
Figura 3 - Saida de video - Hello Qt!

 

Notem que está escrito no canto esquerdo da tela a frase: "Hello Qt!"

 

 

Conclusão

 

Com as partes 1 e 2 desse tutorial é possível gerar uma distribuição Linux embarcado customizado usando o Qt5 com aceleração gráfica por hardware para a Raspberry pi e desenvolver aplicações sem muitas complicações.

 

Se você é novato no mundo de programação Qt, sugiro que dê uma lida no material Qt for beginners .

 

 

Para saber mais

 

Embedded Linux Build Systems

Cozinhando com o Yocto Project

Desvendando Yocto Project – Primeiros passos

BeagleBone Black + Yocto

Beaglebone Black + Yocto Daisy (Versão 1.6)

Lançada Nova Versão 1.7 (dizzy) do Yocto Project

Raspberrypi + Yocto

Desenvolvendo um Kiosk Interativo para a Beaglebone Black com Yocto – parte 1

Desenvolvendo um Kiosk Interativo para a Beaglebone Black com Yocto – parte 2

Desenvolvendo um Kiosk Interativo para a Beaglebone Black com Yocto – parte 3

Beaglebone Black + Qt Embedded + Yocto – parte 1

Beaglebone Black + Qt Embedded + Yocto – parte 2

Beaglebone Black + Qt5 + Yocto - parte 1

Beaglebone Black + Qt5 + Yocto - parte 2

Raspberry pi + Qt5 + Yocto - parte 1

Raspberry pi + Qt5 + Yocto - parte 2

Formado em Engenharia de Controle e Automação pela UNIFEI e CEO do Embarcados, atualmente trabalho na Inglaterra com Desenvolvimento de Sistemas Linux Embarcado Real Time. Sou consultor e desenvolvedor de software para Sistemas Embarcados com vasta experiência em projetos com processadores de 8bits a 32bits, sistemas bare metal, RTOS, Linux Embarcado e Android Embarcado. Um apaixonado por Pink Floyd e Empreendedorismo.

Deixe um comentário

60 Comentários em "Raspberry pi + Qt5 + Yocto – parte 2"

Notificar
avatar
 
Ordenar por:   recentes | antigos | mais votados
Alejadro
Visitante
Alejadro

hello i'm from mexico, i followed the tutorial but when i generate the bitbake meta-toolchain-qt command my project don´t generate the sdk folder

MoStEfA
Visitante
MoStEfA

Hello,

Thank you for this tutorial,

Is there anyway to make ssh connection instead of serial connection , internet led is off, and i can not made ssh or ftp connection do you have any idea?

Vinicius Maciel
Membro
Vinicius Maciel

Ola Diego,

Voce pode me passar o conteúdo de environment-setup-armv6-vfp-poky-linux-gnueabi, pois fiz um cross compile do QT5(sem Yocto), mas o QTCreator não compila.

Tive um problema de falta de espaço na hora de gerar o toolchain(Yocto+QT), você sabe quando de espaço total precisa?

joël maranhão
Visitante
joël maranhão
On the **Poky** branch when trying to build my toolchain otto@marvin:~/yocto/build$ bitbake meta-toolchain-qt5 I am now getting a new Error. I will pursue this one in the morning, but looks like I may need to add the Wayland module to my image(?): ... | Project ERROR: No module claims plugin type 'waylandcompositors' | make[4]: *** [sub-brcm-egl-make_first] Error 3 | make[4]: Leaving directory /home/otto/yocto/build/tmp/work/cortexa7hf-vfp-vfpv4-neon-poky-linux-gnueabi/qtwayland/5.4.1-r0/build/src/plugins/hardwareintegration/compositor' | make[3]: *** [sub-compositor-make_first] Error 2 | make[3]: *** Waiting for unfinished jobs.... | make[4]: Entering directory /home/otto/yocto/build/tmp/work/cortexa7hf-vfp-vfpv4-neon-poky-linux-gnueabi/qtwayland/5.4.1-r0/build/src/plugins/platforms/qwayland-brcm-egl' | make[4]: Nothing to be done for first'. | make[4]: Leaving directory /home/otto/yocto/build/tmp/work/cortexa7hf-vfp-vfpv4-neon-poky-linux-gnueabi/qtwayland/5.4.1-r0/build/src/plugins/platforms/qwayland-brcm-egl' | make[3]: Leaving directory /home/otto/yocto/build/tmp/work/cortexa7hf-vfp-vfpv4-neon-poky-linux-gnueabi/qtwayland/5.4.1-r0/build/src/plugins/platforms' | make[5]: Entering directory /home/otto/yocto/build/tmp/work/cortexa7hf-vfp-vfpv4-neon-poky-linux-gnueabi/qtwayland/5.4.1-r0/build/src/plugins/hardwareintegration/client/brcm-egl' | make[5]: Nothing to be done for first'. | make[5]: Leaving directory /home/otto/yocto/build/tmp/work/cortexa7hf-vfp-vfpv4-neon-poky-linux-gnueabi/qtwayland/5.4.1-r0/build/src/plugins/hardwareintegration/client/brcm-egl' | make[4]: Leaving directory /home/otto/yocto/build/tmp/work/cortexa7hf-vfp-vfpv4-neon-poky-linux-gnueabi/qtwayland/5.4.1-r0/build/src/plugins/hardwareintegration/client' | make[3]: Leaving directory /home/otto/yocto/build/tmp/work/cortexa7hf-vfp-vfpv4-neon-poky-linux-gnueabi/qtwayland/5.4.1-r0/build/src/plugins/hardwareintegration' | make[2]: *** [sub-hardwareintegration-make_first] Error 2 | make[2]: Leaving directory /home/otto/yocto/build/tmp/work/cortexa7hf-vfp-vfpv4-neon-poky-linux-gnueabi/qtwayland/5.4.1-r0/build/src/plugins' | make[1]:… Leia mais »
joël maranhão
Visitante
joël maranhão

Quando lanço

bitbake meta-toolchain-qt5

tenho o erro seguinte


...
Configuring libsegfault.
Configuring libgcov-dev.
Configuring glibc-gconv-iso8859-15.
Configuring glibc-gconv-iso8859-1.
Configuring packagegroup-core-standalone-sdk-target.
Collected errors:
* satisfy_dependencies_for: Cannot satisfy the following dependencies for packagegroup-qt5-toolchain-target:
* qtwebkit (= 5.3.2-r0) * qtwebkit-mkspecs * qtwebkit-qmlplugins *
* opkg_install_cmd: Cannot install package packagegroup-qt5-toolchain-target.
ERROR: Function failed: do_populate_sdk
ERROR: Logfile of failure stored in: /home/otto/yocto/build-dizzy/tmp/work/cortexa7t2hf-vfp-vfpv4-neon-poky-linux-gnueabi/meta-toolchain-qt5/1.0-r0/temp/log.do_populate_sdk.27897
ERROR: Task 7 (/home/otto/yocto/build-dizzy/../poky-dizzy/meta-qt5/recipes-qt/meta/meta-toolchain-qt5.bb, do_populate_sdk) failed with exit code '1'
NOTE: Tasks Summary: Attempted 3231 tasks of which 2654 didn't need to be rerun and 1 failed.
No currently running tasks (3231 of 3232)
Summary: 1 task failed:
/home/otto/yocto/build-dizzy/../poky-dizzy/meta-qt5/recipes-qt/meta/meta-toolchain-qt5.bb, do_populate_sdk
Summary: There were 2 WARNING messages shown.
Summary: There were 2 ERROR messages shown, returning a non-zero exit code.

qtwebkit-qmlplugins aparece em dois archivos

$ sudo grep -R qtwebkit-qmlplugins *
meta-qt5/recipes-qt/qt5/qtwebkit-examples.inc:RDEPENDS_${PN}-examples += "qtwebkit-qmlplugins"
meta-qt5/recipes-qt/packagegroups/packagegroup-qt5-toolchain-target.bb: qtwebkit-qmlplugins

alguma ideia de porque teve erro? obrigado

trackback
Projeto de Kiosk Interativo para a Beaglebone Black com Yocto - parte 1

[…] Raspberry pi + Qt5 + Yocto - parte 2 […]

trackback
Desvendando Yocto Project - Primeiros passos

[…] Raspberry pi + Qt5 + Yocto - parte 2 […]

trackback
Lançada Nova Versão 1.8 (fido) do Yocto Project

[…] Raspberry pi + Qt5 + Yocto - parte 2 […]

ilteo
Visitante
ilteo

Hi I'm Matt from Italy, I made everything working fine but my qml app (simple draw of a item with a label in it) won't display, it load correctly but it shows no logs at all, just a blank screen. Have you ever tried to write a simple qml application?

trackback
Desenvolvendo um Kiosk Interativo para a Beaglebone Black com Yocto - parte 2 - Embarcados - Sua fonte de informações sobre Sistemas Embarcados

[…] Raspberry pi + Qt5 + Yocto - parte 2 […]

wpDiscuz