Preparando o ambiente para o QT5
Nesse artigo veremos como compilar o QT5, incluindo suporte a aceleração gráfica por GPU, para o Rasbpian, o sistema operacional da Raspberry. A vantagem em se ter o QT5 com suporte a aceleração gráfica por GPU é que se pode rodar interfaces gráficas de forma mais fluída e até mesmo incluir animações. Já o Raspbian é um sistema operacional que é baseado em Debian e portanto, é super fácil instalar novos programas, configurar serviços, etc. Por outro lado, também é possível gerar um sistema customizado e mais leve com QT5, também incluindo suporte a aceleração gráfica por GPU, usando o Yocto [1].
Note que as instruções dadas aqui serão direcionadas para a Raspbery PI 2, e dessa forma, usaremos o cross compilador g++-arm-linux-gnueabihf. Ou seja, um toolchain com suporte a ponto flutuante por hardware. Caso você não tenha o g++-arm-linux-gnueabihf instalado, instale-o:
1 |
# aptitude install g++-arm-linux-gnueabihf |
Também iremos necessitar de uma imagem do Raspbian em disco local e montada em uma pasta especifica. Você pode baixar uma das imagens aqui, mas usaremos o Raspbian Lite para esse artigo, o qual pode ser baixado nesse link aqui. Observe que o nome do arquivo muda conforme a data em que é baixado! Então faça os ajustes conforme o nome da imagem usada. Como usuário root, execute os seguintes passos:
1 |
# mkdir /mnt/raspi-pi-rootfs |
1 |
# nano /etc/modules |
Agora digite o seguinte comando para descobrir o offset da segunda partição na imagem da raspberry:
1 |
file xxxx-raspbian-jessie-lite.img |
O resultado desse comando será algo como abaixo:
1 |
2015-11-21-raspbian-jessie-lite.img: DOS/MBR boot sector; partition 1 : ID=0xc, start-CHS (0x0,130,3), end-CHS (0x8,40,32), startsector 8192, 122880 sectors; partition 2 : ID=0x83, start-CHS (0x8,40,33), end-CHS (0xb1,83,34), startsector 131072, 2717696 sectors |
Observe o número após o segundo startsector, 131072. Esse é o offset da segunda partição que precisamos para o próximo comando. Mude conforme sua imagem. No momento em que esse texto é editado, existe a imagem 2017-01-11-raspbian-jessie-lite.img, cujo offset é 137216. Portanto você precisa colocar o offset conforme a imagem que está sendo usada!
Adicione esse comando no arquivo modules, com o offset correto confome indicado acima:
1 |
mount -o loop,offset=$((512*131072)) caminho/2015-11-21-raspbian-jessie-lite.img /mnt/rasp-pi-rootfs |
Como dito antes, mude o comando para o nome da imagem que você baixou no site da Raspberry. O caminho é o local onde a imagem foi baixada. Reinicie o sistema e verifique se a imagem foi montada, usando o comando mount. Esse passo é muito importante para que a compilação cruzada dos programas do QT 5 funcione. Depois de inicializar o sistema, digitando mount, você deveria ver algo como:
1 |
/home/vini/projs/broadcom/images/2015-11-21-raspbian-jessie-lite.img on /mnt/rasp-pi-rootfs type ext4 (rw,relatime,data=ordered) |
Agora vamos clonar o repositório do QT5, que a propósito, mudou de endereço:
1 |
$ git clone git://code.qt.io/qt/qt5.git |
Isso irá demorar um pouco! Depois de concluído, entre na pasta do QT5 e mude para a versão 5.5:
1 |
$ cd qt5; git checkout 5.5 |
Agora devemos baixar os submódulos do QT5, digitando:
1 |
$ ./init-repository |
Para configurar o QT5 para ser compilado com suporte a aceleração gráfica por hardware, devemos habilitar o suporte a EGFLS [2]. Baixe o arquivo eglfs-brcm e coloque-o na pasta qt5/qtbase/config.tests/qpa/eglfs-brcm. Esse arquivo nos possibilita habilitar o suporte a EGFLS na Raspberry 2.
Agora, para fazer a configuração que precede a compilação, devemos digitar:
1 |
./configure -opengl es2 -device linux-rasp-pi-g++ -device-option CROSS_COMPILE=arm-linux-gnueabihf- -sysroot /mnt/rasp-pi-rootfs -opensource -confirm-license -reduce-exports -release -make libs -prefix /usr/local/qt5pi -hostprefix /usr/local/qt5pi -qt-xcb -skip wayland |
O resultado parcial da configuração deve ser algo como abaixo:
1 2 3 4 5 |
EGLFS ................ yes EGLFS i.MX6....... . no EGLFS KMS .......... no EGLFS Mali ......... no EGLFS Raspberry Pi . yes |
Se para você não aparecer ‘yes’ no EGLFS Raspberry Pi e em vez disso aparecer ‘no’, algo foi feito errado nos passos anteriores. Agora basta compilar o QT5, usando o comando:
1 |
$ make -j4 |
Depois que a compilação for concluída, podemos instalar o QT5. Uma pasta irá ser copiada para a imagem da Raspberry montada em /mnt/rasp-pi-rootfs e outra será copiada para o PC, em /usr/local. Dessa forma, execute o comando seguinte como root:
1 |
# make install |
Agora você deve copiar a imagem contendo a pasta do QT5 para o cartão uSD. Isso pode ser feito com o seguinte comando:
1 |
# dd if=2015-11-21-raspbian-jessie-lite.img of=/dev/sdX bs=1M |
Substitua a letra X pela letra correspondente ao cartão uSD detectado no sistema. É possível descobrir o nome correto usando o comando “dmesg | tail”. E também mude o nome da imagem conforme a imagem que foi baixada!
Configurando o QT Creator
QTCreator é a IDE para gerar de forma fácil interfaces gráficas usando a biblioteca do QT. Para que seja gerado um arquivo executável que rode na Raspberry, é necessário configurar o QT Creator para usar um qmake especifico e o QT5 compilado no passo anterior. Antes de compilar um projeto do QT, é muito importante também que a imagem da Raspberry esteja montada, pois nela existem arquivos necessários para o processo de compilação cruzada. Então iniciemos baixando o QTCreator e outra ferramenta que será muito útil, o QtDesigner.
1 |
# aptitude install qtcreator qt4-designer |
Após a instalação, abra o QT Creator, na barra de menu escolha a opção “Tools”, depois “Options”. No lado esquerdo, selecione a seção “Build & Run”. Agora seleciona a aba “QT Versions”, clique em “Add…”. No campo “file name” aponte para o caminho: /usr/local/qt5pi/bin/qmake e pressione “Open”.
Depois disso, selecione a aba “Compilers”. Clique em “Add” e selecione a opção “GCC”. No campo “Name” coloque um nome sugestivo como GCC RPi, e clique em Browse e localize o caminho da toolchain. Se você usou o aptitude como mostrado acima, e você usa Debian ou uma variante dele, o caminho deve ser: /usr/bin/arm-linux-gnueabihf-g++.
E finalmente escolha a aba “Kits” e clique em “Add..”.
Atribua um nome para o kit, escolha o tipo “Generic Linux Device”. Para o compilador, escolha aquele que adicionamos no passo anterior. E então escolha para “Qt Version”, a versão da Raspberry associada ao qmake, o qual também adicionamos no primeiro passo. Pressione Ok.
Dessa forma, finalizamos a configuração básica do QT Creator. Também é possível adicionar Debuggers e Devices, para debugar o programa diretamente na placa.
Exemplo de Programa para testar a configuração do QT5
Agora vejamos um exemplo simples de Widget no QT para testarmos a compilação cruzada no PC e execução no Raspbian. Abra o QT Creator e na tela de abertura, clique em “New Project” ou clique em “File” -> “New File or Project”. Na seção “Projects”, escolha a opção “Qt Widgets Application”. Depois clique em “Choose…”.
Na próxima tela, escolha um nome para o projeto e um caminho. Na tela “Kit Selection”, escolha Desktop e Raspberry. Em “Class Information”, você pode deixar o nome padrão ou atribuir um nome qualquer. Na tela “Project Management”, você pode escolher o Git para controle de versão. E então clique em “Finish”.
Agora vejamos como adicionar um botão PushButton em nossa aplicação. Na árvore do projeto, em “Projects”, clique em “Forms”, e abra o arquivo de extensão .ui. Na seção “Buttons”, clique e arraste um Push Button para area da janela.
Com isso criamos uma interface simples para testarmos na Raspberry. Falta apenas um passo: a compilação do executavel para rodar na Raspberry.
No menu esquerdo, na parte inferior, clique em “Debug”, escolha o Kit da Raspberry. Depois clique no martelo para compilar.
Se nenhuma mensagem de erro foi mostrada, então a compilção e a configuração do QT5 estão corretas! Transferia o executável para a placa, e execute com o comando:
1 |
$ ./NomeDoPrograma -platform eglfs |
Veja abaixo a execução do programa na Raspberry 2 usando um LCD HDMI de 5″.
Referências
[1] http://www.embarcados.com.br/raspberry-pi-qt5-yocto-parte-1/
[2] http://doc.qt.io/qt-5/embedded-linux.html
[3] guide-to-cross-compile-qt-54-for-the-raspberry-pi