Desenvolvendo com o Qt Creator em Linux embarcado

- por Sergio Prado

Categorias: Beagleboard-xM, Linux Tags: , , , ,

Um tempo atrás escrevi um artigo sobre o desenvolvimento com Qt em Linux embarcado, mas não cheguei a tratar do Qt Creator.

O Qt Creator é uma IDE completa e multi-plataforma para desenvolvimento em Qt, com suporte total à design de interface gráfica. Sim, com ela você consegue desenvolver uma aplicação gráfica em Qt, criando janelas e arrastando botões e campos de texto! Simples assim!

Para desenvolvimento nativo, ela é plug’n play. Ou seja, basta baixar e usar. Já para desenvolvimento em Linux embarcado, você precisará de um ambiente configurado e de alguns ajustes na ferramenta. É o que veremos neste artigo.

PREPARANDO O TERRENO

O kit de desenvolvimento (target) que usaremos para os testes será a Beagleboard-xM, mas o mesmo processo deve funcionar em qualquer outra plataforma.

Para começar, você vai precisar de um toolchain. Não sabe o que é um toolchain? Então você deve ler o artigo “Desmistificando toolchains em Linux embarcado“.

Porque precisamos de um toolchain? Porque iremos cross-compilar as bibliotecas do Qt para o kit de desenvolvimento.

Então como eu consigo um toolchain, Sergio? Fácil, já respondi esta pergunta para você no artigo “Gerando e usando toolchains em Linux embarcado“.

Meu conselho é você usar o toolchain da CodeSourcery ou gerar um toolchain para ARM genérico com a glibc. Prometo que isso irá evitar muita dor de cabeça e algumas noites mal dormidas.

Digo isso porque já tive alguns problemas tentando compilar o Qt manualmente com um toolchain baseado na uClibc. Mas se você quer insistir nessa idéia, sugiro usar o Buildroot para compilar o Qt. Ele usa uma versão mais antiga do Qt, e já possui todos os patches para compilar sem problemas com um toolchain baseado na uClibc. À propósito, já expliquei como fazer isso no artigo “Compilando Qt e aplicações gráficas em Linux embarcado“.

Com o toolchain preparado, mãos à obra!

COMPILANDO O QT

O primeiro passo é baixar e compilar as bibliotecas do Qt. Esse processo vai lhe exigir muita paciência e algumas xícaras de café.

Para baixar e extrair os fontes do Qt:

$ wget http://get.qt.nokia.com/qt/source/qt-everywhere-opensource-src-4.8.1.tar.gz
$ tar zxfv qt-everywhere-opensource-src-4.8.1.tar.gz
$ cd qt-everywhere-opensource-src-4.8.1

Antes de compilar, vamos setar a variável de ambiente PATH para que possamos usar as ferramentas do toolchain (ajuste de acordo com a localização do seu toolchain):

$ export PATH=/opt/toolchain/arm-linux/bin:$PATH

Agora vamos configurar o Qt:

$ ./configure -opensource -confirm-license -embedded arm -xplatform qws/linux-arm-g++ -little-endian -qt-zlib -qt-libtiff -qt-libpng -qt-libmng -qt-libjpeg -prefix /usr/local/qt-arm

Esta configuração irá preparar o Qt para ser compilado para um sistema ARM little-endian, cujo cross-compiler tem o prefixo arm-linux-. Se sua plataforma for diferente desta configuração, precisará alterar a opção -xplatform.

Se o toolchain que você esta usando não é o mesmo toolchain que gerou o rootfs do seu kit de desenvolvimento, sugiro incluir no comando acima a opção “-static” (sem os parênteses). Se você esta em dúvida, ou não faz a menor idéia do que eu quiz dizer, use-o mesmo assim.

Depois de configurado é só compilar. Prepare-se, porque vai levar (literalmente) algumas horas. Faça isso à noite. Digite o comando abaixo, e até amanhã…

$ make

Bom dia! Agora mais alguns minutos para instalar:

$ sudo make install

Agora é só copiar as bibliotecas para o kit de desenvolvimento. Este procedimento vai depender bastante de como você montou o seu rootfs. Se estiver em uma memória flash, você vai precisar de uma ferramenta de rede como o scp para copiar os arquivos. Se estiver em um cartão SD, basta copiar para o cartão. Mas se você for mesmo esperto, terá montado seu rootfs via NFS (o rootfs fica disponibilizado localmente na sua máquina, e é acessado remotamente via rede pelo kit de desenvolvimento).

Mas Sergio, eu não sei como montar um rootfs via NFS. Vai me dizer que você também escreveu um artigo sobre isso? Sim, escrevi. Como adivinhou? :) É só acessar o artigo “Montando o rootfs no Linux via NFS“. Não se esqueça de adaptar os parâmetros para o seu target (kit de desenvolvimento).

Com o rootfs disponível localmente e montado via NFS, basta copiar as bibliotecas do Qt. Para fins didáticos, vou considerar que o meu rootfs encontra-se no diretório /mnt/rootfs (ajuste de acordo com o seu):

$ sudo mkdir -p /mnt/rootfs/usr/local/qt-arm/
$ sudo cp -av /usr/local/qt-arm/lib /mnt/usr/local/qt-arm/

Como as bibliotecas do Qt foram instaladas em um diretório que não é padrão no Linux, precisamos incluir seu caminho na variável de ambiente LD_LIBRARY_PATH. Coloque a linha abaixo no arquivo /etc/profile do target e reinicie-o:

export LD_LIBRARY_PATH=/usr/local/qt-arm/lib:$LD_LIBRARY_PATH

Você pode testar a instalação do Qt escrevendo uma aplicação simples. Dá uma olhada novamente neste artigo aqui.

INSTALANDO E CONFIGURANDO O QT CREATOR

A versão do Qt Creator que usaremos aqui é a 2.2.1. Para instalá-lo, basta usar o gerenciador de pacotes da sua distribuição. No Ubuntu, execute o comando abaixo:

$ sudo apt-get install qtcreator

Agora vamos configurá-lo para cross-compilar nossa aplicação. O primeiro passo é configurar o qmake, o gerenciador do sistema de build do Qt:

  1. Abra o Qt Creator e acesse o menu “Tools -> Options -> Qt4“.
  2. Clique em “Add“.
  3. Configure o campo “Version” com “Beagleboard Qt 4.8.1“.
  4. Configure o campo “qmake location” com o local de instalação do qmake, que no nosso caso é “/usr/local/qt-arm/bin/qmake“.
  5. Clique em “OK“.

Agora vamos configurar o toolchain:

  1. Acesse o menu “Tools -> Options -> Tool Chains“.
  2. Clique em “Add
  3. Configure o caminho completo do compilador C++ e do GDB do seu toolchain conforme a imagem abaixo.
  4. Clique em “OK“.

Agora vamos criar um projeto para testar:

  1. Acesse o menu “File -> New File“.
  2. Selecione a opção “Project -> Qt Widget Project -> Qt GUI Application“.
  3. Clique em “Choose…“, dê um nome para seu projeto e confirme o restante das opções até o “Finish“.

Agora vamos configurar o projeto para usar as ferramentas de cross-compilação:

  1. Selecionar “Projects” à esquerda.
  2. Configurar o campo “Qt Version” com “Beagleboard Qt 4.8.1“.

Agora é só desenvolver! À propósito, arrastar e alinhar botões e labels me trouxeram boas lembranças do saudoso Delphi… :)

Salve e compile. Será gerado um binário com o mesmo nome do projeto. Copie o binário para o target e execute-o (lembre-se de passar o parâmetro -qws):

$ /usr/sbin/qt_beagle -qws

Fácil, não? :) Agora não tem desculpa para não desenvolver aplicações gráficas facilmente em Linux embarcado!

Até a próxima!

Um abraço,

Sergio Prado

Navegue
Creative Commons Este trabalho de Sergio Prado é licenciado pelo
Creative Commons BY-NC-SA 3.0.