10 KiB
QT Creator keresztfordító beállítása Raspberry Pi-hez
Linux alatt a QT 5.15.2 verziójával történő keresztfordító beállításának leírása.
A környezet
Hoszt: Debian Bullseye with Raspberry Pi Desktop
Cél: Raspberry Pi OS Lite Bullseye, Raspberry Pi 4 model B 1GB egy SmartiPi Touch 2 (Raspberry Pi 4 compatible) házba szerelve Raspberry Pi 7 inch Touch Display DSI 800x480 kijelzővel.
Fontos, hogy a hoszt és cél ugyanazt a verziójú operációs rendszert futtassa, jelen esetben Debian 11 (Bullseye), különben nem működik a keresztfordító.
Raspberry Pi OS installálása
A Raspberry Pi Imager letöltése és telepítése. A program elindítása után ki kell választani a telepítendő operációs rendszert és az sd kártyát. A leírás RASPBERRY PI OS LITE (32-bit)-n készült, ez után elérhetővé válik a jobb alsó sarokban az Advanced menu.
Ott a hosztneven kívül mindent be kell állítani és érdemes elmenteni állandó használatra. Mivel az új szabályozás szerint az eszközöket nem lehet alapértelmezett felhasználónévvel és jelszóval árulni, ezért azt is itt kell beállítani, fontos még az ssh engedélyezése és szükség esetén a wifi beállítása.
Raspberry Pi beállítása
A rendszer elindítása után fel kell frissíteni
apt-get update
apt-get dist-upgrade
reboot
Forráskódok telepítésének engedélyezése
Ehhez az apt konfigurációs fájljában ki kell venni a kommentet az src sorok elejéről.
/etc/apt/sources.list -> deb-src http://raspbian.raspberrypi.org/raspbian/ bullseye main contrib non-free rpi
apt-get update
Csomagok telepítése
A Qt keretrendszer fordításához minimálisan szükséges csomagok.
apt-get install gdbserver build-essential libfontconfig1-dev libdbus-1-dev libfreetype6-dev libicu-dev libinput-dev libxkbcommon-dev libsqlite3-dev libssl-dev libpng-dev libjpeg-dev libglib2.0-dev libraspberrypi-dev
További funkciókhoz opcionálisan telepítendő csomagok.
| Funkció | Szükséges csomagok |
|---|---|
| TsLib | libts-dev |
| Bluetooth | bluez libbluetooth-dev |
| MySql | default-libmysqlclient-dev |
| ALSA | libasound2-dev |
| Speech Dispather | libspeechd-dev |
| OpenSSL | libssl-dev |
| GStreamer | libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-ugly gstreamer1.0-plugins-bad libgstreamer-plugins-bad1.0-dev gstreamer1.0-pulseaudio gstreamer1.0-tools gstreamer1.0-alsa |
Hoszt beállítása
Itt is a rendszer frissítése az első
apt-get update
apt-get dist-upgrade
Szükséges csomagok telepítése
apt-get install qtcreator qtbase5-dev qtchooser qt5-qmake qtbase5-dev-tools
apt-get install gcc git bison python gperf pkg-config gdb-multiarch build-essential
és ez 32 bites célrendszerhez
apt-get install gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf
vagy ez 64 bites célrendszerhez
apt-get install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu
Jelszó nélküli ssh kapcsolat beállítása
Létező SSH kulcsok ellenőrzése
Először ellenőrizni kell, hogy vannak-e a felhasználónak ssh kulcsai? Ehhez az alábbi parancsot kell kiadni.
ls ~/.ssh
Ha itt látható egy id_rsa és egy id_rsa.pub fájl, akkor vannak kulcsok, nem kell létrehozni, az SSH kulcsok generálása rész kihagyható.
SSH kulcsok generálása
Új ssh kulcsok generálása.
ssh-keygen
A program meg fogja kérdezni, hogy hova tegye az új kulcsokat, az alapértelmezett ~/.ssh könyvtár megfelelő, enterrel kell elfogadni.
Ezután rá fog kérdezni a privát kulcs jelmondatára, nem kötelező megadni, ha nem szükséges simán enter-t kell nyomni itt és a megerősítő kérdésen is.
A létrejött kulcsok ellenőrzése.
ls ~/.ssh
Itt legalább ezt kell látni.
id_rsa id_rsa.pub
Az id_rsa a privát kulcs, ezt itt kell tartani.
Az id_rsa.pub a publikus kulcs, ezt át kell másolni a Raspberry Pi-re.
Publikus kulcs másolása a Raspberry Pi-re
A hoszt gépről történik a csatlakozás, ehhez a felhasználó publikus kulcsát csatolni kell a Raspberry Pi-n lévő authorized_keys fájlhoz, ssh-n való átküldés útján. Itt érdemes a root felhasználót megadni, mivel az újonnan fordított szoftvert általában annak a felhasználónak a jogosultságával lehet telepíteni és futtatni.
ssh-copy-id <FELHASZNÁLÓNÉV>@<IP-CÍM>
Ehhez jelszavas hitelesítés szükséges. Ha ez megvan, meg lehet próbálni a jelszó nélküli kapcsolódást.
ssh <FELHASZNÁLÓNÉV>@<IP-CÍM>
Munkakönyvtár felépítése
Könyvtár struktúra létrehozása
Az ~/rpi4 könytár lesz a kiindulási pont, létrehozás után legyen az az aktuális könyvtár.
mkdir -p ~/rpi4/build
mkdir -p ~/rpi4/qt5.15.2
mkdir -p ~/rpi4/sysroot
cd ~/rpi4
A build könyvtárban történik a qt fordítása, a qt5.15.2 könyvtár az installálálás célja, a sysroot könyvtár pedig a céleszközről átmásolt osztott könyvtárak és fejlécfájlok helye.
sysroot átmásolása a Raspberry Pi-ről
A hoszton ehhez szükséges az rsync, ha nincs, installálni kell.
apt-get install rsync
Indulhat a másolás, ezt a lépést minden alkalommal el kell végezni, ha módosul a könyvtárak tartalma.
rsync -avz --rsync-path="sudo rsync" --delete <FELHASZNÁLÓNÉV>@<IP-CÍM>:/lib sysroot
rsync -avz --rsync-path="sudo rsync" --delete <FELHASZNÁLÓNÉV>@<IP-CÍM>:/usr/include sysroot/usr
rsync -avz --rsync-path="sudo rsync" --delete <FELHASZNÁLÓNÉV>@<IP-CÍM>:/usr/lib sysroot/usr
rsync -avz --rsync-path="sudo rsync" --delete <FELHASZNÁLÓNÉV>@<IP-CÍM>:/opt/vc sysroot/opt
Az átmásolt könyvtárak tele vannak abszolút szimbolikus linkekkel, ezeket át kell konvertálni relatív linkekké, ehhez egy kis python szkript szükséges.
wget https://raw.githubusercontent.com/riscv/riscv-poky/master/scripts/sysroot-relativelinks.py
chmod +x sysroot-relativelinks.py
./sysroot-relativelinks.py sysroot
Qt fordítása
Forráscsomag letöltése.
wget https://download.qt.io/official_releases/qt/5.15/5.15.2/single/qt-everywhere-src-5.15.2.tar.xz
Kicsomagolás.
tar xvf qt-everywhere-src-5.15.2.tar.xz
32 bites rendszer (gnueabihf) esetén az mkspecs könyvtárat a fordítóhoz kell igazítani.
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
Indulhat a konfigurálás.
cd build
../qt-everywhere-src-5.15.2/configure -release -no-opengl -no-eglfs -linuxfb -device linux-rasp-pi4-v3d-g++ -device-option CROSS_COMPILE=arm-linux-gnueabihf- -sysroot ~/rpi4/sysroot -prefix /usr/local/qt5.15.2 -extprefix ~/rpi4/qt5.15.2 -opensource -confirm-license -skip qtscript -skip qtwayland -skip qtwebengine -skip qtlocation -skip qtlottie -skip qtsensors -make libs -pkg-config -no-use-gold-linker -v -recheck-all
A -device opciót a céleszköznek megfelelően kell beállítani, az elérhető eszközök megtalálhatók a ~/rpi4/qt-everywhere-src-5.15.2/qtbase/mkspecs/devices könyvtárban, Raspberry Pi változatokhoz az alábbi táblázatban lévők valók:
| Raspberry Pi modell | ARM architectúra verzió | -device opció |
|---|---|---|
| Raspberry Pi 4 | ARMv8 | linux-rasp-pi4-v3d-g++ |
| Raspberry Pi 3 | ARMv8 | linux-rasp-pi3-g++ |
| Raspberry Pi 2 v1.2 | ARMv8 | linux-rasp-pi3-g++ |
| Raspberry Pi 2 | ARMv7 | linux-rasp-pi2-g++ |
| Raspberry Pi 1 | ARMv6 | linux-rasp-pi-g++ |
A mysql plugin fordításához (ha szükséges) meg kell adni, hogy hol találhatók a mysql fejléc fájlai és osztott könyvtárai, az előző parancshoz még ezt kell hozzáfűzni.
-sql-mysql MYSQL_INCDIR=~/rpi4/sysroot/usr/include/mysql MYSQL_LIBDIR=~/rpi4/sysroot/usr/lib/arm-linux-gnueabihf
Sikeres konfigurálás után lehet fordítani és installálni.
make -j4
make install
Újrakezdéshez a build könyvtárat ki kell üríteni.
rm -rf *
A lefordított keretrendszer installálható a Raspberry Pi-re.
cd ~/rpi4
rsync -avz --rsync-path="sudo rsync" qt5.15.2 <FELHASZNÁLÓNÉV>@<IP-CÍM>:/usr/local
Qt Creator beállítása
Miután megvan a lefordított és installált keretrendszer, be kell állítani a Qt Creatort, hogy használja azt. A Tools -> Options menüpontot kell megnyitni, ott kell néhány dolgot beállítani.
Devices
Itt kell beállítani a távoli eszközhöz való csatlakozás adatait. Mivel korábban már be lett állítva az ssh kulccsal való kapcsolódás, sok feladat nincs, a Devices fülön hozzá kell adni egy Generic Linux Device típusú eszközt, nevet kell adni a kapcsolatnak, az ip címen és a felhasználó néven kívül minden maradhat alapértelmezetten.
Kits
Itt már több mindent kell állítani, először a Qt Versions fülön hozzá kell adni a frissen fordított keretrendszert, konkrétan a lefordított és telepített qmake-t kell neki megmutatni.
/home/kutyus/rpi4/qt5.15.2/bin/qmake
A Compilers fülön ellenőrizni kell, hogy a Qt Creator megtalálta-e a keresztfordítót?
GCC (C, arm 32bit in /usr/bin) GCC
GCC (C++, arm 32bit in /usr/bin) GCC
Ha nem, fel kell venni kézzel.
A Debuggers fülön a fel telepített gdb-multiarch-t kell kézzel felvenni.
GDB MultiArch /usr/bin/gdb-multiarch GDB
A fentiek megléte után a Kits fülön fel kell venni egy új készletet, el kell nevezni (pl. Raspberry Pi 4), az eszköz típusa Generic Linux device, az eszközhöz, fordítóhoz, debuggerhez és a qt verzióhoz rendre az előző lapokon felvett elemeket kell megadni. A sysroot a fordításhoz használt gyökérkönyvtár.
/home/kutyus/rpi4/sysroot