Utilisation de Qt sur la carte TQ6410

Cette carte a été acheté dans le but de développer une application graphique de commande d’un processus industriel. Le choix du kit graphique est pour l’instant Qt. Pour construire cette application, nous allons la développer sur notre machine de bureau puis la « cross-compiler » pour ensuite la faire fonctionner sur le système embarqué. Il existe sur internet de nombreux sites qui présente cette méthode. Je me base sur les sites suivants : http://cor-net.org/2009/03/qt-45-on-mini2440/ , sur le bill’s blog et sur le site de Pobot (article1 et article2).

Je travaille avec une debian Sqeeze Grip (6.0). Les « pseudos » systèmes de fichiers /proc et /sys sont bien montés au démarrage. Le framebuffer est bien géré par le noyau. Le « touchscreen » est détecté dans /devices/virtual/input/input0. Un petit tour dans /dev que udev a peuplé pour trouver « fb0 » et « input/event0 ». La gestion du touchscreen sera assuré par la librairie tslib. Celle-ci a été installé avec les paquets standards de debian (voir les autres articles). La base semble correct…En fait lors des premières compilations de Qt j’ai eu des soucis avec la librairies tslib qu’il ne trouvait pas même en ayant installé les paquets de développement. J’ai donc choisi de recompiler complètement la librairie et les utilitaires qui l’accompagne. La procédure est décrite ci-dessous.

La librairie tslib nécessite autoconf, d’où l’installation de autoreconf. Ensuite on compile en dynamique et en statique et enfin on installe dans /usr/local/tslib. Ce répertoire est ensuite copié intégralement sur la SDCard qui contient le ‘rootfs’ pour la carte TQ6410. On monte la carte et on copie le tout :

On passe maintenant à la compilation de Qt. Sur notre machine de développement, on créée un nouveau répertoire puis on télécharge à l’aide de wget la dernière archive en date (qt-4.7.3 : 204Mo) de qt-everywhere enfin on désarchive le tout:

On rentre dans le répertoire puis on modifie le mkspec pour un arm v6 (arm11 sur le S3C36410):

On adapte l’existant pour faire pointer vers notre chaine de cross-compilation (ici arm-linux-gnueabi-xxxx), on rajoute les lignes QMAKE_INCDIR, QMAKE_LIBDIR pour qu’il utilise les includes et librairies de la TSLIB. La ligne QMAKE_LFLAGS permet d’éviter une erreur à l’édition de lien (voir ce lien). On lance ensuite la création des ‘makefiles’ puis la compilation et l’installation avec les commandes suivantes:

Dans la ligne ‘configure’ on génère tous les exemples, démos, docs, librairies, etc…Je l’ai laissé pour être sur de tout avoir correctement cependant la durée de compilation sur ma machine est énorme (plus de 6H : attention c’est un athlon et un disque ide de 40Go). Si une erreur apparaît en disant qu’il ne trouve pas la tslib, passez l’argument ‘-v’ à la commande configure puis regarder les logs. Dans la plupart des cas c’est qu’il ne trouve pas le compilateur : mettre dans le qmake.conf le nom et le chemin complet du cross-compilateur. Le ‘make install’ n’est pas strictement nécessaire car il va copier dans /usr/local/Qt l’ensemble des fichiers. Ca fait un peu doublon mais ensuite je vais transférer ce répertoire directement sur la carte SD qui contient ma debian lenny Grip (procédure identique à la copie de la tslib, ici le répertoire source est /usr/local/Qt).

Du coté de la carte TQ6410, je désinstalle les paquets que j’avais installé auparavant et qui risque de gêner quand je vais installer Qt: nodm, matchbox et libts:

On installe ensuite la tslib que l’on a compilé auparavant sur notre machine de développement et on informe que l’on a de nouvelles librairies en créant un fichier /etc/ld.so.conf/tslib.conf qui contient le chemin vers les nouvelles librairies. Dans mon cas ce sera: /usr/local/tslib/lib. On met à jour la configuration en lançant ldconfig. Ensuite éditez le fichier /usr/local/tslib/etc/ts.conf pour décommenter la ligne qui contient ‘module raw’. Faire ensuite tous les exports de la tslib en faisant bien attention aux chemins et en laissant TSLIB_CALIBFILE= vide.

On lance ensuite la calibration de l’écran avec:

Vous appuyez sur les croix qui apparaissent…vous obtenez alors un fichier de calibration de l’écran. Vous pouvez alors faire l’export de TSLIB_CALIBFILE correctement:

Pour tester lancez : /usr/local/tslib/bin/ts_test. Si c’est bon vous pouvez tester les applications Qt que vous avez compilé précédemment. Elles sont disponibles dans /usr/local/Qt/examples et demos. Quand vous lancez une application, il faut faire:

./nom_appli -qws pour la lancer en mode embarqué. Si les caractères sont illisibles à l’écran, il faut rajouter deux variables aux précédentes:

Ces variables correspondent bien sur à mon écran (ici un 7 »). J’ai ensuite récupéré une démonstration de ‘widget’ pour l’embarqué pour les compiler. J’ai suivi la procédure de pobot mais j’ai désarchivé dans /usr/local/Qt. J’ai donc un nouveau répertoire du nom de ’embedded-widgets-1.1.0′. Pour compiler ces nouveaux exemples, j’ai tapé ces lignes dans le répertoire précédemment cité:

J’ai ensuite transféré ce répertoire sur ma carte SD et testé sur la carte TQ6410. Cela fonctionne très bien et les widgets sont réellement impressionnants.

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.