- ett litet IoT device
Jag har länge haft en 3,5" TFT skärm från Adafruit liggande hemma, inköpt på Kjell & Co för att den verkade så praktiskt till allehanda små manicker. Men det visade sig var knepigare än jag tänkt att få den att fungera tillsammans med Raspberry Pi på det sätt som jag önskade mig. Förvisso finns det föråldrade specialversioner av Linuxkärnan att ladda ned från Adafruits hemsida och Pythonbibliotek att bygga allt man vill i, men jag önskar mig en lätt, snabb och smidig lösning utan en massa specialmoduler och patchar. Dessutom har jag programmerat en del Qt och fått tycke för kombinationen av snabb C++ kod och lättprogrammerade gränssnitt i QML/Javascript.
Inte heller är jag intresserad av att köra flera olika program på samma enhet, och har därför inte någon användning för att släpa runt på hela X-server med fönsterhanterare och allt annat som hör till.
Men inte bara stå och titta och sucka - nu måste det hända något. Så jag satte igång och gräva och lyckades tillslut få till en mycket trevlig setup - med korskompilering av Qt5 för ARM. Korskompilering innebär att man kompilerar allt på en vanlig dator, laddar över och kör programmet när allt är klart på Pi:en. Qt fixar det grafiska på egen hand så det räcker att köra lite-versionen av Raspbian utan X11.
Att få allt att fungera var ett rent h3lvet, så för att ingen annan skall behöva genomlida samma elände och för att jag själv skall komma ihåg alla manövrar, har jag sammanställt en guide. Det är inget för känsliga personer, men belöningen är stor . Jag kan inte garantera att jag fått allt rätt och vill inte på något sätt påstå att jag är kompetent på området, men, men... Om någon blir sugen att ge sig på det hela, skriv och berätta hur det går! Lycka till!
Jag själv kör openSUSE 43.3 på datorn som användas för kompilering, men instruktionen torde fungera utan vidare för andra distributioner. Guiden funkar bara för 64-bitas Raspberry Pi 3 för närvarande.
Installera Qt och Qt Creator
Qt är ett applikationsramverk för Linux, Windows och Mac, ursprungligen skapat att Trolletch som sedermera köptes upp av Nokia och därefter blev det rörigt. Qt är också grunden i Linuxskrivbordsmiljön KDE. Licensavtalet för Qt har varit ett orosmoln i Linuxvärlden, framför allt med tanke på KDE:s framtid, men nu verkar allt ha lugnat ned sig och så länge man vill utveckla open sourceprogram är Qt fritt under licensformen LGPL. Qt Creator är ett IDE att utveckla Qt program i, men man kan naturligtvis också arbeta i andra IDE. I denna guide kommer jag att utgå från Qt Creator och det skall vi börja med att installera på vår riktiga dator som jag kallar kompileringsdatorn.
- Börja med att skapa den katalog du vill installera Qt i. I denna guide kommer jag att använda mig av /opt/Qt . Du kan naturligtvis placera Qt var som helst men det kan bli lite rörigt att följa guiden då. För att skapa katalogen:
Kod: Markera allt
sudo mkdir /opt/Qt sudo chown root:users /opt/Qt && sudo chmod 775 /opt/Qt
- Ladda hem installationsverktyget från https://www.qt.io/download . Välj opensource-alternativet, acceptera licensen och klicka på "Download". Att ladda ned random körbara filer från internet ger lite windows-vibbar, men, men Qt får väl betraktas om pålitliga
- Du måste göra den nedladdade filen körbar, antingen genom att kryssa för 'körbar' filhanteraren eller i bash (typ chmod 775 [filnamn] )
- Kör installationsprogrammet och skapa ett Qt-konto. Ange den katalog du skapade tidigare som sökväg i installationsprogrammet.
- Nu skall du välja vad du vill installera. Qt Creator är automatiskt förkryssad, och utöver det valde jag följande:
Android behöver vi inte.
- Nu skall det inte vara mer att fylla i utan det är bara att rulla igång nedladdningen med påföljande installation (tar ett tag).
- Starta Qt Creator när installationen är klar, och skapa en enkel Qt Quick-applikation för att kolla att allt funkar som det skall.
Förberedelser på RasperryPi-datorn
- Ladda hem och installera Raspbian Lite (aktuell länk: https://www.raspberrypi.org/downloads/raspbian/). Qt tar själv hand om det grafiska så vi behöver inte den större avbilden med Xorg. I skrivande stund heter den avbild vi behöver "2017-08-16-raspbian-stretch-lite.img" . Hur man skriver över avbilden till minneskortet finns det flera utmärka guider om på internet så det går jag inte in närmare på här.
- Montera det nygjorda minneskortet (finns också bra guider på internet), jag gjorde såhär:
- Stoppa i det nyskrivna minneskortet i minneskortsläsaren och anslut till datorns USB-port.
- Skriv in dmesg och du borde få tillbaka en massa text som slutar ungefär såhär:
Kod: Markera allt
[ 341.472519] sd 6:0:0:3: [sdf] No Caching mode page found [ 341.472521] sd 6:0:0:3: [sdf] Assuming drive cache: write through [ 341.487469] sdf: sdf1 sdf2 [ 341.492188] sd 6:0:0:3: [sdf] Attached SCSI removable disk jonas@kontor423:~>
- Minneskortet har två partitioner som tilldelas ett namn i formatet sdx1 och sdx2 där x är en bokstav mellan a och z. I mitt fall blev det f vilket syns i raden "sdf: sdf1 sdf2"
- Vi måste göra några förändringar i den andra partitionen (sdx1) innan vi kan starta Pi:en med Adafruit-bildskärmen, så därför monterar vi enheten på vår riktiga dator först:
Kod: Markera allt
jonas@kontor423:~> sudo mount /dev/sdf1 /mnt [sudo] lösenord för root: jonas@kontor423:~> cd /mnt jonas@kontor423:/mnt> ls bcm2708-rpi-0-w.dtb bcm2708-rpi-cm.dtb bcm2710-rpi-cm3.dtb config.txt fixup.dat issue.txt LICENCE.broadcom start_cd.elf start_x.elf bcm2708-rpi-b.dtb bcm2709-rpi-2-b.dtb bootcode.bin COPYING.linux fixup_db.dat kernel7.img LICENSE.oracle start_db.elf bcm2708-rpi-b-plus.dtb bcm2710-rpi-3-b.dtb cmdline.txt fixup_cd.dat fixup_x.dat kernel.img overlays start.elf jonas@kontor423:/mnt>
- Först måste vi tillåta ssh-access till Pi:en, eftersom många filer måste synkas vid korskompileringen:
Om allt funkat som tänkt skall en fil utan innehåll med namnet "ssh" nu skapats i partitionens rotkatalog. Existensen av denna fil möjliggör ssh-access till Pi:en. Gör en listning och kolla för säkerhets skull (för mig ser det ut att ha gått fint ):Kod: Markera allt
sudo touch /mnt/ssh
Kod: Markera allt
jonas@kontor423:/mnt> sudo touch ssh [sudo] lösenord för root: jonas@kontor423:/mnt> ls bcm2708-rpi-0-w.dtb bcm2708-rpi-cm.dtb bcm2710-rpi-cm3.dtb config.txt fixup.dat issue.txt LICENCE.broadcom ssh start.elf bcm2708-rpi-b.dtb bcm2709-rpi-2-b.dtb bootcode.bin COPYING.linux fixup_db.dat kernel7.img LICENSE.oracle start_cd.elf start_x.elf bcm2708-rpi-b-plus.dtb bcm2710-rpi-3-b.dtb cmdline.txt fixup_cd.dat fixup_x.dat kernel.img overlays start_db.elf jonas@kontor423:/mnt>
- Som ni ser finns det också två filer som heter config.txt och cmdline.txt. För att få Adafruit-skärmen att tuffa igång måste vi göra några tillägg i dessa. Lägg först till följande rader i config.txt :
(Använder du den mindre 2.8" skämen byt ut "pitft35-resistive.dtbo" till "pitft28-resistive.dtbo" och kör du en Rpi 2:a byt ut speed=42000000 till speed=32000000)I cmdline.txt skall vi lägga till följande text till slutet av filens enda rad:Kod: Markera allt
[pi1] device_tree=bcm2708-rpi-b-plus.dtb [pi2] device_tree=bcm2709-rpi-2-b.dtb [all] dtparam=spi=on dtparam=i2c1=on dtparam=i2c_arm=on dtoverlay=pitft35-resistive.dtbo,rotate=270,speed=42000000,fps=20
Så här skall den alltså se ut efteråt:Kod: Markera allt
fbcon=map:10 fbcon=font:VGA8x8
Kod: Markera allt
jonas@kontor423:/mnt> sudo vim cmdline.txt jonas@kontor423:/mnt> cat cmdline.txt dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=PARTUUID=ee397c53-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait quiet init=/usr/lib/raspi-config/init_resize.sh fbcon=map:10 fbcon=font:VGA8x8 jonas@kontor423:/mnt>
- Då var vi färdiga med förberedelserna av minneskortet och redo för uppstart! Montera PiTFT-skärmen på gpio-porten, stoppa i minneskortet, koppla in nätverkskabel och anslut strömmen. Först skall skärmen bli helt vit (tyder på att den fungerar) men efter en (lång) stund skall den slockna och texten från uppstarten börja rulla. Anslut ett USB-tangentbord och logga in med Login: pi Password: raspberry .
Ett tips är att redan innan montaget av displayen ansluta en flatkabel till stiftraden på undersidan av skärmen för att få åtkomst till resteraden gpio-portar:
- Kör följande kommando för att uppdatera Raspbian (kom ihåg att byta ut datum och tid mot aktuell):
Om den brittiska tangetbordslayouten gör dig såhär arg: , kör sudo raspi-config och fixa till problemet innan något ömtåligt åker i väggen .
Kod: Markera allt
sudo date -s '2018-02-20 12:00:00' sudo rpi-update sudo reboot sudo apt-get update sudo apt-get upgrade sudo reboot
- Vi behöver några bibliotek för att köra Qt på Pi:en och de skall vi ladda hem nu. Börja med att inkludera dem i källförråden genom att ta bort kommentartecknet # framför raden som börjar med "deb-src" i filen "/etc/apt/sources.list" . Så här skall alltså filen se ut efter genomförd operation:
Så kan vi installera nödvändiga paket:Kod: Markera allt
pi@raspberrypi:/etc/apt $ cat sources.list deb http://mirrordirector.raspbian.org/raspbian/ stretch main contrib non-free rpi # Uncomment line below then 'apt-get update' to enable 'apt-get source' deb-src http://archive.raspbian.org/raspbian/ stretch main contrib non-free rpi pi@raspberrypi:/etc/apt $
Kod: Markera allt
sudo apt-get update sudo apt-get build-dep qt4-x11 sudo apt-get build-dep libqt5gui5 sudo apt-get install libudev-dev libts-dev libxcb-xinerama0-dev libxcb-xinerama0
- Vi behöver också en katalog där vi lägger alla qt5 filer som snart kommer att kompileras:
Kod: Markera allt
sudo mkdir /usr/local/qt5pi sudo chown pi:pi /usr/local/qt5pi
- Qt behöver några miljövariabler som skall initieras vid varje uppstart. Skapa filen "/etc/profile.d/qt5-env.sh" (katalogen är skrivskyddad så glöm inte sudo):
Kod: Markera allt
#!/bin/sh export PATH=${PATH}:/usr/bin/qt5 export TSLIB_FBDEVICE=/dev/fb1 export TSLIB_TSDEVICE=/dev/input/touchscreen export QT_QPA_GENERIC_PLUGINS=tslib:/dev/input/touchscreen export QT_QPA_PLATFORM=linuxfb:fb=/dev/fb1 export QT_QPA_EGLFS_TSLIB=1
- Qt kommer att ladda upp alla dina program i mappen "/opt" som du därför behöver läs och skrivrättigheter till:
Kod: Markera allt
sudo chown root:users /opt sudo chmod 775 /opt
- Som en sista åtgärd på Pi:en skall vi skall nu fixa till touchscreenen - den är galet kalibrerad och dessutom roterad 90 grader.
Börja med att fixa en udev-regel som ger touchen ett stabilare namn att referera till i Qt ( /dev/input/touchscreen ).
Skapa filen /etc/udev/rules.d/95-stmpe.rules (skrivskyddad katalog så glöm inte sudo) med innehållet:
Kod: Markera allt
SUBSYSTEM=="input", ATTRS{name}=="stmpe-ts", ENV{DEVNAME}=="*event*", SYMLINK+="input/touchscreen"
- Kör nedanstående kommando för att starta om touch-drivrutien och kontrollera att det nya namnet listas i /dev/input :
På min maskin såg det ut så här:
Kod: Markera allt
sudo rmmod stmpe_ts sudo modprobe stmpe_ts ls -l /dev/input/
Id:t "event2" kan byta namn efter omstart beroende på huruvida mus och tangentbord är anslutet, men med udev-regeln kommer "/dev/input/touchscreen" alltid att referera till rätt enhet.Kod: Markera allt
pi@raspberrypi:~ $ sudo vi /etc/udev/rules.d/95-stmpe.rules pi@raspberrypi:~ $ sudo rmmod stmpe_ts pi@raspberrypi:~ $ sudo modprobe stmpe_ts pi@raspberrypi:~ $ ls -l /dev/input/ total 0 drwxr-xr-x 2 root root 80 Feb 20 14:38 by-id drwxr-xr-x 2 root root 100 Feb 20 14:51 by-path crw-rw---- 1 root input 13, 64 Feb 20 14:38 event0 crw-rw---- 1 root input 13, 65 Feb 20 14:38 event1 crw-rw---- 1 root input 13, 66 Feb 20 14:51 event2 crw-rw---- 1 root input 13, 63 Feb 20 14:38 mice crw-rw---- 1 root input 13, 32 Feb 20 14:51 mouse0 lrwxrwxrwx 1 root root 6 Feb 20 14:51 touchscreen -> event2 pi@raspberrypi:~ $
- Nu återstår bara att kalibrera skärmen med tslib. Tslib är egentligen onödigt eftersom Qt kan arbeta direkt mot kärnan (evdev), men det verkar tyvärr inte vara möjligt att kalibrera skärmen då. Så vi får kämpa på med tslib, men det fungerar enligt min erfarenhet alldeles utmärkt . Installera och kör kalibreringsprogrammet:
Kod: Markera allt
sudo apt-get install evtest tslib libts-bin sudo TSLIB_FBDEVICE=/dev/fb1 TSLIB_TSDEVICE=/dev/input/touchscreen ts_calibrate
Ett program startar som ber dig att klicka på ett kryss som flyttas runt till fem olika punkter och därefter avslutas. Om allt gått enligt planerna skall programmet ha skapat filen "/etc/pointercal" som innehåller all kalibreringsdata:Kod: Markera allt
pi@raspberrypi:/ $ cat /etc/pointercal 6 -8482 32650316 5579 32 -1068152 65536pi@raspberrypi:/ $
- Nu skall allt vara klart på Pi:en, och vi kan gå vidare med nästa steg - den stoora korskompileringen . Men nu måste jag ha mer kaffe.
Korskompilering av Qt
- Det är nu dax att åter tillgripa den dator som vi använde i början av denna guide vilken är den maskin vi kommer att kompilera alla våra program på. Att få ordning på alla kataloger och filer är ett smärre helvete, och för att lindra smärtan något har jag försökt tillverka ett bash-skript som skapar erforderlig katalogstruktur och förhoppningsvis tillverkar några andra bash-skript som skall hjälpa på vägen.
Men vi börjar med att fixa en ssh-uppkoppling mot vår Pi med public-key autentisering. Om du inte ändrat på något skall Pi:en skall koppla upp mot ditt nätverk med namnet raspberrypi . Prova och pinga och så det funkar. Skapa sedan en nyckeluppsättning och kopiera över den publika nyckeln till Pi:en:
Du skall alltså nu kunna ssh:a in på Pi:en utan något lösenord. Raspbian kommer att gnälla över att du inte bytt ut standardlösenordet, och det bör du kanske göra nu.Kod: Markera allt
ssh-keygen ssh-copy-id pi@raspberrypi
- Vi behöver också lite verktyg på vår dator för att kunna bygga Qt korrekt. Kör du openSUSE Installera med:
För Ubuntu tror jag du behöver:
Kod: Markera allt
sudo zypper install git-core gcc-c++ make tree
Kod: Markera allt
sudo apt-get install build-essential perl python git tree
- Nu går vi vidare med att skapa en katalog på vår kompileringsdator för korskompileringsstuffet och ladda ned mitt hjälpscript (se till att du har git installerat på din dator):
Om allt gått vägen skall du nu ha mitt bash-skript init_root.sh i aktuell katalog.
Kod: Markera allt
sudo mkdir /opt/raspi sudo chown root:users /opt/raspi && sudo chmod 775 /opt/raspi cd /opt/raspi git clone https://github.com/pianojonas/qt_crosscompile.git cd /opt/raspi/qt_crosscompile/ chmod 775 init_root.sh
- Se till att ha tree installerat på din dator innan du kör skriptet, eftersom vi då kan kolla i fall alla kataloger skapats enligt plan ("sudo zypper in tree" om du kör openSUSE, annars något apt-get install jox). Så kör vi scriptet och ser vad som händer:
Kontrollera att alla kataloger skapats på din dator enligt listningen ovan - detta är mycket viktigt om fortsättningen skall lyckas!Kod: Markera allt
jonas@toshiba3:/opt/raspi/qt_crosscompile> ./init_root.sh Cheking your directory settings... ok Creating directory structure in /opt/raspi... /opt/raspi ├── qt5pi ├── qt_crosscompile │ ├── init_root.sh │ ├── LICENSE │ └── README.md └── sysroot ├── opt └── usr 5 directories, 3 files Creating Qt build structure in /opt/Qt/5.10.1... /opt/Qt/5.10.1 ├── arm_64 ├── build_arm ├── gcc_64 └── Src 4 directories, 0 files Creating script file for syncing your pi (/opt/raspi/sync_sysroot.sh)... Creating script file for fixing symlinks (/opt/raspi/fix_symlinks.sh)... Creating script file for building qmake (/opt/Qt/5.10.1/build_arm/conf.sh)... Done Follow instructions in '/opt/raspi/README.txt' jonas@toshiba3:/opt/raspi/qt_crosscompile>
- Scriptet skapade en instruktionsfil för fortsättningen, så låt oss kika in i den:
En diger lista, men vi måste ta oss genom den punkt för punkt.
Kod: Markera allt
jonas@toshiba3:/opt/raspi/qt_crosscompile> cat /opt/raspi/README.txt 1. Download toolchain, run: git clone https://github.com/raspberrypi/tools /opt/raspi/tools 2. Sync your sysroot with the pi device, run: /opt/raspi/sync_sysroot.sh 3. Fix symlinks, run: /opt/raspi/fix_symlinks.sh 4. Goto the Qt build directory, run: cd /opt/Qt/5.10.1/build_arm 5. Configure qmake, run: ./conf.sh 6. Build qmake, run: make 7. Install qmake in /opt/raspi/sysroot and /opt/Qt/5.10.1/arm_64, run: sudo make install 8. Sync your sysroot with the pi device, run: /opt/raspi/sync_sysroot.sh 9. Good luck :-), run [heavy insults] > /dev/null by piano_jonas 2018 jonas@toshiba3:/opt/raspi/qt_crosscompile>
- Börja med att ladda ned kompilatorn som behövs för att generera ARM-kod (kallas tool-chain). Den är ganska stor så det kommer att ta ett tag innan allt är hemma:
Kod: Markera allt
git clone https://github.com/raspberrypi/tools /opt/raspi/tools
- Scriptet skapade en katalog som heter "/opt/raspi/sysroot" på kompileringsdatorn som skall vara en spegling av några kataloger på Pi:en. Vi måste alltså ladda över dessa filer från Pi:en till kompileringsdatorns hårddisk, och det gör vi med rsync. Ett hjälpscript skapat av min bash-fil fixar (förhoppningsvis) det åt dig:
(Förutsättningen för att scriptet skall fungera är att du har ssh access till Pi:en med public-key samt att datorn går att nå på nätverket under namnet "raspberrypi")
Kod: Markera allt
/opt/raspi/sync_sysroot.sh
- Några symlänkar måste fixas i sysrooten, vilket följande script borde hjälpa dig med. Det ladda ned och kör ett pythonscript som går in och utför nödvändiga justeringar:
Kod: Markera allt
/opt/raspi/fix_symlinks.sh
- Nu börjar allvaret - kompileringen kan börja... Gå till biblioteket "/opt/Qt/5.10.1/build_arm" där du hittar ett script som konfigurerar Qt så det funkar till korskompileringen. Kör även detta:
Efter ett tag skall skärmen lugna ned sig och förhoppningsvis avslutas med de goda nyheterna:
Kod: Markera allt
cd /opt/Qt/5.10.1/build_arm ./conf.sh
Kod: Markera allt
Configure summary: Building on: linux-g++ (x86_64, CPU features: mmx sse sse2) Building for: devices/linux-rasp-pi3-g++ (arm, CPU features: neon) Configuration: cross_compile compile_examples enable_new_dtags largefile neon precompile_header shared rpath release c++11 concurrent dbus reduce_exports stl Build options: Mode ................................... release Optimize release build for size ........ no Building shared libraries .............. yes Using C++ standard ..................... C++11 Using ccache ........................... no Using gold linker ...................... no Using new DTAGS ........................ yes Using precompiled headers .............. yes Using LTCG ............................. no Target compiler supports: NEON ................................. yes Build parts ............................ libs tools Qt modules and options: Qt Concurrent .......................... yes Qt D-Bus ............................... yes Qt D-Bus directly linked to libdbus .... yes Qt Gui ................................. yes Qt Network ............................. yes Qt Sql ................................. yes Qt Testlib ............................. yes Qt Widgets ............................. yes Qt Xml ................................. yes Support enabled for: Using pkg-config ....................... yes QML debugging .......................... yes udev ................................... yes Using system zlib ...................... yes Qt Core: DoubleConversion ....................... yes Using system DoubleConversion ........ yes GLib ................................... yes iconv .................................. yes ICU .................................... no Logging backends: journald ............................. no syslog ............................... no slog2 ................................ no Using system PCRE2 ..................... no Qt Network: getifaddrs() ........................... yes IPv6 ifname ............................ yes libproxy ............................... no OpenSSL ................................ yes Qt directly linked to OpenSSL ........ no SCTP ................................... no Use system proxies ..................... yes Qt Gui: Accessibility .......................... yes FreeType ............................... yes Using system FreeType ................ yes HarfBuzz ............................... yes Using system HarfBuzz ................ yes Fontconfig ............................. yes Image formats: GIF .................................. yes ICO .................................. yes JPEG ................................. yes Using system libjpeg ............... yes PNG .................................. yes Using system libpng ................ yes EGL .................................... yes OpenVG ................................. no OpenGL: Desktop OpenGL ....................... no OpenGL ES 2.0 ........................ yes OpenGL ES 3.0 ........................ yes OpenGL ES 3.1 ........................ yes OpenGL ES 3.2 ........................ yes Vulkan ................................. no Session Management ..................... yes Features used by QPA backends: evdev .................................. yes libinput ............................... no INTEGRITY HID .......................... no mtdev .................................. yes tslib .................................. yes xkbcommon-evdev ........................ yes QPA backends: DirectFB ............................... no EGLFS .................................. yes EGLFS details: EGLFS OpenWFD ........................ no EGLFS i.Mx6 .......................... no EGLFS i.Mx6 Wayland .................. no EGLFS RCAR ........................... no EGLFS EGLDevice ...................... no EGLFS GBM ............................ yes EGLFS Mali ........................... no EGLFS Raspberry Pi ................... yes EGL on X11 ........................... no LinuxFB ................................ yes VNC .................................... yes Mir client ............................. no X11: Using system-provided XCB libraries .. yes EGL on X11 ........................... no Xinput2 .............................. yes XCB XKB .............................. yes XLib ................................. yes XCB render ........................... yes XCB GLX .............................. yes XCB Xlib ............................. yes Using system-provided xkbcommon ...... no Native painting (experimental) ....... yes Qt Widgets: GTK+ ................................... no Styles ................................. Fusion Windows Qt PrintSupport: CUPS ................................... yes Qt Sql: DB2 (IBM) .............................. no InterBase .............................. no MySql .................................. no OCI (Oracle) ........................... no ODBC ................................... yes PostgreSQL ............................. yes SQLite2 ................................ yes SQLite ................................. yes Using system provided SQLite ......... no TDS (Sybase) ........................... yes Qt SerialBus: Socket CAN ............................. yes Socket CAN FD .......................... yes QtXmlPatterns: XML schema support ..................... yes Qt QML: QML interpreter ........................ yes QML network support .................... yes Qt Quick: Direct3D 12 ............................ no AnimatedImage item ..................... yes Canvas item ............................ yes Support for Qt Quick Designer .......... yes Flipable item .......................... yes GridView item .......................... yes ListView item .......................... yes Path support ........................... yes PathView item .......................... yes Positioner items ....................... yes ShaderEffect item ...................... yes Sprite item ............................ yes Qt Gamepad: SDL2 ................................... no Qt 3D: Assimp ................................. yes System Assimp .......................... no Output Qt3D Job traces ................. no Output Qt3D GL traces .................. no Use SSE2 instructions .................. no Use AVX2 instructions .................. no Aspects: Render aspect ........................ yes Input aspect ......................... yes Logic aspect ......................... yes Animation aspect ..................... yes Extras aspect ........................ yes Qt 3D GeometryLoaders: Autodesk FBX ........................... no Qt Bluetooth: BlueZ .................................. no BlueZ Low Energy ....................... no Linux Crypto API ....................... no WinRT Bluetooth API (desktop & UWP) .... no Qt Sensors: sensorfw ............................... no Qt Quick Controls 2: Styles ................................. Default Fusion Imagine Material Universal Qt Quick Templates 2: Hover support .......................... yes Multi-touch support .................... yes Qt Positioning: Gypsy GPS Daemon ....................... no WinRT Geolocation API .................. no Qt Location: Geoservice plugins: OpenStreetMap ........................ yes HERE ................................. yes Esri ................................. yes Mapbox ............................... yes MapboxGL ............................. no Itemsoverlay ......................... yes Qt Multimedia: ALSA ................................... yes GStreamer 1.0 .......................... yes GStreamer 0.10 ......................... no Video for Linux ........................ yes OpenAL ................................. no PulseAudio ............................. yes Resource Policy (libresourceqt5) ....... no Windows Audio Services ................. no DirectShow ............................. no Windows Media Foundation ............... no Note: Also available for Linux: linux-clang linux-icc Note: PKG_CONFIG_LIBDIR automatically set to /opt/raspi/sysroot/usr/lib/pkgconfig:/opt/raspi/sysroot/usr/share/pkgconfig:/opt/raspi/sysroot/usr/lib/arm-linux-gnueabihf/pkgconfig Note: PKG_CONFIG_SYSROOT_DIR automatically set to /opt/raspi/sysroot Note: Dropped compiler flags '-pthread' when detecting library 'glib'. Note: Dropped compiler flags '-pthread' when detecting library 'gstreamer'. Note: Dropped compiler flags '-pthread' when detecting library 'gstreamer_app'. Qt is now configured for building. Just run 'gmake'. Once everything is built, you must run 'gmake install'. Qt will be installed into '/opt/raspi/qt5pi'. Prior to reconfiguration, make sure you remove any leftovers from the previous build. jonas@toshiba3:/opt/Qt/5.10.1/build_arm>
- Så är det dax för kompilering... Qt är stort och det kommer att ta ett bra tag. Vi kommer inte att bygga alla moduler, men trots det... lång tid, se till att datorn får tillräckligt med kylluft för den kommer att bli het. Snabba upp med växeln -jx efter make där du byter ut x:et mot antalet kärnor du har i din processor. På min 8-kärninga AMD körde jag t.ex. "make -j8". Avsluta med en installation vilket kräver sudo:
Kod: Markera allt
make sudo make install
- Har du klarat dig så långt skall du nu ha en rykande färsk ARM qmake på din dator (grattis ). Skicka över nödvändiga filer till Pi:en genom att åter köra:
Kod: Markera allt
/opt/raspi/sync_sysroot.sh
- Har ni orkat hit är ni värda en guldstjärna . Kompileringen klar, men vi måste göra några ytterligare inställningar i Qt Creator för att kunna börja tillverka program på vår RasPi. Starta Qt Creator och gör följande:
Kod: Markera allt
Tools -> Options -> Devices (flikraden till vänster) -> Devices Klicka på Add... Välj: Generic Linux Device -> Start Wizard The name to identify this configuration: RasPI The device's host name or IP address: raspberrypi The username to log into the device: pi The authentication type: Key Klicka på: "Next >" Klicka på: "Finish" Klicka på "OK"
Kod: Markera allt
Tools -> Options -> Build & Run (flikraden till vänster) -> Compilers Klicka på Add -> GCC -> C++ Name: "RasPI" Compiler path: "/opt/raspi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/arm-linux-gnueabihf-g++" ABI: arm-linux-generic-elf-32bit Klicka på "Apply" Klicka på Add -> GCC -> C Name: "RasPI" Compiler path: "/opt/raspi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/arm-linux-gnueabihf-gcc" ABI: arm-linux-generic-elf-32bit Klicka på "OK"
Kod: Markera allt
Tools -> Options -> Build & Run (flikraden till vänster) -> Debuggers Klicka på Add Name: "RasPI" Path: "/opt/raspi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/arm-linux-gnueabihf-gdb" Klicka på "OK"
Kod: Markera allt
Tools -> Options -> Build & Run (flikraden till vänster) -> Qt Versions Klicka på Add... Välj filen: "/opt/Qt/5.10.1/arm_64/bin/qmake" Klicka på "OK"
Kod: Markera allt
Tools -> Options -> Build & Run (flikraden till vänster) -> Kits Klicka på Add... Name: RasPI Device type: Generic Linux Device Device: RasPI Compiler C: RasPI Compiler C++: RasPI Debugger: RasPI Qt version: Qt 5.10.1 (arm_64) Klicka på "OK"
Kör hårt!
/jonas