# QT Creator keresztfordító beállítása Raspberry Pi-hez Linux alatt a jelenleg csomagban elérhető 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](https://www.raspberrypi.com/software/operating-systems/#raspberry-pi-desktop) Oracle VirtualBox-ban futtatva egy Windows 10-et futtató laptopon. **Cél:** 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. ## Raspberry Pi OS installálása A [Raspberry Pi Imager](https://downloads.raspberrypi.org/imager/imager_latest.exe) 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. Ehhez a rendszerhez a RASPBERRY PI OS LITE (32-bit)-et választottam, 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 ``` ### Következik a csomagok telepítése ``` apt-get build-dep qt5-qmake apt-get install gdbserver ``` ## 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-arm-linux-gnueabihf g++-arm-linux-gnueabihf apt-get install gcc git bison python gperf pkg-config gdb-multiarch build-essential ``` ### 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 látni kell ``` 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 ``` ssh-copy-id @ ``` 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 @ ``` ### Munkakönyvtár felépítése **Könyvtár struktúra létrehozása** Az ~/rpi 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 könyvtárak 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 @:/lib sysroot rsync -avz --rsync-path="sudo rsync" --delete @:/usr/include sysroot/usr rsync -avz --rsync-path="sudo rsync" --delete @:/usr/lib sysroot/usr rsync -avz --rsync-path="sudo rsync" --delete @:/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 ``` 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 -nomake tests -make libs -pkg-config -no-use-gold-linker -v -recheck ``` Eszközök: 1. linux-rasp-pi3-g++ 2. linux-rasp-pi4-v3d-g++ Sikeres fordítás után lehet installálni ``` make install ``` Újrakezdéshez a build könyvtárat ki kell üríteni ``` rm -rf * ``` ### 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, oott 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 ```