Qt5 + Raspberry Pi + 3.5" PiTFT - piano_jonas IoT device

Berätta om dina pågående projekt.
piano_jonas
Inlägg: 42
Blev medlem: 10 mars 2014, 11:51:49
Ort: Åseda

Qt5 + Raspberry Pi + 3.5" PiTFT - piano_jonas IoT device

Inlägg av piano_jonas »

Qt Quick <> Raspberry Pi <> 3.5" TFT Touchscreen

- ett litet IoT device

Bild

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 :badgrin: . 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:

    Bild

    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.
Därmed är första delen avklarad. Har du aldrig tidigare arbetat i Qt kan jag rekommendera följande guide som intro till Qt:s förlovade värld: https://qmlbook.github.io/assets/qt5_cadaques.pdf . För det kan nog vara en fördel att vara åtminstone lite bevandrad i Qt innan du ger dig på korskompilering :shock:


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:

    Kod: Markera allt

    sudo touch /mnt/ssh
    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 8) ):

    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)

    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
    
    I cmdline.txt skall vi lägga till följande text till slutet av filens enda rad:

    Kod: Markera allt

    fbcon=map:10 fbcon=font:VGA8x8
    
    Så här skall den alltså se ut efteråt:

    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 .

    Bild

    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:
    Bild
  • Kör följande kommando för att uppdatera Raspbian (kom ihåg att byta ut datum och tid mot aktuell):

    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
    Om den brittiska tangetbordslayouten gör dig såhär arg: :evil: , kör sudo raspi-config och fixa till problemet innan något ömtåligt åker i väggen :) .

  • 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:

    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 $
    Så kan vi installera nödvändiga paket:

    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 :

    Kod: Markera allt

    sudo rmmod stmpe_ts
    sudo modprobe stmpe_ts
    ls -l /dev/input/
    På min maskin såg det ut så här:

    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:~ $
    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. :tumupp:
  • 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
    Bild

    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 :shock: . 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:

    Kod: Markera allt

    ssh-keygen
    ssh-copy-id pi@raspberrypi
    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.
  • Vi behöver också lite verktyg på vår dator för att kunna bygga Qt korrekt. Kör du openSUSE Installera med:

    Kod: Markera allt

    sudo zypper install git-core gcc-c++ make tree
    För Ubuntu tror jag du behöver:

    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):

    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
    Om allt gått vägen skall du nu ha mitt bash-skript init_root.sh i aktuell katalog.
  • 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:

    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>
    Kontrollera att alla kataloger skapats på din dator enligt listningen ovan - detta är mycket viktigt om fortsättningen skall lyckas!
  • Scriptet skapade en instruktionsfil för fortsättningen, så låt oss kika in i den:

    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>
    En diger lista, men vi måste ta oss genom den punkt för punkt. :humm:
  • 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:

    Kod: Markera allt

    /opt/raspi/sync_sysroot.sh
    (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")
  • 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:

    Kod: Markera allt

    cd /opt/Qt/5.10.1/build_arm
    ./conf.sh
    Efter ett tag skall skärmen lugna ned sig och förhoppningsvis avslutas med de goda nyheterna:

    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 :P). 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 :bravo: . 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"
    
    Bild

    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"
    
    Bild

    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"
    
    Bild

    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"
    
    Bild

    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"
    
    Bild
Tja, då var allt klart! Prova och gör ett nytt Qt Quick Application - projekt, kompilera och kör. Programmet skall nu starta automatiskt på Pi:en och debuginstruktioner typ qDebug() skall sändas till "Application Output" fönstret i Qt Creator. Helt fantastiskt smidigt och elegant när allt funkar som det skall!

Kör hårt!
/jonas
Senast redigerad av piano_jonas 29 mars 2018, 11:15:52, redigerad totalt 2 gånger.
Användarvisningsbild
Lennart Aspenryd
Tidigare Lasp
Inlägg: 12607
Blev medlem: 1 juli 2011, 19:09:09
Ort: Helsingborg

Re: Qt5 + Raspberry Pi + 3.5" PiTFT - piano_jonas IoT device

Inlägg av Lennart Aspenryd »

Tackar allra ödmjukast för denna eminenta beskrivning av väg (ar) och fallgropar. Jag var mycket intresserad av QT på den norska tiden.
Ditt inlägg väcker viljan! Inväntar lusten ;-)
Användarvisningsbild
stenD
Inlägg: 1347
Blev medlem: 23 september 2010, 21:53:35
Ort: Ljusfallshammar

Re: Qt5 + Raspberry Pi + 3.5" PiTFT - piano_jonas IoT device

Inlägg av stenD »

Bra jobb!! :tumupp: :tumupp: :tumupp: :tumupp: :tumupp:
Skriv svar