Raspberry Pi + Qt5 + Yocto - parte 1

rpi-yocto-qt5

Nesta série de artigos sobre o uso do Yocto Project veremos como criar uma distribuição Linux embarcado com o Qt5 para a Raspberry pi 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.

 

Anteriormente foi publicada uma série  para a Beaglebone Black, porém usando a versão QtEmbedded (Qt4).

 

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

 

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

 

 

 

Preparando o Host

 

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

  • Ubuntu 12.04, 13.10 e 14.04
  • Fedora 19 e 20 
  • CentOS 6.4 e 6.5
  • Debian 7.0, 7.1, 7.2, 7.3 e 7.4
  • openSUSE 12.2, 12.3 e 13.1

 

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 "daisy"  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. 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-daisy/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-daisy/conf/local.conf

 

Note que configuramos nossa machine como sendo a raspberrypi (serve tanto para os modelos A, B e B+), 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.

 

 

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

 

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-daisy/tmp/deploy/images/raspberrypi/. 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 Qt5: Cinematics Experience
Figura 1 - Qt5 Cinematic Experience

 

Agora vamos rodar o exemplo do QtSmartHome:

 

A figura 2 mostra um screenshot do QtSmartHome:

 

Raspberry Pi Qt5: QtSmartHome
Figura 2 - QtSmartHome

 

Agora vamos rodar o exemplo Qt5EveryWhereDemo:

 

A figura 3 mostra um screenshot do Qt5EveryWhereDemo:

 

Raspberry Pi Qt5: Qt5EveryWhereDemo
Figura 3 - Qt5EveryWhereDemo

 

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.

 

 

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

59 Comentários em "Raspberry Pi + Qt5 + Yocto - parte 1"

Notificar
avatar
 
Ordenar por:   recentes | antigos | mais votados
trackback
qt - invalid ELF header when trying to use QtWebEngine QML plugin on ARM - CSS PHP

[…] see excellentembarcados tutorial here […]

Vinicius Maciel
Membro
Vinicius Maciel

Ola Diego,

Construí uma imagem com a seguinte configuração:

MACHINE = "raspberrypi"
DISTRO = "poky"
DL_DIR = "/home/projs/extras/dl"
PACKAGE_CLASSES = "package_ipk"
DISTRO_FEATURES_remove = "x11 wayland"
IMAGE_FEATURES += "package-management"
IMAGE_INSTALL += "openssh"
# Set Rpi GPU Memory to 128MB
GPU_MEM = "128"

Compilou tudo ok e gravei a imagem no uSD, mas quando está dando boot, aparece o erro:
Kernel panic - not syncing: No init found. Try passing init= option to kernel.

Você tem a ideia de qual seja o problema? Ocorreu isso comigo e com um amigo meu.

Vinicius Maciel
Membro
Vinicius Maciel

Essas instruções servem para Rasberry A+?

Michael
Visitante
Michael

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"

trackback
Building QtWebEngine for Raspberry Pi2 using Yocto Poky - vcos_platform_types.h: No such file or directory - DexPage

[…] Heavily inspired by this excellent tutorial for Raspberry Pi […]

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

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

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

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

joël maranhão
Visitante
joël maranhão

quiz experimentar QtWebEngine com um exemplo muito simple tirado dessa pagina http://doc.qt.io/qt-5/qtwebengine-index.html

Sera que QtWebEngine faz parte de algum Qt licensing?

root@raspberrypi2:~# /usr/bin/qt5/qmlscene qb.qml -platform eglfs
file:///home/root/qb.qml:3 module "QtWebEngine" is not installed

trackback
How do I generate/configure config.txt for raspberry Pi2 using Yocto? | DL-UAT

[…] am using Yocto to build a custom image for my Raspberry Pi2. Followed this tutorial in portuguese and this one in […]

joël maranhão
Visitante
joël maranhão

Oi, Eu preciso acertar um parametros video no /boot/config.txt, na imagem que acabo de criar esse file não existe, eu adicionei pensando que a RPi2 iria simplemente ler o config.txt no boot, mas talvez o workflow seja differente.

no meu config.txt

hdmi_force_hotplug=1
# uncomment to force a specific HDMI mode (here we are forcing 800x480!)
hdmi_group=2
hdmi_mode=1
hdmi_mode=87
hdmi_cvt 800 480 60 6 0 0 0
max_usb_current=1

algumas ideia de como se faz isso? existem recipes para o config.txt?

wpDiscuz