Beaglebone Black + Qt Embedded + Yocto - parte 2

qt embedded yocto
Este post faz parte da série Beaglebone Black + Qt Embedded + Yocto. 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 para Beaglebone Black com Qt Embedded e 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 Beaglebone Black. 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

É 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 Qt Embedded.

cd ~/yocto
. poky-dora/oe-init-build-env build-dora
bitbake meta-toolchain-qte

O instalador da toolchain gerado está disponível em:

 ~/yocto/build-dora/tmp/deploy/sdk/ 

e serve tanto para construção de aplicações Qt Embedded 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.

# Para Host Linux 64bits
~/yocto/build-dora/tmp/deploy/sdk/poky-eglibc-x86_64-meta-toolchain-qte-armv7a-vfp-neon-toolchain-qte-1.5.1.sh

# Para Host Linux 32bits
~/yocto/build-dora/tmp/deploy/sdk/poky-eglibc-x86-meta-toolchain-qte-armv7a-vfp-neon-toolchain-qte-1.5.1.sh

Após a instalação nossa toolchain estará disponível em: /opt/poky/1.5.1/ .

Instalando o Qt Creator

Vamos baixar a versão 3.0.1 e instala-lá utilizando as opções padrão sugeridas:

# Para Host Linux 64bits:
wget http://download.qt-project.org/official_releases/qtcreator/3.0/3.0.1/qt-creator-opensource-linux-x86_64-3.0.1.run -P ~/Downloads

# Para Host Linux 32bits:
wget http://download.qt-project.org/official_releases/qtcreator/3.0/3.0.1/qt-creator-opensource-linux-x86-3.0.1.run -P ~/Downloads

# Executando o Instalador
# Host 64bits
chmod +x ~/Downloads/qt-creator-opensource-linux-x86_64-3.0.1.run
~/Downloads/qt-creator-opensource-linux-x86_64-3.0.1.run

# Host 32bits
chmod +x ~/Downloads/qt-creator-opensource-linux-x86-3.0.1.run
~/Downloads/qt-creator-opensource-linux-x86-3.0.1.run

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.0.1/bin/qtcreator.sh.

source /opt/poky/1.5.1/environment-setup-armv7a-vfp-neon-poky-linux-gnueabi

O resultado final do arquivo ~/qtcreator-3.0.1/bin/qtcreator.sh. deve ser:

source /opt/poky/1.5.1/environment-setup-armv7a-vfp-neon-poky-linux-gnueabi
#! /bin/sh

makeAbsolute() {
    case $1 in
        /*)
            # already absolute, return it
            echo "$1"
            ;;
        *)
            # relative, prepend $2 made absolute
            echo `makeAbsolute "$2" "$PWD"`/"$1" | sed 's,/\.$,,'
            ;;
    esac
}

me=`which "$0"` # Search $PATH if necessary
if test -L "$me"; then
    # Try readlink(1)
    readlink=`type readlink 2>/dev/null` || readlink=
    if test -n "$readlink"; then
        # We have readlink(1), so we can use it. Assuming GNU readlink (for -f).
        me=`readlink -nf "$me"`
    else
        # No readlink(1), so let's try ls -l
        me=`ls -l "$me" | sed 's/^.*-> //'`
        base=`dirname "$me"`
        me=`makeAbsolute "$me" "$base"`
    fi
fi

bindir=`dirname "$me"`
libdir=`cd "$bindir/../lib" ; pwd`
LD_LIBRARY_PATH=$libdir:$libdir/qtcreator${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}
export LD_LIBRARY_PATH
exec "$bindir/qtcreator" ${1+"[email protected]"}

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:

~/qtcreator-3.0.1/bin/qtcreator.sh

A figura abaixo mostra a tela inicial do aplicativo:

qt-embedded-yocto-2 

Agora vamos criar um Kit contendo as informações do nosso target (Beaglebone Black) e da nossa toolchain. Siga os passos descritos abaixo:

1) Menu "Tools"-> Submenu "Options"

2) Opção "Build & Run" -> Aba "Compilers" ->Botão "Add" -> Opção "GCC"
	Name: Poky G++ -> Apply
	Compiler path: /opt/poky/1.5.1/sysroots/x86_64-pokysdk-linux/usr/bin/arm-poky-linux-gnueabi/arm-poky-linux-gnueabi-g++
	Botão "Apply"


3) Opção "Build & Run" -> Aba "Debuggers" -> Botão "Add"
	Name: Poky GDB
	Path: /opt/poky/1.5.1/sysroots/x86_64-pokysdk-linux/usr/bin/arm-poky-linux-gnueabi/arm-poky-linux-gnueabi-gdb
	Botão "Apply"
	

4) Opção "Build & Run" -> Aba "Qt Versions" -> Botão "Add"
	Filename: /opt/poky/1.5.1/sysroots/x86_64-pokysdk-linux/usr/bin/qmake
	Version Name: Qt 4.8.5 (Embedded)
	Botão "Apply"


5) Opção "Build & Run" -> Aba "Kits" -> Botão "Add"
	Name: BBB
	Device Type: Generic Linux Device
	Sysroot: /opt/poky/1.5.1/sysroots/armv7a-vfp-neon-poky-linux-gnueabi
	Compiler: Poky G++
	Debugger: Poky GDB
	Qt Version: Qt 4.8.5 (Embedded)
	Botão "Make Default"
	Botão "OK"

Ao final desses procedimentos devemos ter a tela de configuração das opções "Build & Run" semelhante a essa:

qt-embedded-yocto-3

Compilando uma aplicação

Como não poderia deixar de ser, vamos criar uma aplicação "Hello World". Execute os seguintes comandos no shell:

mkdir ~/qte-helloworld
echo -e 'TEMPLATE = app\nTARGET = helloword\nQT = core gui\ngreaterThan(QT_MAJOR_VERSION, 4): QT += widgets\nSOURCES += main.cpp' > qte-hello-world/helloworld.pro
echo -e '#include <QApplication>\n#include <QPushButton>\n\nint main(int argc, char **argv){\n    QApplication app (argc, argv);\n    QPushButton button ("Hello world !");\n    button.show();\n    return app.exec();\n}' > qte-helloworld/main.cpp

Teremos um arquivo de projeto ~/qte-helloworld/helloworld.pro:

TEMPLATE = app
TARGET = helloword
QT = core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
SOURCES += main.cpp

E um código fonte da aplicação ~/qte-helloworld/main.cpp:

#include <QApplication>
#include <QPushButton>

int main(int argc, char **argv){
    QApplication app (argc, argv);
    QPushButton button ("Hello world !");
    button.show();
    return app.exec();
}

Vamos importar nosso projeto para dentro do Qt Creator. Para isso, vá em "File" -> "Open File or Project", e selecione o arquivo ~/qte-helloworld/helloworld.pro.

Na próxima tela aparecerá qual Kit deverá ser utilizado, se você marcou o Kit BBB 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 ~/build-helloworld-BBB-Debug/helloword para a raíz de um pendrive.

Insira o pendrive na BBB, 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 BBB 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:

/etc/init.d/qtdemo stop
mount /dev/sda1 /media
/media/helloworld -qws

Note que rodamos a aplicação com os parâmetros "-qws", isso indica ao Qt que ele deve rodar no modo embedded e usar o seu gerenciador de janela interno.

A TV ficará com a seguinte imagem:

qt-embedded-yocto-3

Conclusão

Com as partes 1 e 2 desse tutorial é possível gerar uma distribuição Linux embarcado customizado usando o Qt Embedded 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

Cozinhando com o Yocto Project

Desvendando Yocto Project – Primeiros passos

 

Outros artigos da série

<< Beaglebone Black + Qt Embedded + Yocto - parte 1
Este post faz da série Beaglebone Black + Qt Embedded + 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.

14
Deixe um comentário

avatar
 
12 Comment threads
2 Thread replies
0 Followers
 
Most reacted comment
Hottest comment thread
3 Comment authors
Martin BeaudetDiego SueiroEduardo ScherrerDesenvolvendo um Kiosk Interativo para a Beaglebone Black com Yocto - parte 3Projeto de Kiosk Interativo para a Beaglebone Black com Yocto - parte 1 Recent comment authors
  Notificações  
recentes antigos mais votados
Notificar
trackback

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

trackback

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

trackback

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

Martin Beaudet
Visitante
Martin Beaudet

Hi Diego, I successfully build the meta-toolchain-qt5 SDK using this command : bitbake meta-toolchain-qt5 I follow your instruction to setup QtCreator but I'm not able to compile, I'm getting this error : "c command not found". So I guest there something broken in setup environment. I have took a look to setup environment file in "/opt/poky/1.6.2/environment-setup-cortexa8t2hf-vfp-neon-poky-linux-gnueabi" and then I did not see any OE_QMAKE environment variable set, this is not normal ? If I well understand, in "meta-embarcados/classes/populate_sdk_qt5", should append the setup environment variable that are missing. But here is what I have in the file "/opt/poky/1.6.2/environment-setup-cortexa8t2hf-vfp-neon-poky-linux-gnueabi" http://pastebin.com/8uvwVcmP I do… Leia mais »

Martin Beaudet
Visitante
Martin Beaudet

Yessss, I got it 🙂

I have to this line also to the "qtcreator.sh"

$ source /opt/poky/1.6.2/sysroots/x86_64-pokysdk-linux/environment-setup.d/qt5.sh

trackback

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

trackback

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

trackback

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

trackback

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

trackback

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

trackback

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