Introdução
Este é um guia para compilar o Qt 5.15.2 para o Raspberry Pi 4 e instalá-lo no Compute Module 4. É uma atualização para o meu post de blog Qt sobre o Raspberry Pi 4, com a diferença de que desta vez estou usando o Raspberry Pi OS Lite (download aqui: https://www.raspberrypi.org/software/operating-systems/), Qt versão 5.15.2 e Ubuntu 20 LTS como um computador de compilação cruzada em uma máquina virtual.
Fontes
Além do meu antigo post no blog (veja acima), também usei as seguintes fontes:
- por Uvindu Wijesinghe: https://github.com/UvinduW/Cross-Compiling-Qt-for-Raspberry-Pi-4
Atenção
Há uma atualização para este artigo, que contém compilação cruzada para Raspberry Pi, Qt6 e Ubuntu 22.04 LTS. Siga este link se você precisar de versões mais recentes.
Raspberry Pi OS Lite
Instale o Raspberry Pi OS Lite em um Raspberry Pi 4 ou em um Raspberry Compute Module 4, conforme descrito na minha postagem no blog Instalando o Raspberry Pi OS no Raspberry Compute Module 4 .
Qt 5.15.2 no Ubuntu 20 LTS
Depois que o Raspberry Pi OS é instalado no módulo de computação e o Raspberry inicializa de volta da memória eMMC, é hora de instalar o software necessário no Raspberry e na máquina Ubuntu.
Módulo de computação de framboesa 4
As etapas mostradas abaixo também devem funcionar em um Raspberry Pi 4 "normal".
Depois de ligar o Pi 4, abra o menu de configuração.
sudo raspi-config
Para nossa configuração precisamos de "SSH" e "GL (Fake KMS)". Veja as duas capturas de tela a seguir.- Em seguida, adicione fontes de desenvolvimento ao /etc/apt/sources.list. Para fazer isso, adicione a seguinte linha:
deb-src http://raspbian.raspberrypi.org/raspbian/ buster main contrib non-free rpi
- Em seguida, atualize o sistema com os seguintes comandos:sudo apt-get update
sudo apt-get dist-upgrade
sudo reboot
sudo rpi-update
sudo reboot
- E, em seguida, instale o Qt necessário e pacotes de desenvolvimento:sudo apt-get build-dep qt5-qmake
sudo apt-get build-dep libqt5gui5
sudo apt-get build-dep libqt5webengine-data
sudo apt-get build-dep libqt5webkit5
sudo apt-get install libudev-dev libinput-dev libts-dev libxcb-xinerama0-dev libxcb-xinerama0 gdbserver
- Em seguida, crie um diretório para RaspberryQt:sudo mkdir /usr/local/qt5.15
sudo chown -R pi:pi /usr/local/qt5.15
Máquina Ubuntu
É necessário um PC ou máquina virtual com o Ubuntu 20 LTS instalado.
Primeiro de tudo, atualizar o Ubuntu e instalar algumas bibliotecas necessárias:
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install gcc git bison python gperf pkg-config gdb-multiarch
sudo apt install build-essential
Em seguida, se ainda não estiver disponível, crie uma chave ssh e instale-a no Raspberry, para que um prompt de senha não apareça com cada rsync e nome de usuário e senha devem ser inseridos. Há instruções suficientes na Internet, por isso vou poupar-me da descrição detalhada aqui.
Criar estrutura de diretórios para as bibliotecas do Raspberry
Para os arquivos necessários, crio a seguinte estrutura de diretórios em Documents/Qt-CrossCompile-RaspberryPi/raspberrypi4:
sudo mkdir ~/Documents/Qt-CrossCompile-RaspberryPi/raspberrypi4
sudo mkdir ~/Documents/Qt-CrossCompile-RaspberryPi/raspberrypi4/build
sudo mkdir ~/Documents/Qt-CrossCompile-RaspberryPi/raspberrypi4/tools
sudo mkdir ~/Documents/Qt-CrossCompile-RaspberryPi/raspberrypi4/sysroot
sudo mkdir ~/Documents/Qt-CrossCompile-RaspberryPi/raspberrypi4/sysroot/usr
sudo mkdir ~/Documents/Qt-CrossCompile-RaspberryPi/raspberrypi4/sysroot/opt
sudo chown -R 1000:1000 ~/Documents/Qt-CrossCompile-RaspberryPi/raspberrypi4
cd ~/Documents/Qt-CrossCompile-RaspberryPi/raspberrypi4
Baixar recursos Qt
Baixamos os recursos do Qt e os descompactamos no diretório raspberrypi4:
sudo wget http://download.qt.io/archive/qt/5.15/5.15.2/single/qt-everywhere-src-5.15.2.tar.xz
sudo tar xfv qt-everywhere-src-5.15.2.tar.xz
Agora precisamos modificar um pouco o arquivo mkspec para que possamos usá-lo com nosso compilador. Para fazer isso, execute os seguintes comandos:
cp -R qt-everywhere-src-5.15.2/qtbase/mkspecs/linux-arm-gnueabi-g++ qt-everywhere-src-5.15.2/qtbase/mkspecs/linux-arm-gnueabihf-g++
sed -i -e 's/arm-linux-gnueabi-/arm-linux-gnueabihf-/g' qt-everywhere-src-5.15.2/qtbase/mkspecs/linux-arm-gnueabihf-g++/qmake.conf
Baixar Cross-Compiler
Como um cross-compiler eu uso um Linaro versão 7.4.1. Para fazer isso, altere para o diretório tools e baixe e descompacte o compilador:
cd tools
sudo wget https://releases.linaro.org/components/toolchain/binaries/7.4-2019.02/arm-linux-gnueabihf/gcc-linaro-7.4.1-2019.02-x86_64_arm-linux-gnueabihf.tar.xz
tar xfv gcc-linaro-7.4.1-2019.02-x86_64_arm-linux-gnueabihf.tar.xz
Rsync de bibliotecas de framboesa
Agora precisamos das bibliotecas originais do Raspberry Pi, que copiamos para os diretórios do Ubuntu com rsync:
cd ..
rsync -avz --rsync-path="sudo rsync" --delete pi@192.168.1.7:/lib sysroot/
rsync -avz --rsync-path="sudo rsync" --delete pi@192.168.1.7:/usr/include sysroot/usr/
rsync -avz --rsync-path="sudo rsync" --delete pi@192.168.1.7:/usr/lib sysroot/usr/
rsync -avz --rsync-path="sudo rsync" --delete pi@192.168.1.7:/opt/vc sysroot/opt/
Agora temos que limpar os links simbólicos que foram copiados pelo rsync para que eles apontem para os arquivos originais corretos. Há um pequeno script Python para download:
wget https://raw.githubusercontent.com/riscv/riscv-poky/master/scripts/sysroot-relativelinks.py
Em seguida, torne o script executável e chame-o:
sudo chmod +x sysroot-relativelinks.py
./sysroot-relativelinks.py sysroot
Compilando Qt
Agora podemos configurar a compilação e, em seguida, compilá-la.
cd build
../qt-everywhere-src-5.15.2/configure -release -opengl es2 -eglfs -device linux-rasp-pi4-v3d-g++ -device-option CROSS_COMPILE=~/Documents/Qt-CrossCompile-RaspberryPi/raspberrypi4/tools/gcc-linaro-7.4.1-2019.02-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf- -sysroot ~/Documents/Qt-CrossCompile-RaspberryPi/raspberrypi4/sysroot -prefix /usr/local/qt5.15 -extprefix ~/Documents/Qt-CrossCompile-RaspberryPi/raspberrypi4/qt5.15 -opensource -confirm-license -skip qtscript -skip qtwayland -skip qtwebengine -nomake tests -make libs -pkg-config -no-use-gold-linker -v -recheck
Após alguns minutos, o script deve ser concluído e as seguintes condições EGLFS devem ser definidas ou não.
QPA backends:
DirectFB ............................... no
EGLFS .................................. yes [SHOULD BE YES]
EGLFS details:
EGLFS OpenWFD ........................ no
EGLFS i.Mx6 .......................... no
EGLFS i.Mx6 Wayland .................. no
EGLFS RCAR ........................... no
EGLFS EGLDevice ...................... yes [SHOULD BE YES]
EGLFS GBM ............................ yes
EGLFS VSP2 ........................... no
EGLFS Mali ........................... no
EGLFS Raspberry Pi ................... no [SHOULD BE NO]
EGLFS X11 ............................ yes
LinuxFB ................................ yes
VNC .................................... yes
Se este não for o caso ou se quaisquer outras mensagens de erro aparecerem, por favor, investigue e limpe. Se você quiser executar o script de configuração novamente com variáveis alteradas, exclua o conteúdo do diretório de compilação com antecedência.
Se tudo estiver OK, execute os comandos make e make install.
make -j4
make install
Instale arquivos compilados no Raspberry
Se a compilação for bem-sucedida, os arquivos compilados - eles estão localizados no diretório qt5.15 - podem ser copiados para o Raspberry Pi. Novamente, fazemos isso usando o comando rsync.
rsync -avz --rsync-path="sudo rsync" qt5.15 pi@192.168.1.7:/usr/local/
Configuração QtCreator
No próximo post do blog vou explicar como usar o QtCreator para uso com as bibliotecas compiladas.