Beaglebone Black + Qt5 + Yocto - Parte 1

Beaglebone Black Qt Creator
Este post faz parte da série Beaglebone Black + Qt5 + Yocto. Leia também os outros posts da série:

Nesta série de artigos sobre o uso do Yocto Project veremos como criar uma distribuição Linux embarcado com o Qt5 para a Beaglebone Black usando seu acelerador gráfico SGX530. 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.

 

 

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-ti  que possui o BSP (Board Support Package) com os fontes necessários (u-boot, kernel, drivers para o acelerador gráfico, etc.) para rodar a nossa distribuição na Beaglebone Black. 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 beaglebone (serve tanto para a white como a black), 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).

 

 

Gerando a imagem

 

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

 

Este procedimento é praticamente o mesmo utilizado no tutorial do Henrique mencionado no começo deste post. 

 

Para a gravação das imagens no microSD card, o mesmo deve ser particionado e formatado de acordo o padrão aceito pelo placa. Para isso foi criado um script, que pode ser obtido com os seguintes comandos:

 

Insira um microSD 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:

 

Assim que o processo de particionamento e formatação terminar, duas partições no microSD card são criadas:

  • boot (FAT32);
  • rootfs (ext4).

 

Execute a “montagem” dessas duas partições no sistema de arquivos do sistema host. Caso esse faça uso da distribuição Ubuntu, basta remover e inserir novamente o dispositivo no seu conector. Dado que, por exemplo, os pontos de montagem criados sejam /media/boot e /media/rootfs, a imagem gerada anteriormente é copiada da seguinte forma para o microSD :

 

 

Testando a imagem

 

Remova o microSD do computador e insira-o na BBB, 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 BBB siga os passos da seção "Configuring Serial Communication" do tutorial da Timesys.

 

NOTA:

Se você tiver instalado algum outro sistema operacional no eMMC da BBB energize a placa pressionando a switch que fica próxima ao slot do microSD. Isso fará com que o processador busque o MLO e u-boot que estão contidos no microSD ao invés do eMMC.

 

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.

 

Qt5 Cinematics Experience
Figura 1 - Qt5 Cinematics Experience

 

Agora vamos rodar o exemplo do QtSmartHome:

 

A figura 2 mostra um screenshot do QtSmartHome:

 

Figura 2 - Qt Smart Home
Figura 2 - Qt Smart Home

 

Agora vamos rodar o exemplo Qt5EveryWhereDemo:

 

A figura 3 mostra um screenshot do Qt5EveryWhereDemo:

Figura 3 - Qt5 Every Where Demo
Figura 3 - Qt5 Every Where Demo

 

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:

 

A aceleração gráfica tem uma melhor performance na resolução HD (1280x720) e caso sua TV ou monitor seja FULL-HD (1920x1080) você pode alterar a resolução para HD com os seguintes comandos:

 

 

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

Beaglebone Black + Qt Embedded + Yocto - parte 1

Desvendando Yocto Project – Primeiros passos

BeagleBone Black + Yocto

 

 

Referências

 

 

http://beagleboard.org/Products/BeagleBone%20Black

http://en.wikipedia.org/wiki/PowerVR#Series_5

http://qt-project.org/wiki/Category:Tools::QtCreator

http://qt-project.org/doc/qt-4.8/qt-embedded-linux.html

http://en.wikipedia.org/wiki/Graphics_processing_unit

http://blog.qt.digia.com/blog/2011/05/09/thoughts-about-qt-5/

http://elinux.org/Beagleboard:BeagleBone_Black_Serial

https://linuxlink.timesys.com/docs/gsg/beaglebone_black

 

 

Outros artigos da série

Beaglebone Black + Qt5 + Yocto – Parte 2 >>
Este post faz da série Beaglebone Black + Qt5 + Yocto. 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.

150
Deixe um comentário

avatar
 
34 Comment threads
116 Thread replies
0 Followers
 
Most reacted comment
Hottest comment thread
16 Comment authors
PremjithGabriel HabibAnkur TyagiMartin BeaudetQasem Taheri Recent comment authors
  Notificações  
recentes antigos mais votados
Notificar
Premjith
Visitante
Premjith

Is there any way to do this build with 4.14 kernel, this build is bind to 3.14 kernel ? Thanks

sevgi aydın
Visitante
sevgi aydın

Hi Diego;
when your applications run, it is warning ...
libpng warning: iCCP: known incorrect sRGB profile
how can I solve the warning ?

sevgi aydın
Visitante
sevgi aydın

Dear Diego;
I generate image this web site .I done step by step every step ..But I have 2 problems..

1-The image is vertical.. I can not rotate the application . How will I rorate application image? https://uploads.disquscdn.com/images/e7b35e88bae273109a9c707a7a0c3b89bd75cf0d149671308f859a5ef2e447e0.jpg

sevgi aydın
Visitante
sevgi aydın

I could run my applications 16 bit RGB ..I had to change 24 bit
because of my new display specifications...I changed panel_info = at am335x-boneblack.dts . But It started to give the following error..
./application --platform eglfs
Could not initialize egl display
Aborted

Do you have a idea for solving ?

Diego Sueiro
Visitante
Diego Sueiro

Can you run any other gui application (excluding qt) with this kernel and dts change?

sevgi aydın
Visitante
sevgi aydın

I can see just text display..Other applications is same error..
for example
1-cd /usr/share/qt5everywheredemo-1.0
./QtDemo -platform eglfs
2-cd /usr/share/qtsmarthome-1.0/
./smarthome -platform eglfs3-1
3--Qt5_CinematicExperience -platform eglfs

Diego Sueiro
Visitante
Diego Sueiro

Ok.
My question is: are you sure that this is the change you have to do to use 24bit mode?
Have you tested it in another environment, ie debian?

sevgi aydın
Visitante
sevgi aydın

I am changing only bpp= at am335x-boneblack-rgb.dts ..
I do make and after I am loading sd card..and Previously running programs are not running..it is given eglfs error ..

when I use color depth 16 bit ..Colors are not exactly as expected ..and image is vertical.. I can not rotate. image...

sevgi aydın
Visitante
sevgi aydın

Dear Diego;
I generate image this web site .I done step by step every step ..But I have 2 problems..

1-The image is vertical.. I can not rotate the application . How will I rorate application image?
https://uploads.disquscdn.com/images/e7b35e88bae273109a9c707a7a0c3b89bd75cf0d149671308f859a5ef2e447e0.jpg
2-When I convert 24 bit to 16 bit.. it was been error.."Could not initialize egl display
Aborted "

Diego Sueiro
Visitante
Diego Sueiro

I don't have too much experience with Qt development, but I suspect that you can hardcode in the application the display resolution and rotation.

I don't have a display to test this specific configuration which you are using.

Have you tried to play around with the environment variables for eglfs configuration?

http://doc.qt.io/qt-5/embedded-linux.html

sevgi aydın
Visitante
sevgi aydın

24 bit RGB [email protected]:~# Qt5_CinematicExperience -platform eglfs
Could not initialize egl display
Aborted

lcmscheid
Visitante
lcmscheid

Oi Diego...
É possível fazer projetos com QtQuick com essas imagens? Tem suporte eglfs?

Diego Sueiro
Visitante
Diego Sueiro

Olá @lcmscheid:disqus,

Essa imagem tem suporte a eglfs sim e o QtQuick Controls Qml Plugins também estão instalados.
Infelizmente não tenho uma imagem dessa pronta para testar.

Me avise o resultado.

lcmscheid
Visitante
lcmscheid

Oi Diego, parabéns e obrigado pela iniciativa. Estou rondando o meu host em uma VM, e segui seus passos. Quando fui criar o SD, tive que fazê-lo no fora da vm pois a mesma nao carrega o sd. Criei o sd fora, manualmente pois o script que vc indicou nao estava funcionando. Montei as duas particoes e comparilhei elas via shared folder atraves do virtual box. Copie sem problemas os arquivos que vao para a pariticao boot. Quando vou descomprimir o arquivo qt5-image-demo-beaglebone.tar.gz não dá certo, gerando erro cada acesso aos arquivos ./lib, diz que nao pode fazer o mkdir:… Leia mais »

Diego Sueiro
Visitante
Diego Sueiro

Você tentou descompactar com o sudo?
Qual o erro que o script dá?

Gustavo Ferreira Palma
Visitante
Gustavo

Sei que o Post é um pouco antigo, segui todos os passos, as
compilações foram realizadas com sucesso, porém na hora de gravar os
arquivos tenho problemas em executar o script de preparação do sdcard,
estou usando ubuntu 14,4 e um sdcard de 8 gb, o ponto de montagem do
sdcard é o /dev/mmcblk0, quando não há nenhuma partição, e com alguma
partição criada /dev/mmcblk0p1, gostaria de saber o que posso estar
fazendo errado, Desde já agradeço

Diego Sueiro
Visitante
Diego Sueiro

Olá Gustavo.
Não se preocupe, você não está fazendo nada de errado.
Há um bug nesse script que já foi reportado de mas não foi corrigido.
Você tem duas opções.
1. Usar um adaptador sd USB, pois dessa maneira o dispositivo vai ser montado como sd"alguma_letra" e daí o script vai funcionar.
2. Alterar o script format_sd_card.sh conforme abaixo para lidar com o nome mmcblk da maneira correta:
PARTITION1=p${DRIVE}1
PARTITION2=p${DRIVE}2

Prem Jith
Visitante
Prem Jith

awesome tutorial. Thanks man

Gabriel Habib
Visitante
Gabriel Habib

Sueiro, eu gostaria de entender um pouco mais sobre a questao do Yocto, falaste sobre conectar um mause na USB da mesma, fiquei me perguntando como eu faria para por exemplo, adicionar um touch screen via USB. Em qual parte do cozimento eu defino isso?

Diego Sueiro
Visitante
Diego Sueiro

Gabriel,

Este tipo de característica é manipulada pelo Yocto através da variável MACHINE_FEATURES:

http://www.yoctoproject.org/docs/current/mega-manual/mega-manual.html#ref-features-machine