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

62
Deixe um comentário

avatar
 
22 Comment threads
40 Thread replies
0 Followers
 
Most reacted comment
Hottest comment thread
13 Comment authors
MicheledailydolsT K SahaVinicius MacielMichael Recent comment authors
  Notificações  
recentes antigos mais votados
Notificar
Eric
Visitante
Eric

Hi Diego,
Thanks for your great post. it helps me a lot!!
I have a small question...
When I run the qt5 basic image on my raspberry pi, It is a not GUI.
I think we can change from terminal to GUI right?
How can I do that?

Diego Sueiro
Visitante
Diego Sueiro

Removed the gcc recipe append as soon as the patch 0060-gcc-var-tracking.c-backport-from-gcc-trunk-r212178.patch is no longer needed.
Please update your copy of meta-embarcados with: git pull

Diego Sueiro
Visitante
Diego Sueiro

I'm going to try to build from scratch with latest versions of the repositories and will update the tutorial with the fixes.

Diego Sueiro
Visitante
Diego Sueiro

I'm going to build from scratch with latest versions of the repositories and will update the tutorial with the fixes.

Roberto Bartelmebs
Visitante
Roberto Bartelmebs

Bom dia Diego, estou com o seguinte erro: 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.2" TUNE_FEATURES = "arm armv7a vfp thumb neon callconvention-hard vfpv4 cortexa7" TARGET_FPU = "vfp-vfpv4-neon" meta-embarcados meta-rpi = "fido:dfb2e27bf26b109fc6ccb3bc91924fb3bb24f655" meta-qt5 = "fido:90919b9d86988e7da01fa2c0a07246b5b5600a5d" meta-raspberrypi = "fido:428602b2f9b775956968db884537a2c4755e6218" meta-oe meta-ruby = "fido:902964a4da26e46018d2a8d17dcdda1ac4627a39" meta meta-yocto = "fido:c9f0a99050ec0050f0dbcd55d0cd2ab18848113f" NOTE: Preparing RunQueue NOTE: Executing SetScene Tasks NOTE: Executing RunQueue Tasks 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. 1 out of 1 hunk FAILED -- rejects in… Leia mais »

Diego Sueiro
Visitante
Diego Sueiro

Eu removi a receita que aplicava o patch, já que ele não é mais necessário.
Atualize a cópia do repositório do meta-embarcados com o comando: git pull

Roberto Bartelmebs
Visitante
Roberto Bartelmebs

Otimo Diego, ficou certo agora, so uma duvida, tenho um display touch de 7 polegadas, como ajustar a resolução para preencher todo o display? como habilitar o touchscreen?

grato

Diego Sueiro
Visitante
Diego Sueiro

Para habilitar o touch você tem que editar o arquivo "poky-fido/meta-embarcados/meta-rpi/recipes-qt/qt5/qtbase_%.bbappend" e adicionar "tslib" na variável "PACKAGECONFIG_append".

Para mudar a resolução você deve exportar as seguintes variáveis de ambiente e executar a aplicação:

export QT_QPA_EGLFS_PHYSICAL_WIDTH=myWidth QT_QPA_EGLFS_PHYSICAL_HEIGHT=myHeight QT_QPA_EGLFS_DEPTH=myDepth

Roberto Bartelmebs
Visitante
Roberto Bartelmebs

a parte da resolução ficou ok, obrigado, porem a parte do touch nao funcionou, estou usando um display chines hdmi com o touch usb, veio um cd com a imagem do raspbian que funciona o touch, o que sera que preciso para fazer funcionar no yocto?

Diego Sueiro
Visitante
Diego Sueiro

É provável que sim. Mas sem saber o que tem nesse CD fica difícil de ajudar.

Roberto Bartelmebs
Visitante
Roberto Bartelmebs

o display é da waveshare versao 1.1, tem esse link onde tem um driver para baixar, http://www.waveshare.com/wiki/7inch_HDMI_LCD_%28B%29
o penultimo link da pagina..
este é o manual http://www.waveshare.com/wiki/7inch_HDMI_LCD_%28B%29_%28Firmware_Rev_1.1%29_User_Manual

fiz o procedimento que pede ali para instalar a biblioteca para funcionar, porem da erro ao executar o comando

sudo ./USB_TOUCH_CAP_7.0_RASPBIAN

da erro do sudo, e sem o sudo tbm nao funciona...

Diego Sueiro
Visitante
Diego Sueiro

Qual é o erro?

Roberto Bartelmebs
Visitante
Roberto Bartelmebs

para o sudo da erro q nao existe o comando sudo
se colocar so o ./USB_TOUCH_CAP_7.0_RASPBIAN da erro que ./ é um diretorio.

Gustavo Mamão Agnish
Visitante
Gustavo Mamão Agnish

É possível compilar o QT5 pro raspberry com o Yocto Krogoth? O que precisa?

Diego Sueiro
Visitante
Diego Sueiro

Sim, mas provavelmente será necessário adaptações.
O que você precisa é, com exceção do meta-embarcados que não tem o branch krogoth, mudar os branches para esta versão e compilar.

Giovanni Bauermeister
Visitante
Giovanni Bauermeister

Estive tentando fazer isso nos ultimos dias mas sem sucesso. O que quero exatamente é gerar uma imagem sem x11 e wayland com suporte a qt5 com plugin EGLFS.

Diego Sueiro
Visitante
Diego Sueiro

Olá Giovanni,

Qual o erro apresentado?

Giovanni Bauermeister
Visitante
Giovanni Bauermeister

Olá Diego, O que tenho aqui é yocto e meta-qt5 na branch krogoth e meta-raspberrypi na master no local.conf tenho DISTRO_FEATURES_remove = "x11 wayland" IMAGE_INSTALL_append = " qtbase qtbase-fonts qtbase-plugins cinematicexperience " quando executo bitbake core-image-minimal, na task qtbase do_configure obtenho: | make: *** [opengldesktop] Error 1 | OpenGL disabled. | The OpenGL functionality test failed! | You might need to modify the include and library search paths by editing | QMAKE_INCDIR_OPENGL, QMAKE_LIBDIR_OPENGL and QMAKE_LIBS_OPENGL in | /home/projects/yocto/poky-krogoth/build/tmp/work/cortexa7hf-neon-vfpv4-poky-linux-gnueabi/qtbase/5.6.0+gitAUTOINC+cec15a89d0-r0/git/mkspecs/linux-oe-g++. me parece que o build esta tentando usar as configurações de desktop? PACKAGECONFIG[gl] = "-opengl desktop -no-eglfs,,virtual/libgl" também tentei forçar usar gles2… Leia mais »

Diego Sueiro
Visitante
Diego Sueiro

Giovanni,

Ainda não tentei construir no branch krogoth e é bem provável que necessite de adaptações também.

Tente incluir os patches do meta-embarcados mas pode ser que eles precisem de adaptação, ou que não funcionem ou que precise de adaptações adicionais.

Gustavo Mamão Agnish
Visitante
Gustavo Mamão Agnish

Same problem here, any news about how to patch?

Nizam Alias
Visitante
Nizam Alias

hi diego, how to solve those error

Gustavo Mamão Agnish
Visitante
Gustavo Mamão Agnish

Hi there... Same problem here, any news about how to patch?

Roberto Bartelmebs
Visitante
Roberto Bartelmebs

same error, have some news for help?

Diego Sueiro
Visitante
Diego Sueiro

I removed the gcc recipe append as soon as the patch 0060-gcc-var-tracking.c-backport-from-gcc-trunk-r212178.patch is no longer needed.
Please update your copy of meta-embarcados with: git pull

Michele
Visitante
Michele

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

trackback

[…] have followed this step-by-step tutorial (poky branch) , added ( time) , in yocto image , created 1 time again […]