27 Comentários

Beaglebone Black + Qt Embedded + Yocto – parte 1

qt embedded yocto
Este post faz parte da série Beaglebone Black + Qt Embedded + Yocto. Leia também os outros posts da série:

Dando continuidade na série de artigos sobre o uso do Yocto Project, agora veremos como criar uma distribuição Linux embarcado com o Qt Embedded para a Beaglebone Black. Se você ainda não teve contato com o Yocto, sugiro que faça o tutorial do Henrique Rossi sobre Beaglebone Black + Yocto.

Qt Embedded

O Qt (/ˈkjuːt/ "cute") é um framework para desenvolvimento de aplicações cross-plataforma. Isso quer dizer que as aplicações desenvolvidas podem rodar em diversos sistemas operacionais e arquiteturas de hardware diferentes sem que seja necessária alguma alteração no código fonte, sendo obrigatório apenas a sua recompilação. Aplicações com ou sem GUI (Graphical User Interface) são contempladas no framework e são desenvolvidas em C++. Ele é distribuído sob a licença GPL-3 e LGPL-2.1, além de possuir licença comercial. 

O Qt começou a ser desenvolvido pelos fundadores da Trolltech em 1991 que foi adquirida pela Nokia em 2008 para ser usado como interface gráfica para os celulares com sistema operacional Symbian. Em 2011 a Nokia vendeu a divisão de licenciamento comercial do Qt para a Digia.

Em sistemas Linux embarcado, onde recursos de processamento e memória são mais restritos dos que encontramos em desktop, devemos dar uma atenção especial quando o produto utilizará uma interface gráfica. Sistemas de gerenciamento de janelas (Windowing Systems), como por exemplo o X11 e Wayland, consomem bastante recursos e muitas vezes são impeditivos em aplicações embarcadas.

O Qt Embedded elimina a necessidade do uso de um sistema de gerenciamento de janelas e faz o acesso aos recursos gráficos diretamente pelo Linux framebuffer, que é o dispositivo responsável por abstrair o hardware gráfico. Dessa maneira o consumo de memória e processamento são melhores otimizados.

Montando o Ambiente de construção no yocto

Vamos criar os diretórios e baixar os fontes necessários:

Note que estamos usando a versão "dora" 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 etc) para rodar a nossa distribuição na Beaglebone Black.

Agora vamos configurar o ambiente para gerarmos os artefatos de software:

Adicione a linha abaixo no arquivo ~/yocto/build-dora/conf/bblayers.conf  para a variável BBLAYERS:

Modifique e adicione as seguintes variáveis no arquivo ~/yocto/build-dora/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, usaremos o gerenciador de pacotes ipk (ele é mais indicado para sistemas embarcados porque não exige muitos recursos para funcionar) e vamos instalar na imagem todos os módulos do kernel gerados.

Se você já fez o tutorial do Henrique, você pode simplesmente atualizar as cópias locais dos repositórios poky e meta-ti (git pull) e modificar o arquivo local.conf.

Gerando a imagem

Depois de baixado os fontes e ter configurado o sistema de build , vamos gerar uma imagem com os aplicativos demo do Qt Embedded versão 4.8.5.

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 :

 Este último comando é importante, pois sem ele o mouse não será reconhecido pelo kernel.

Se você já possui algum outro sistema operacional instalado no eMMC da BBB, como por exemplo o Angstrom, execute os seguintes comandos:

 Dessa maneira garantimos que o bootloader irá carregar os arquivos corretos do microSD card. 

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. Se quiser monitorar o processo de boot, você também pode conectar um cabo serial.

Depois de energizar a placa você terá a seguinte imagem na TV:

qt-embedded-yocto-1
Imagem na TV do Qt Embedded

 

O log de boot é:

Experimente selecionar os diversos demos disponíveis para se ter uma ideia do que é possível ser feito com o Qt Embedded.

O que vem por aí

Na próxima parte veremos como gerar uma toolchain com o Qt Embedded para ser integrado a IDE Qt Creator para desenvolvimento e compilação das aplicações Qt.

Saiba mais

Embedded Linux Build Systems

Cozinhando com o Yocto Project

Desvendando Yocto Project – Primeiros passos

Outros artigos da série

Beaglebone Black + Qt Embedded + Yocto - parte 2 >>
Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.

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

Beaglebone Black » Beaglebone Black + Qt Embedded + Yocto - parte 1
Comentários:
Notificações
Notificar
guest
27 Comentários
recentes
antigos mais votados
Inline Feedbacks
View all comments
Ivan Braga
Ivan Braga
08/08/2014 14:30

Boa tarde.

Será que alguém pode me dá a dica de como resolver este problema.
Sempre que sigo as dicas postadas aqui pelo Diego, recebo sempre estes mesmos erros e processo se encerra.

Tentando entender o que está acontecendo, uma das coisas que vi, foi que alguns destes links estão "quebrados", digo quebrados pois por exemplo:

O QT 4.8.5 já não está mais disponível, acredito por ter sido substituído pelo QT 4.8.6 já que foram feitas muitas correções.

Abaixo segue um link ctrl-c ctrl-v do que sempre recebo.

http://pastebin.com/jPrrrPuL

Desde já agradeço.

Diego Sueiro
Diego Sueiro
Reply to  Ivan Braga
10/08/2014 08:23

Olá Ivan,

Obrigado por reportar esse problema.

O download do Qt 4.8.5 foi movido de lugar.
O novo caminho agora é:
http://download.qt-project.org/archive/qt/4.8/4.8.5/

Você terá que corrigir a receita do Yocto para ele buscar no novo caminho.
Para isso edite o arquivo: meta/recipes-qt/qt4/qt4-4.8.5.inc
Na variável "SRC_URI" substitua o texto "official_releases" por "archive".

Vou verificar já existe um patch para consertar isso no repositório do Yocto, caso contrário mandarei a correção.

Abraços.

Ivan Braga
Ivan Braga
Reply to  Diego Sueiro
10/08/2014 16:37

Olá Diego, Obrigado por responder a minha dúvida. Depois de mais algumas tentativas, consegui compilar. Porem tenho outro problema. Sempre que rodo algum dos exemplos desta tela do QT que abre na inicialização, alguns segundos depois após uns cliques do mouse a tela congela, e só reiniciando. Alguma dica? Desculpe se as perguntas são muito óbvias, mais é que no mundo bare-metal onde tenho intimidade, não tenho estas dores de cabeça. É tudo na unha. ======================================================= Desculpe pelo OFF-TOPIC, procurei aqui no site o lugar correto para sugestões e não encontrei. Algum tempo atrás, tive um cliente que queria desenvolver… Leia mais »

Diego Sueiro
Diego Sueiro
Reply to  Ivan Braga
10/08/2014 20:42

Ivan, A melhor maneira de sabermos o que está acontecendo é verificar se o demo do Qt está logando mensagens de erro na console. Para isso você terá que conectar um cabo serial na BBB. Aqui você encontra como fazer essa conexão: http://sergioprado.org/acessando-a-console-serial-na-beaglebone-black/ Depois de estar logado na serial (usuário root sem senha) mate a aplicação demo do Qt com o comando: pkill qtdemoE . Reinicie a aplicação com o comando: qtdemoE -qws Informe quais as mensagens que são mostradas quando você tenta abrir alguns dos demos. Em relação ao NuttX. Eu nunca usei. Sugiro que você use a seção… Leia mais »

Gustavo Henrique
Gustavo Henrique
09/05/2014 09:15

Bom dia Diego,

Estava pesquisando sobre conexões SSH utilizando o Yocto e
pelo pouco que vi deve-se adicionar algo (IMAGE_INSTALL += "ppp
openssh") na hora de gerar a imagem (comando bitbake), é correto isso?

Eu quero a conexão SSH para instalar um VNC no Yocto de dessa forma eu acessaria a BBB pelo VNC (Eu não tenho um monitor HDMI)

Isso era uma facilidade do Angstrom, pois era só espetar o USB e conectar com o Putty SSH no ip 192.168.7.2

Você conhece algum outro jeito de fazer isso?

Diego Sueiro
Diego Sueiro
Reply to  Gustavo Henrique
09/05/2014 14:30

Olá Gustavo. Boas perguntas. Vamos por partes. Para adicionar suporte a ssh na imagem você deve adicionar a linha abaixo no arquivo conf/local.conf: IMAGE_FEATURES += " ssh-server-openssh " Para usar o Qt embedded com VNC você terá que adicionar na imagem o pluging que dá suporte ao VNC. Para isso adicione a linha abaixo no arquivo conf/local.conf (não tenho certeza se irá funcionar pois nunca fiz isso): IMAGE_INSTALL_append = " qt4-embedded-plugin-gfxdriver-gfxvnc" Seguem uma referência sobre qt embedded com vnc: http://qt-project.org/doc/qt-4.8/qt-embedded-vnc.html Para que a interface USB OTG funcione como gadget ethernet basta adicionar a linha abaixo no arquivo conf/local.conf: IMAGE_INSTALL_append =… Leia mais »

Gustavo Henrique
Gustavo Henrique
Reply to  Diego Sueiro
15/05/2014 00:39

Diego, Desculpe a demora, consegui gerar a nova imagem com esses adicionais, mas só vou conseguir testar a conexão SSH e o VNC no sábado provavelmente, apenas liguei no HDMI a BBB e funcionou. Também acrescentei a camada do Qt 5 que me passou pelo email, não sei se fiz o modo correto, mas aparentemente funcionou ou não interferiu em nada na geração da imagem: Adicionei a camada meta-qt5 (https://github.com/meta-qt5/meta-qt5) e adicionei tambem a seguinte linha no arquivo BBLAYERS: ${TOPDIR}/../poky-dora/meta-qt5 Não sei se algum outro procedimento deve ser feito ou se é apenas isso. Algumas considerações, o gadget-init eu acho… Leia mais »

Diego Sueiro
Diego Sueiro
Reply to  Gustavo Henrique
21/05/2014 06:36

Gustavo,

Para ser acesso a console serial da placa você deve usar o minicom (no host) e conectar uma cabo USB-Serial (TTL) na BBB:
http://elinux.org/Beagleboard:BeagleBone_Black_Accessories#Serial_Debug_Cables

Sobre o gadget-init dê o comando "lsmod" na placa e me passe o resultado. Mas olhando a receita dele no Yocto me parece que o suporte a subida automática só está presente com o systemd. Dê uma olhada no script q-ether-load.sh e tente rodá-lo na mão para ver se funciona:
http://git.yoctoproject.org/cgit/cgit.cgi/meta-ti/tree/recipes-ti/beagleboard/gadget-init.bb?h=dora
http://git.yoctoproject.org/cgit/cgit.cgi/meta-ti/tree/recipes-ti/beagleboard/gadget-init?h=dora
http://git.yoctoproject.org/cgit/cgit.cgi/meta-ti/tree/recipes-ti/beagleboard/gadget-init/g-ether-load.sh?h=dora

Eduardo Scherrer
Eduardo C. Scherrer
10/04/2014 23:19

Boa noite Diego,

Segui todos os passos do post, mas no ultimo comando onde você diz que é importante por conta do uso do mouse, ocorreu um erro.
A pasta /media/rootfs/etc/modules não existe.
Não teria que descompactar mais algum arquivo no sistema de arquivos?

Abraço

Eduardo Scherrer

Diego Sueiro
Diego Sueiro
Reply to  Eduardo C. Scherrer
11/04/2014 07:32

Eduardo,

Obrigado pelo aviso.

Fui verificar o comando e estava dando permissão negada.
Atualizei a lista de comandos. Veja se está funcionando e não esqueça de verificar o ponto de montagem do cartão.

Abraços

Eduardo Scherrer
Eduardo C. Scherrer
Reply to  Diego Sueiro
11/04/2014 21:55

Boa noite Diego,

Segui as suas alterações, mas ainda faltaram alguns arquivos a serem copiados. Segui os passos do tutorial do Henrique e foi.
Faltou copiar o zImage, uEvent.txt o .dtb.

Outra coisa que fiz diferente foi o local do arquivo local.conf.
Como eu não tinha o "kiosk" instalado, o caminho seguido foi: "yocto/build-dora/conf/local.conf".

Daí funcionou.

Agora apareceu a demonstração do Qt.

Abraço.

Diego Sueiro
Diego Sueiro
Reply to  Eduardo C. Scherrer
12/04/2014 07:05

Olá Ricardo, Na verdade estava errado no tutorial e já corrigi. O caminho correto do local.conf é esse que você utilizou: "yocto/build-dora/conf/local.conf". Sobre a cópia dos arquivos zImage, uEnv.txt e o .dtb, é opcional. O Henrique mudou os variáveis de do boot quando inseriu o arquivo uEnv.txt na partição FAT do cartão. O uso desse uEnv.txt faz-se necessário se você já possui algum sistema operacional instalado no eMMC da BBB e não quer ficar segurando o botão "Boot Switch" durante os primeiros segundo de power-up da placa. Obrigado por reportar as falhas no tutorial. Na próxima semana publicaremos a segunda… Leia mais »

trackback
28/05/2015 03:05

[…] Beaglebone Black + Qt Embedded + Yocto – parte 1 […]

trackback
28/05/2015 03:00

[…] Beaglebone Black + Qt Embedded + Yocto – parte 1 […]

trackback
27/05/2015 02:54

[…] Beaglebone Black + Qt Embedded + Yocto – parte 1 […]

trackback
13/01/2015 10:34

[…] BeagleBone Black + QT Embedded + Yocto - Parte 1 […]

trackback
18/11/2014 00:02

[…] foi publicada uma série [8] [9] para a Beaglebone Black, porém usando a versão QtEmbedded […]

trackback
10/11/2014 07:42

[…] #sharebar { padding: 0; text-align: left; list-style: none; margin: 0; } #sharebar span {float: left; padding: 0 5px; } #sharebar { display: block; margin: 0; padding: 5px 0 5px 5px; overflow: visible; text-align: center; height: 20px;} #sharebar #fb { text-align: left;} #sharebar #tww { width: 95px; overflow: hidden; } p.recommended { padding: 14px; text-align: center; } .page { position: relative; } Tweetar lang: en_US (function(d, s, id) { var js, fjs = d.getElementsByTagName(s)[0]; if (d.getElementById(id)) return; js = d.createElement(s); js.id = id; js.src = "//connect.facebook.net/pt_BR/all.js#xfbml=1"; fjs.parentNode.insertBefore(js, fjs); }(document, 'script', 'facebook-jssdk')); !function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+'://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js,fjs);}}(document, 'script', 'twitter-wjs'); window.___gcfg = {lang: 'pt-BR'}; (function()… Leia mais »

trackback
10/11/2014 07:22

[…] foi publicada uma série [8] [9] com a mesma finalidade, porém usando a versão QtEmbedded (Qt4) […]

Talvez você goste:

Séries



Outros da Série

Menu

WEBINAR
 
NVIDIA JETSON – A Inteligência Artificial na palma de sua mão

Data: 08/07 às 14:00h Apoio: Arrow | NVIDIA
 
INSCREVA-SE AGORA »



 
close-link

WEBINAR
 
Redes Mesh para Monitoramento
e Controle de Sensores

Data: 15/07 às 14:00h Apoio: Artimar| Microchip| Tecsus
 
INSCREVA-SE AGORA »



 
close-link