Skip to main content

Installazione Qt 4.6.2 su target ARM (Scheda FriendlyARM mini 2440 con touchscreen da 7")

Con questo tutorial si intende fornire una lista di semplici passi per compilare ed installare Qt 4.6.2 su target ARM, per la precisione sulla scheda Friendly ARM Mini 2440 dotata di sistema Linux "embedded" (kernel 2.6.29) fornito dal costruttore.

La scheda in questione è abbastanza parca nella dotazione hardware il che non ci consente di utilizzare un tool di sviluppo installato direttamente su di essa, per cui siamo costretti a utilizzare un sistema operativo host su cui ricompilare Qt e successivamente installare le librerie risultanti sul target..
L'installazione qui proposta è stata verificata sui seguenti ambienti host:
 
  • CentOS 5.4
  • Fedora 12

Sono stati rilevati alcuni problemi con queste distribuzioni :

  • Ubuntu 9.04
  • Ubuntu 9.10
  • OpenSUSE 11.2

Per prima cosa occorre procurarsi la toolchain GCC
http://www.friendlyarm.net/dl.php?file=arm-linux-gcc-4.3.2.tgz

A questo punto scompattiamo il file scaricato
tar -xzf arm-linux-gcc-4.3.2.tgz
e poi copiamo l'albero di files così creato, sotto
/usr/local/
Ricordiamoci l'export di questa nuova directory nel nostro PATH, per chi usa bash sarà ad esempio:
export PATH=/usr/lcal/arm/4.3.2/bin:$PATH

Scarichiamo ora Qt:

http://get.qt.nokia.com/qt/source/qt-everywhere-opensource-src-4.6.2.tar.gz

e analogamente scompattiamo il file tar.gz in una directory temporanea (ad es /home/utente/)

A questo punto occorre, prima di procedere con il configure, informare Qt della nostra toolchain gcc. Più precisamente dovremo modificare il contenuto del file qmake.conf relativo al sistema operativo per cui vogliamo cross-compilare. In altre parole, usando un target linux per CPU ARM, dovremo cambiare il file

file: mkspecs/qws/linux-arm-g++/qmake.conf

riportando le seguenti modifiche:
 
commentiamo le linee

#QMAKE_CC = arm-linux-gcc
#QMAKE_CXX = arm-linux-g++
#QMAKE_LINK = arm-linux-g++
#QMAKE_LINK_SHLIB = arm-linux-g++

e sostituiamole con

QMAKE_CC = arm-none-linux-gnueabi-gcc
QMAKE_CXX = arm-none-linux-gnueabi-g++
QMAKE_LINK = arm-none-linux-gnueabi -g++
QMAKE_LINK_SHLIB = arm-none-linux-gnueabi-g++

commentiamo anche

#QMAKE_AR = arm-linux-ar cqs
#QMAKE_OBJCOPY = arm-linux-objcopy
#QMAKE_STRIP = arm-linux-strip

e rimpiazziamole con

QMAKE_AR = arm-none-linux-gnueabi-ar cqs
QMAKE_OBJCOPY = arm-none-linux-gnueabi-objcopy
QMAKE_RANLIB = arm-none-linux-gnueabi –ranlib 

Queste modifiche consentono appunto di informare Qt circa la toolchain GCC, per la cross-compilazione su target ARM, che intendiamo usare. 
Il file qmake.conf che abbiamo selezionato si trova sotto qws (la directory di spec riservata alle distribuzioni linux embedded).

Opzionalmente è possibile cambiare i flags di ottimizzazione del codice, io consiglio di disattivare l'ottimizzazione avendo riscontrato alcuni errori di "illegal instuction".

Per inibire l'ottimizzazione applicate la seguente modifica: 
file: /mkspecs/common/g++.conf 
QMAKE_CFLAGS_RELEASE += -O2  
in 
QMAKE_CFLAGS_RELEASE += -O0

A questo punto siamo pronti per compilare e installare Qt.
Apriamo una shell e lanciamo il seguente comando:

./configure -embedded arm -xplatform qws/linux-arm-g++ -prefix \
/usr/local/Qt -qt-mouse-tslib -little-endian -no-webkit -no-qt3support \
-no-cups -no-largefile -optimized-qmake -no-openssl -nomake tools

poi diventiamo root e lanciamo il comando make.

Se tutto è andato per il verso giusto e non si sono verificati errori durante la compilazione, ora avrete sulla vostra Fedora, o CentOS, le librerie Qt compatibili con una CPU ARM; installiamole quindi con il comando 

make install.

Volendo, possiamo compilare un esempio tra quelli messi a disposizione da Nokia.
L'esempio verrà compilato sul nostro sistema host, per eseguirlo andrà passato sulla FriendlyARM su cui avremo impostato le seguenti variabili di ambiente:
 
export TSLIB_TSEVENTTYPE=INPUT
export TSLIB_CONSOLEDEVICE=none
export TSLIB_FBDEVICE=/dev/fb0
export TSLIB_TSDEVICE=/usr/input/ts
export TSLIB_CALIBFILE=/usr/etc/pointercal
export TSLIB_CONFFILE=/usr/etc/ts.conf
export TSLIB_PLUGINDIR=/usr/lib/ts
export LD_LIBRARY_PATH=/usr/local/Qt/lib
export QTDIR=/usr/local/Qt
export QWS_MOUSE_PROTO=tslib:/usr/input/ts
export QWS_DISPLAY=LinuxFB:mmWidth=310:mmHeight=190

Se l'esempio lo abbiamo compilato includendo staticamente le librerie Qt dovremmo vederlo girare senza intoppi perché le librerie saranno incluse nell'eseguibile, altrimenti dovremo installare sulla FriendlyArm anche le libreire Qt precedentemente compilate. Le librerie andranno installate 

nella dir su cui punta LD_LIBRARY_PATH o nel path standard delle librerie cui punta linux del FriendlyARM.

Ricordiamoci di lanciare da linea di comando il nostro applicativo con l'opzione -qws, questo per informare Qt del fatto che verrà eseguito su un sistema Linux embedded. 

Paolo Sereno

 

Creative Commons License