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

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:

Na primeira parte da série vimos como configurar o ambiente e gerar uma distribuição Linux Embarcado com Qt5 para Raspberry Pi 2 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 2. 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.

 

 

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-fido/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.8/ .

 

 

Instalando o Qt Creator

 

Vamos baixar a versão 3.4.0 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.4.0/bin/qtcreator.sh:

 

 

O resultado final do arquivo ~/qtcreator-3.4.0/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 2 qt5 qt creator yocto
Figura 1 - Qt Creator

 

Agora vamos criar um Kit contendo as informações do nosso target (Raspberry Pi 2) 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 2 qt5 qt creator yocto
Figura 2 - Qt Creator com a Raspberri Pi 2 Configurada

 

 

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 Rpi2 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-Rpi2-Debug/hello para a raíz de um pendrive ou envie via scp para a placa.

 

Insira o pendrive na Raspberry Pi 2, 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 2 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 2 qt5 qt creator yocto
Figura 3 - Qt5 Helloworld

 

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

 

 

Conclusão

 

Com ambas as partes 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 2 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.

 

 

Saiba mais

 

Embedded Linux Build Systems

Desvendando Yocto Project – Primeiros passos

Raspberry pi + Qt5 + Yocto - parte 1

 

Outros artigos da série

<< Qt5.4 na Raspberry Pi 2 com Yocto Project (fido) - Parte 1
Este post faz da série Qt5.4 na Raspberry Pi 2 com Yocto Project. Leia também os outros posts da série:
NEWSLETTER

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

Obrigado! Sua inscrição foi um sucesso.

Ops, algo deu errado. Por favor tente novamente.

Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.

Diego Sueiro
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.

25
Deixe um comentário

avatar
 
5 Comment threads
20 Thread replies
0 Followers
 
Most reacted comment
Hottest comment thread
4 Comment authors
Vinicius MacielÁtila SantosDiego Sueirojoël maranhãoqt - bitbake meta-toolchain-qt5 failed, cannot satisfy x11 although feature was removed - CSS PHP Recent comment authors
  Notificações  
recentes antigos mais votados
Notificar
trackback

[…] qt5 toolchain raspberry pi2 qt apps using yocto see tutorial. build machine nuc debian […]

Átila Santos
Visitante
Átila Santos

Olá Diego,
Realizei passo a passo deste tutorial, mas durante a compilação, o Qt apresenta o seguinte erro:
c: command not found
Ao que me parece, o compilador não está configurado, mas está. Fui lá em Tools, options, build & run e configurei o compiler, debuggers, Qt version e Kits, mesmo assim, o erro não desaparece.
Sabe o que pode estar acontecendo?

Vinicius Maciel
Visitante
vinifr

Ola Atila,

Eu tive esse mesmo problema, ai descobri que o caminho da variável environment-setup-cortexa7hf-vfp-vfpv4-neon-poky-linux-gnueabi estava incorreto. Depois de colocar o caminho correto, funcionou.

Átila Santos
Visitante
Átila Santos

Ola vinifr,

O arquivo environment-setup-cortexa7hf-vfp-vfpv4-neon-poky-linux-gnueabi se encontra na pasta /opt/poky/1.8.

Em qual arquivo ou onde consigo editar o caminho desta variável para que fique correto?

;D

Vinicius Maciel
Visitante
vinifr

Dentro do arquivo qtcreator.sh. No meu caso, no artigo estava /opt/poky/1.6.2, mas a versão que instalei era 1.6.3. Mas isso na Raspberry B: http://www.embarcados.com.br/raspberry-pi-qt5-yocto-parte-2/

Átila Santos
Visitante
Átila Santos

Muito obrigado! Consegui resolver o problema com a sua ajuda!

Abraços!

joël maranhão
Visitante

In Figura 2 in the Device field, I don't have any options. Do I need to add a device clicking Manage... or will it be unnecessary?

Diego Sueiro
Visitante
Diego Sueiro

Click on manage and create a new one.
It's nit this tutorial but you can configure extra settings do connect to the board and perform remote debugging, for example.

joël maranhão
Visitante

Until I figure out the meta-toolchain-qt5 build issue, I would like to try out Wayland see if how it does with QtWebEngine.

So now I have DISTRO_FEATURES_remove = "x11" in my ~/yocto/build/conf/local.conf and I added qtwayland module to the image. Well Is that the correct way to do it? (it's compiling so far).

Looks I may need to do something else to add the Wayland plugin for Qt. Any pointers?

Diego Sueiro
Visitante
Diego Sueiro

Joel,

As far as I know there isn't any support for wayland on Rpi.

I don't have knowledge on Wayland, sorry.

joël maranhão
Visitante

I think I remember trying some test image a couple of months ago. Nevermind, this is really not critical for me. I was just interested, but I think you are right.

FYI here a link about Weston Wayland
http://wayland.freedesktop.org/raspberrypi.html

joël maranhão
Visitante

**Part 1** seems to have succeeded well with QtWebEngine + QML plugin. I will test again now. I still got a problem with toolchain. I hope I haven't missed something this time. I have bitbake meta-toolchain-qt5 ERROR: Unable to install packages. Command '/home/otto/yocto/build/tmp/sysroots/x86_64-linux/usr/bin/opkg-cl -f /home/otto/yocto/build/tmp/work/cortexa7hf-vfp-vfpv4-neon-poky-linux-gnueabi/meta-toolchain-qt5/1.0-r0/opkg.conf -o /home/otto/yocto/build/tmp/work/cortexa7hf-vfp-vfpv4-neon-poky-linux-gnueabi/meta-toolchain-qt5/1.0-r0/sdk/image/opt/poky/1.8/sysroots/cortexa7hf-vfp-vfpv4-neon-poky-linux-gnueabi --force_postinstall --prefer-arch-to-version install packagegroup-core-standalone-sdk-target-dbg packagegroup-core-standalone-sdk-target packagegroup-qt5-toolchain-target' returned 255: Installing packagegroup-core-standalone-sdk-target-dbg (1.0-r8) on root. ... ... Configuring packagegroup-core-standalone-sdk-target. Collected errors: * satisfy_dependencies_for: Cannot satisfy the following dependencies for packagegroup-qt5-toolchain-target: * libx11-6 (>= 1.6.2) * libxcb1 (>= 1.11) * libxau6 (>= 1.0.8) * libxdmcp6 (>= 1.1.1) * * opkg_install_cmd: Cannot install package packagegroup-qt5-toolchain-target. ERROR: Function… Leia mais »

Diego Sueiro
Visitante
Diego Sueiro

Do you have added this line to local.conf?
DISTRO_FEATURES_remove = "x11 wayland"

joël maranhão
Visitante

Yeah I did, this is what I added at the top of the default file ... but my "default" has a lot more line that I didn't touch ... may be that's the issue


[email protected]:~/yocto/build/conf$ ls -al local.conf
-rw-r--r-- 1 otto otto 10259 Jun 11 06:39 local.conf

MACHINE = "raspberrypi2"
LICENSE_FLAGS_WHITELIST="commercial license"
DISTRO = "poky"
DL_DIR = "${TOPDIR}/../dl"
PACKAGE_CLASSES = "package_ipk"
DISTRO_FEATURES_remove = "x11 wayland"

# Set Rpi GPU Memory to 128MB
GPU_MEM = "128"

joël maranhão
Visitante

still fighting this issue (even on a Sunday), I am guessing that it should have been straight forward. At the top of the log I found this additional message that may be relevant, but it didn't raise a hint on my side. May be it does on yours. [email protected]:~/yocto/build$ bitbake meta-toolchain-qt5 Loading cache: 100% |##############################################################################################################################################################################################| ETA: 00:00:00 Loaded 2025 entries from dependency cache. NOTE: Resolving any missing task queue dependencies Build Configuration: BB_VERSION = "1.26.0" BUILD_SYS = "x86_64-linux" NATIVELSBSTRING = "Debian-7.8" TARGET_SYS = "arm-poky-linux-gnueabi" MACHINE = "raspberrypi2" DISTRO = "poky" DISTRO_VERSION = "1.8" TUNE_FEATURES = "arm armv7a vfp thumb neon… Leia mais »

joël maranhão
Visitante

OK my 2 cents is that your Ubuntu 14.04 environment has the correct version of libx11-6 i.e. >= 1.6.2, I think it mysteriously needs it even if removed from the distro. I hope this is not a completely silly diagnose.

Do you mind running this command on your machine?


$ apt-cache policy libx11-6

Diego Sueiro
Visitante
Diego Sueiro

Here it is:

apt-cache policy libx11-6
libx11-6:
Installed: 2:1.6.2-1ubuntu2

I've added this package installation on the part 1 of this series.

joël maranhão
Visitante

Ok I have now found out why my build is failing. Debian 7.8 won't install libx11-6 >= 1.6.2, I think I will upgrade my build machine to Jessie or find another computer. Thanks!

joël maranhão
Visitante

Upgraded to Debian 8.1 Jessie, deleted my tmp, and started over. The RPi2 image built fine (Tutorial Part 1), but the I am getting the same message when bitbake meta-toolchain-qt5. Collected errors: * satisfy_dependencies_for: Cannot satisfy the following dependencies for packagegroup-qt5-toolchain-target: * libx11-6 (>= 1.6.2) * libxcb1 (>= 1.11) * libxau6 (>= 1.0.8) * libxdmcp6 (>= 1.1.1) * * opkg_install_cmd: Cannot install package packagegroup-qt5-toolchain-target. libx11-6, libxau6, libxdmcp6 satisfy the dependency rules, but not libxcb1. [email protected]:~/yocto/build$ apt-cache policy libxcb1 libxcb1: Installed: 1.10-3+b1 Candidate: 1.10-3+b1 Version table: *** 1.10-3+b1 0 500 http://ftp.us.debian.org/debian/ jessie/main amd64 Packages 500 http://http.debian.net/debian/ jessie/main amd64 Packages 100 /var/lib/dpkg/status… Leia mais »

Diego Sueiro
Visitante
Diego Sueiro

Sorry,

But I don't use Debian.

joël maranhão
Visitante

No worries. May be someone else here can help. I am going to try Ubuntu 14.04! 😉 Cheers mate

joël maranhão
Visitante

BTW Would you know I list I could post my meta-qt5 question? It puzzles me that I can't get to build my toolchain on Debian 8.1. Nevermind.

Diego Sueiro
Visitante
Diego Sueiro
joël maranhão
Visitante

not yet, actually we are buying a machine for that purpose. Hence trying lists, just in case there is a hack. Cheers

joël maranhão
Visitante

On Ubuntu 14.04 the toolchain took about 4 hours to build, got a few WARNINGs ... hopefully nothing critical. Thx [email protected]:~/yocto/build-fido$ bitbake meta-toolchain-qt5 Loading cache: 100% |######################################################################################################################################################| ETA: 00:00:00 Loaded 2025 entries from dependency cache. Parsing recipes: 100% |####################################################################################################################################################| Time: 00:00:00 Parsing of 1547 .bb files complete (1545 cached, 2 parsed). 2024 targets, 280 skipped, 0 masked, 0 errors. NOTE: Resolving any missing task queue dependencies Build Configuration: BB_VERSION = "1.26.0" BUILD_SYS = "x86_64-linux" NATIVELSBSTRING = "Ubuntu-14.04" TARGET_SYS = "arm-poky-linux-gnueabi" MACHINE = "raspberrypi2" DISTRO = "poky" DISTRO_VERSION = "1.8" TUNE_FEATURES = "arm armv7a vfp thumb neon callconvention-hard vfpv4 cortexa7" TARGET_FPU… Leia mais »