Olimex Qt Environnement/fr: Difference between revisions
No edit summary |
m (Fixed Qt casing) |
||
(5 intermediate revisions by 3 users not shown) | |||
Line 1: | Line 1: | ||
Install VM Debian | {{Cleanup | reason=Auto-imported from ExpressionEngine.}} | ||
Install VM Debian | |||
Conf debian | |||
création SD | |||
conf SD | |||
conf SD Qt | |||
conf debian Qt | |||
conf Qt | |||
autres | |||
Installation VM | Installation VM | ||
Télécharger | Télécharger | ||
virtualbox | |||
à l'adresse suivante | |||
http://download.virtualbox.org/virtualbox/4.3.20/VirtualBox-4.3.20-96997-Win.exe | |||
et | et | ||
debian (32bits) i382 (amd64) etant la version 64bits | |||
http://cdimage.debian.org/debian-cd/7.8.0/i386/iso-cd/debian-7.8.0-i386-netinst.iso | |||
installer virtualbox et créer une Machine virtuelle (VM) | installer virtualbox et créer une Machine virtuelle (VM) | ||
nom : [votre choix] | nom : [votre choix] | ||
type : Linux | |||
Version : Debian (32 bit) | |||
quantité mémoire 1024 minimum | |||
créer un disque dur virtuel maintenant | |||
format : VDI | |||
Dynamiquement alloué | |||
taille disque dur : 80 go minimum | |||
installation Debian : | |||
suivre les indication lors de l'installation | |||
Attention a bien faire attention lors de l'attribution du mdp administrateur pour ne pas l'oublier | |||
et pour plus de confort bien choisir votre langue pour avoir un clavier correctement mappé . | |||
configuration Debian : | |||
Pour résoudre le problème de résolution il faut installer les additions invitées | |||
<code>virtualbox : Périphériques -> Insérer l'image CD des additions invité | |||
démarrer un terminal en administrateur Application-> accessoire → terminal administrateur | |||
ou sur un console normal tapez : su – et le mot de passe administrateur | |||
Nous installons maintenant les paquet utils | |||
#apt-get install linux-headers-`uname -r` build-essential | |||
Se placer dans /media | |||
#cd /media/ | |||
Monter le CD des additions invitées | |||
#mount cdrom0 | |||
Se placer dans le répertoire du CD | |||
#cd cdrom | |||
Lancer le script | |||
#sh VboxLinuxAddition-XXXX.run | |||
il faut maintenant mettre a jour notre environnement avec les commandes suivante | |||
#apt-get update | |||
#apt-get upgrade | |||
Dans certain cas il y a des problème de clef il faut faire la manipulation suivante | |||
# apt-get install emdebian-archive-keyring | |||
configuration clavier | |||
il faut utiliser l'outil console-data | |||
#apt-get install console-data | |||
pour modifier plus tard le mappage il faut utiliser | |||
#dpkg console-data | |||
Pour les opération de compilation il peut être intéressant de supprimer le mode veille de la VM pour plus de confort | |||
Utilisez les commandes | |||
#xset s 0 0 | |||
#xset dpms 0 0 0 | |||
-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''—''-''-''-''-''-''-''- | |||
Création SD | |||
Processus complet pour créer une carte SD pour carte OLIMEX avec kernel 3.4.90 et Linux Debian | |||
toutes les étapes seront réalisé en console et en mode administrateur | |||
1. Installation de la toolchain | |||
Avant d'installer la ToolChain il faut ajouter un dépôt a ceux existant pour notre VM: | |||
#nano /etc/apt/sources.list | |||
et ajouter à la fin | |||
deb http://www.emdebian.org/debian squeeze main | |||
deb http://www.emdebian.org/debian sid main (Pour la version wheezy de Debian) | |||
puis ctrl-x | |||
et o ou y selon la langue pour enregistrer | |||
Installer la ToolChain avec les commande suivante | |||
# apt-get install gcc-4.7-arm-linux-gnueabihf ncurses-dev uboot-mkimage build-essential git | |||
cela va installer les outils pour : configurer le kernel, compiler le kernel, le uboot et finalement créer une image de ces éléments . | |||
Git permet de télécharger des paquets sur Github | |||
Vous avez maintenant les outils essentiel a la réalisation d'un noyau pour A20 | |||
2. construction du UBOOT | |||
Nous allons créer un dossier pour ne pas mélanger les éléments. | |||
# cd /home | |||
# mkdir a20-olimex | |||
# cd a20-olimex | |||
Télécharger les source de uboot sur github | |||
# git clone -b sunxi https://github.com/linux-sunxi/u-boot-sunxi.git | |||
après le téléchargement vous avez un nouveaux répertoire | |||
# cd u-boot-sunxi/ | |||
choisir dans les différente commande suivante celle correspondant a la carte A20 visé pour configurer le uboot | |||
Les noms des différent fichier de configuration peuvent être trouvé dans le fichier boards.cfg | |||
2.1 A20-OLinuXino_Lime2 board | |||
# make A20-OLinuXino_Lime2_config ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- | |||
2.2 A20-SOM board | |||
Il existe deux type de A20-SOM avec comme principale différence la vitesse du bus pour la mémoire DDR3 | |||
A20-SOM rev.B - DDR3 vitesse du bus 384MHz(6 layer PCB) | |||
A20-SOM après rev.D - DDR3 vitesse du bus 480MHz(8 layer PCB) | |||
A20-SOM up to rev.B type | |||
# make Olimex_A20-SOM_config ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- | |||
A20-SOM after rev.D il est posible d'utiliser le configuration du Lime2 | |||
# make A20-OLinuXino_Lime2_config ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- | |||
2.3 A20-OLinuXino-MICRO board | |||
# make A20-OLinuXino_MICRO_config ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- | |||
2.4 A20-OLinuXino-LIME board | |||
# make A20-OLinuXino_Lime_config ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- | |||
Pour construire le uboot utiliser les commandes suivante | |||
se placer dans /usr/bin | |||
# cd /usr/bin | |||
Modifier le lien vers le compilateur avec la commande suivante | |||
# ln -sf arm-linux-gnueabihf-gcc-4.7 arm-linux-gnueabihf-gcc | |||
ensuite retourner dans le dossier uboot | |||
# cd /home/a20-olimex/u-boot-sunxi/ | |||
# make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- | |||
A la fin du processus, vous pouvez vérifier si tout s'est bien passé | |||
# ls u-boot.bin u-boot-sunxi-with-spl.bin spl/sunxi-spl.bin | |||
Si le retour correspond a ça : | |||
→ spl/sunxi-spl.bin u-boot.bin u-boot-sunxi-with-spl.bin | |||
tout est OK ! | |||
# cd .. | |||
Vous devez vous trouver dans le dossier suivant | |||
/home/a20-olimex# | |||
3. Construction du kernel | |||
Les source du kernel sont disponible sur github | |||
télécharger les avec : | |||
# git clone https://github.com/linux-sunxi/linux-sunxi (étape longue ~ 30 min a 1M/sec) | |||
après le téléchargement allez dans le dossier | |||
# cd linux-sunxi/ | |||
Pour ajouter le support SPI il faut | |||
télécharger le fichier spi-sun7i.c | |||
# wget https://raw.githubusercontent.com/OLIMEX/OLINUXINO/master/SOFTWARE/A20/A20-build/spi-sun7i.c | |||
et le copier dans drivers/spi directory | |||
# cp spi-sun7i.c drivers/spi | |||
Télécharger les patch SPI.patch | |||
# wget https://raw.githubusercontent.com/OLIMEX/OLINUXINO/master/SOFTWARE/A20/A20-build/SPI.patch | |||
et appliquer le patch: | |||
# patch -p0 < SPI.patch | |||
Ils faut maintenant récupéré le fichier de configuration pour le kernel a20_olimex_defconfig | |||
# wget https://raw.githubusercontent.com/OLIMEX/OLINUXINO/master/SOFTWARE/A20/A20-build/a20_olimex_defconfig | |||
copier le fichier a20_olimex_defconfig dans le répertoire de configuration: | |||
# cp a20_olimex_defconfig arch/arm/configs/ | |||
et make: | |||
# make ARCH=arm a20_olimex_defconfig | |||
le résultat devrait être: | |||
→ configuration written to .config | |||
si vous voulez changer la configuration du kernel : | |||
(Attention a avoir une console en pleine écran pour permettre l'ouverture de l'utilitaire) | |||
# make ARCH=arm menuconfig | |||
Maintenant vous pouvez continuer avec la compilation du kernel | |||
# make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j4 uImage | |||
lorsque c'est fini vous avez un uImage et le message suivant qui confirme le bon déroulement: | |||
Kernel: arch/arm/boot/zImage is ready | |||
UIMAGE arch/arm/boot/uImage | |||
Image Name: Linux-3.4.90+ | |||
Created: Tue Aug 19 16:23:22 2014 | |||
Image Type: ARM Linux Kernel Image (uncompressed) | |||
Data Size: 4596072 Bytes = 4488.35 kB = 4.38 MB | |||
Load Address: 40008000 | |||
Entry Point: 40008000 | |||
Image arch/arm/boot/uImage is ready | |||
la prochaine étape et la construction des module du kernel: | |||
# make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j4 INSTALL_MOD_PATH=out modules | |||
# make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j4 INSTALL_MOD_PATH=out modules_install | |||
A ce point vous disposé de l'uboot et des modules kernel compilé pour votre cible. | |||
Le fichier uImage est dans linux-sunxi/arch/arm/boot/ | |||
Les modules kernel sont dans | |||
linux-sunxi/out/lib/modules/3.x.xx | |||
Ou 3.x.xx est la version du kernel. Dans notre cas | |||
linux-sunxi/out/lib/modules/3.4.90+ | |||
4. formatage et préparation de la carte SD | |||
il est recommandé d'utiliser une carte SD entre 2 et 16 Go en classe 10 . | |||
Premièrement il faut créer une table de partitions adapter a notre SD avec l'outil fdisk | |||
brancher SD dans un lecteur de carte SD sur la machine hôte . | |||
Il faut activer le périphériques pour la VM dans le option virtualbox | |||
</code>virtualbox → périphériques → périphériques USB | |||
Pour connaître le périphérique reconnus par notre VM il faut tester en branchant et débranchant la carte sd et en regarde le retour de | |||
# ls /dev/sd avec un <TAB> <TAB> pour voir la différence en général le périphérique est le sdb | |||
Lorsque vous connaissez le périphérique vous pouvez commencer les étapes pour le formater | |||
# fdisk /dev/sdX | |||
ensuite | |||
# p | |||
s'il existent des partitions, il faut les supprimer avec la commande suivante. | |||
Répété l'opération jusqu'à ce qu'il n'y est plus de partitions | |||
d enter | |||
création de la première partition | |||
# n enter p enter 1 enter enter ''16M | |||
Création de la seconde partition | |||
# n enter p enter 2 enter enter enter | |||
lister les partition créé | |||
# p enter | |||
Si vous avez correctement réaliser les étapes, vous devriez avoir pour une carte 4Go le message suivant | |||
Disk /dev/sdg: 3980 MB, 3980394496 bytes | |||
123 heads, 62 sectors/track, 1019 cylinders, total 7774208 sectors | |||
Units = sectors of 1 * 512 = 512 bytes | |||
Sector size (logical/physical): 512 bytes / 512 bytes | |||
I/O size (minimum/optimal): 512 bytes / 512 bytes | |||
Disk identifier: 0x00000000 | |||
Device Boot Start End Blocks Id System | |||
/dev/sdg1 2048 34815 16384 83 Linux | |||
/dev/sdg2 34816 7774207 3869696 83 Linux | |||
Écrivais les partitions | |||
press w | |||
Si cette étape rate il faut démonter la carte SD | |||
#umount /media/[indicatif de la carte] | |||
Refaite un fdisk puis w. | |||
Maintenant nous allons formater le système de fichier de la carte | |||
partition 1 → vfat | |||
partition 2 → ext3 | |||
X etant la lettre correspondant a notre carte. | |||
# mkfs.vfat /dev/sdX1 | |||
# mkfs.ext3 /dev/sdX2 | |||
5. Écrire le Uboot et u-boot-sunxi-with-spl.bin | |||
Vous devez êtres dans /home/a20-olimex# | |||
Attention il faut écrire ces blocs dans /dev/sdX et pas sdb1 ou sdb2 | |||
# dd if=u-boot-sunxi/u-boot-sunxi-with-spl.bin of=/dev/sdX bs=1024 seek=8 | |||
6. Écrire kernel uImage sur la carte SD | |||
se placer dans le dossier a20-olimex | |||
cd /home/a20-olimex# | |||
créer un fichier pour monter les partitions de la carte SD | |||
# mkdir /mnt/sd | |||
monter la première partition de la carte SD | |||
# mount /dev/sdX1 /mnt/sd | |||
copier le Kernel uImage dans la première partition | |||
# cp linux-sunxi/arch/arm/boot/uImage /mnt/sd | |||
7. Écrire le fichier script.bin | |||
Le script.bin contient la configuration des paramètres concernant les GPIO assignement, mémoire DRR , écran utilisé … . | |||
7.1 Pour A20-OLinuXino_Lime2 board, télécharger le script.bin suivant | |||
# wget https://github.com/OLIMEX/OLINUXINO/raw/master/SOFTWARE/A20/A20-build/scripts_a20_Lime2_34_90_camera_rel_2/script.bin | |||
7.2 Pour A20-SOM board télécharger le script.bin suivant | |||
# wget https://github.com/OLIMEX/OLINUXINO/raw/master/SOFTWARE/A20/A20-build/A20-SOM-3.4.90_camera_scripts_rel_3/script_a20_SOM_HDMI_720p50/script.bin | |||
7.3 Pour A20-OLinuXino-MICRO board télécharger le script.bin suivant | |||
# wget https://github.com/OLIMEX/OLINUXINO/raw/master/SOFTWARE/A20/A20-build/script_a20_OLinuXino-micro_3.4.90_camera_rel_10/script.bin | |||
7.4 Pour A20-OLinuXino-LIME board télécharger le script.bin suivant | |||
# wget https://github.com/OLIMEX/OLINUXINO/raw/master/SOFTWARE/A20/A20-build/script_a20_lime_3.4.90_camera_rel_3/script.bin | |||
Enfin, copier le script.bin dans la partition monter de la carte | |||
# cp script.bin /mnt/sd | |||
# sync | |||
# umount /dev/sdX1 | |||
8. Debian rootfs | |||
Le noyaux Linux et Uboot sont prêt, maintenant nous allons installer sur la deuxième partition le rootfs. | |||
Il serais possible de le construire mais cela serais trop long (voir multistrap). Nous préférons en prendre un déjà réalisé | |||
nous quittons le repertoire kernel | |||
# cd .. | |||
Vous devriez être dans le dossier a20-olimex | |||
# /home/user/a20-olimex | |||
télécharger le Debian rootfs avec le nom "debian_FS_34_90_camera_A20-olimex.tgz" ,il vous faudra un client torrent (Azureus, uTorrent, qBittorrent,Rtorrent etc). | |||
Apt-get install rtorrent | |||
Le liens du torrent: | |||
https://www.olimex.com/wiki/images/2/29/Debian_FS_34_90_camera_A20-olimex.torrent | |||
monter maintenant la deuxième partition: | |||
# mount /dev/sdX2 /mnt/sd | |||
et décompresser l'archive dans la SD | |||
# tar zxvf debian_FS_34_90_camera_A20-olimex.tgz -C /mnt/sd | |||
# ls /mnt/sd | |||
le résultat devrais ressembler a ceci | |||
bin dev home lost+found mnt proc run selinux sys usr | |||
boot etc lib media opt root sbin srv tmp var | |||
Il faut maintenant remplacer les module kernel par ceux compilé | |||
# rm -rf /mnt/sd/lib/modules/* | |||
# cp -rfv linux-sunxi/out/lib/modules/3.x.xx+/ /mnt/sd/lib/modules/ | |||
dans notre cas: | |||
# cp -rfv linux-sunxi/out/lib/modules/3.4.90+/ /mnt/sd/lib/modules/ | |||
remplacer /lib/firmware folder with the generated /linux-sunxi/out/firmware | |||
#cp -rfv linux-sunxi/out/lib/firmware/ /mnt/sd/lib/ | |||
# sync | |||
# umount /mnt/sdX2 | |||
A ce point vous avez une carte prête a être utilisé . | |||
Login et mot de passe par défaut → root / olimex | |||
-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-'' | |||
Configuration SD | |||
démarrage | |||
Pour le premier démarrage il est intéressant d'utiliser la sortie debug sur UART pour vérifier que le démarrage se passe bien et récupérer quelque informations | |||
branche la carte sur uart pour accéder lors du premier démarrage a la console et activer le mode DHCP pour pouvoir accéder a la carte par ssh (plus simple pour contrôler la carte) | |||
réseaux | |||
Avant d'établir une IP fixe il est utile d'utiliser le DHCP pour intégrer la route vers la Boxe internet | |||
ou attribuer directement la route : | |||
#route add -net 192.168.55.0 netmask 255.255.255.0 gw 192.168.1.254 dev eth0 (exemple a adapter a votre reseaux) | |||
pour afficher l'IP attribuer dans la console | |||
# ifconfig eth0 | |||
et pour modifier les paramètres de l'interface réseaux il faut éditer le fichier interfaces | |||
nano /etc/network/interfaces | |||
ensuite pour redémarrer une interfaces on effectue | |||
ifdown eth0 | |||
ifup eth0 | |||
ou | |||
/etc/init.d/networking restart (celle-ci redémarre toute les interfaces) | |||
FEX | |||
(A venir) | |||
http://linux-sunxi.org/Fex_Guide | |||
choix écran | |||
Olimex fourni un script qui permet de choisir quelle écran utiliser (HDMI, LCD 4,5,11 pouces) dans /root | |||
# cd /root | |||
# ./change_display_olimex_a20.sh | |||
calibration tactile | |||
une fonction est directement intégrer au noyaux et il est possible de l'appeler avec l'instruction suivante | |||
#ts_calibrate | |||
-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-'' | |||
Configuration SD pour Qt5 | |||
Pour exécuter les application Qt5 il faut installer les bon outils ainsi que les librairie qui seront utile a Qt tel que les driver graphique les lib multimédia et les pilotes openGL pour le module Mali (processeur graphique de nos carte) | |||
Installation mali | |||
La configuration par défaut impose que le module mali soit désactiver. Pour le réactiver il faut soit l'appeler : | |||
#modprobe mali | |||
ou pour l'activer au boot éditer le fichier /etc/modules | |||
#nano /etc/modules | |||
et dé-commenter le module en supprimant le « # » devant | |||
Pour qu'un user normal puisse utiliser ce module il faut lui donner la permission avec : | |||
KERNEL"mali", MODE="0660", GROUP="video" | |||
KERNEL"ump", MODE="0660", GROUP="video" | |||
il faut maintenant installer lib-UMP | |||
prérequis | |||
# apt-get install git build-essential autoconf libtool | |||
récupérer le dépôt libUMP | |||
#git clone https://github.com/linux-sunxi/libump.git | |||
#cd libump | |||
build de libump | |||
#apt-get install debhelper dh-autoreconf pkg-config | |||
#dpkg-buildpackage -b | |||
#dpkg -i ../libump_*.deb | |||
#autoreconf -i | |||
#./configure | |||
#make | |||
#make install | |||
Installation Mali | |||
#apt-get install git build-essential autoconf automake | |||
pour installer la version x11, ajouter | |||
#apt-get install xutils-dev | |||
récupéré le dépôt | |||
#git clone —recursive https://github.com/linux-sunxi/sunxi-mali.git | |||
#cd sunxi-mali | |||
Il reste a compiler avec la configuration voulu | |||
# make config (avec auto détection de la configuration) | |||
Pour choisir l'environnement (exemple framebuffer) | |||
#make config VERSION=r3p0 ABI=armhf EGL_TYPE=framebuffer | |||
pour X11 seulement | |||
# apt-get install libx11-dev libxext-dev libdrm-dev | |||
# git clone https://github.com/robclark/libdri2 | |||
# cd libdri2 | |||
# ./autogen.sh | |||
# ./configure | |||
# make | |||
# make install | |||
# ldconfig | |||
Enfin pour terminer l'installation des composant il faut se placer dans le dossier sunxi-mali puis | |||
#make install | |||
pour tester il faut aller dans le dossier sunxi-mali et compiler le test | |||
#make test | |||
# cd test | |||
#./test | |||
Doit afficher un triangle dans une fenêtre sur x11 ou en console . | |||
-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-'' | |||
Configuration Debian 02 (compilation Lib Qt): | |||
installer sshfs | |||
#apt-get install ssh | |||
#apt-get install sshfs | |||
créer un dossier dans /mnt | |||
#mkdir /mnt/a20 | |||
se connecter a la carte cible | |||
#sshfs -o allow_other root@193.253.231.61:/ /mnt/a20 | |||
il vous sera normalement demandé le mot de passe administrateur de la carte cible | |||
vérifier que le lien est bien réaliser en regardant dans /mnt/a20 | |||
Ensuite, il faut téléchargé la chaîne de cross compilation | |||
https://releases.linaro.org/13.09/components/toolchain/binaries | |||
et chercher gcc-linaro-arm-linux-gnueabihf-4.8-2013.09_linux.tar.xz | |||
#wget https://releases.linaro.org/13.09/components/toolchain/binaries/gcc-linaro-arm-linux-gnueabihf-4.8-2013.09_linux.tar.xz | |||
et décompresser le : | |||
#tar xvfJ gcc-linaro-arm-linux-gnueabihf-4.8-2013.09_win32.tar.xz | |||
ensuite il faut récupérer les patch pour le compilateur : | |||
#apt-get install git | |||
#git clone git://gitorious.org/cross-compile-tools/cross-compile-tools.git | |||
#cd cross-compile-tools | |||
—remplacer [chemin compilateur linaro] par le chemin du compilateur Linaro— | |||
#./fixQualifiedLibraryPaths /mnt/a20/ /[chemin du compilateur linaro]/gcc-linaro-arm-linux-gnueabihf-4.8-2013.09_linux/bin/arm-linux-gnueabihf-g''+ | |||
il faut maintenant télécharger Qt_everywhere | |||
http://download.qt.io/archive/qt/5.3/5.3.2/single/ | |||
#wget http://download.qt.io/archive/qt/5.3/5.3.2/single/qt-everywhere-opensource-src-5.3.2.tar.gz | |||
décompresser l'archive : | |||
#tar -zxvf qt-everywhere-opensource-src-5.3.2.tar.gz | |||
entrer dans le dossier qt-everywhere | |||
#cd qt-everywhere-opensource-src-5.3.2 | |||
et effectuer les instruction suivante | |||
#mkdir qtbase/mkspecs/devices/linux-a20olimex-g+''/ | |||
#cp qtbase/mkspecs/devices/linux-beagleboard-g/qplatformdefs.h qtbase/mkspecs/devices/linux-a20olimex-g/ | |||
il va falloir éditer le fichier qmake.conf avec : | |||
#nano qtbase/mkspecs/devices/linux-a20olimex-g/qmake.conf | |||
copier coller la configuration suivante: | |||
/////////////////////////////////////////////////////////////////// | |||
# | |||
# qmake configuration for the A20_OlinuxinO boards | |||
# http://www.olimex.com/ | |||
MAKEFILE_GENERATOR = UNIX | |||
CONFIG''= incremental gdb_dwarf_index | |||
QMAKE_INCREMENTAL_STYLE = sublib | |||
include(../../common/linux.conf) | |||
include(../../common/gcc-base-unix.conf) | |||
include(../../common/g+''-unix.conf) | |||
load(device_config) | |||
QT_QPA_DEFAULT_PLATFORM = eglfs | |||
#EGLFS_PLATFORM_HOOKS_SOURCES = $$PWD/qeglfshooks_a20.cpp | |||
# modifications to g.conf | |||
QMAKE_CC = $${CROSS_COMPILE}gcc | |||
QMAKE_CXX = $${CROSS_COMPILE}g''+ | |||
QMAKE_LINK = $${QMAKE_CXX} | |||
QMAKE_LINK_SHLIB = $${QMAKE_CXX} | |||
# modifications to linux.conf | |||
QMAKE_AR = $${CROSS_COMPILE}ar cqs | |||
QMAKE_OBJCOPY = $${CROSS_COMPILE}objcopy | |||
QMAKE_NM = $${CROSS_COMPILE}nm -P | |||
QMAKE_STRIP = $${CROSS_COMPILE}strip | |||
COMPILER_FLAGS = -march=armv7-a -mtune=cortex-a7 -mfpu=neon -DLINUX=1 -DEGL_API_FB=1 -mfloat-abi=hard | |||
#modifications to gcc-base.conf | |||
QMAKE_CFLAGS ''= $${COMPILER_FLAGS} | |||
QMAKE_CXXFLAGS''= $${COMPILER_FLAGS} | |||
QMAKE_CXXFLAGS_RELEASE ''= -O3 | |||
QMAKE_LIBS''= -lrt -lpthread -ldl | |||
# Extra stuff (OpenGL, DirectFB, …) | |||
QMAKE_INCDIR_EGL = /mnt/a20/usr/include/EGL | |||
QMAKE_LIBDIR_EGL = /mnt/a20/usr/lib | |||
QMAKE_INCDIR_OPENGL_ES2 = /mnt/a20/usr/include/GLES2 | |||
QMAKE_LIBDIR_OPENGL_ES2 = /mnt/a20/usr/lib | |||
#QMAKE_INCDIR_OPENVG = $${QMAKE_INCDIR_EGL} | |||
#QMAKE_LIBDIR_OPENVG = $${QMAKE_LIBDIR_EGL} | |||
QMAKE_LIBS_EGL = -lEGL | |||
QMAKE_LIBS_OPENGL_ES2 = -lGLESv2 $${QMAKE_LIBS_EGL} | |||
#QMAKE_LIBS_OPENVG = -lOpenVG $${QMAKE_LIBS_EGL} | |||
# Sanity check | |||
deviceSanityCheckCompiler() | |||
load(qt_config) | |||
//////////////////////////////////////////////////////////////////////////// | |||
il faut aussi éditer le fichier qeglfshooks_stub.cpp | |||
nano qtbase/src/plugins/platforms/eglfs/qeglfshooks_stub.cpp | |||
chercher createNativeWindow avec | |||
ctrl-w | |||
et modifier la fonction comme suis : | |||
//////////////////////////////////////////////////////////////////////////// | |||
EGLNativeWindowType QEglFSHooks::createNativeWindow(QPlatformWindow *platformWindow, | |||
const QSize &size, | |||
const QSurfaceFormat &format) | |||
{ | |||
Q_UNUSED(platformWindow); | |||
Q_UNUSED(size); | |||
Q_UNUSED(format); | |||
—————————Partie a modifier———————————— | |||
//return 0; | |||
static struct mali_native_window native_window = { | |||
.width = (short unsigned int)size.width(), | |||
.height = (short unsigned int)size.height(), | |||
}; | |||
return &native_window; | |||
———————————————————————————- | |||
} | |||
//////////////////////////////////////////////////////////////////////////// | |||
Nous allons maintenant pouvoir compiler les source Qt | |||
il faut en premier configurer avec : | |||
remarque :remplacer [chemin compilateur linaro] par le chemin du compilateur Linaro— | |||
#./configure -opengl es2 -device linux-a20olimex-g++ -device-option CROSS_COMPILE=/[chemin compilateur linaro]/gcc-linaro-arm-linux-gnueabihf-4.8-2013.09_linux/bin/arm-linux-gnueabihf- -sysroot /mnt/a20/ -opensource -confirm-license -optimized-qmake -release make libs prefix /opt/qt5olim2 -no-pch -nomake examples -nomake tests no-xcb -eglfs -v | |||
attention a bien vérifier le chemin du cross-compilateur et aussi vérifier que la carte cible est toujours monter dans /mnt/a20 avec la commande | |||
#ls /mnt/a20 | |||
vous devriez avoir un config.summary de ce type là a la fin : | |||
//////////////////////////////////////////////////////////////////////////// | |||
Build options: | |||
Configuration ………. accessibility alsa audio-backend c+''11 clock-gettime clock-monotonic compile_examples concurrent cross_compile dbus egl eglfs evdev eventfd fontconfig full-config getaddrinfo getifaddrs glib iconv icu inotify ipv6ifname large-config largefile libudev linuxfb medium-config minimal-config mremap nis no-harfbuzz opengl opengles2 openssl pcre png posix_fallocate qpa qpa reduce_exports reduce_relocations release rpath shared small-config system-freetype system-png system-zlib xinput2 xlib xrender | |||
Build parts ………… libs | |||
Mode ………………. release | |||
Using C''+11 ………… yes | |||
Using PCH ………….. no | |||
Target compiler supports: | |||
iWMMXt/Neon ………. no/auto | |||
Qt modules and options: | |||
Qt D-Bus …………… yes (loading dbus-1 at runtime) | |||
Qt Concurrent ………. yes | |||
Qt GUI …………….. yes | |||
Qt Widgets …………. yes | |||
Large File …………. yes | |||
JavaScriptCore JIT ….. yes (To be decided by JavaScriptCore) | |||
QML debugging ………. yes | |||
Use system proxies ….. no | |||
Support enabled for: | |||
Accessibility ………. yes | |||
ALSA ………………. yes | |||
CUPS ………………. no | |||
FontConfig …………. yes | |||
FreeType …………… yes (system library) | |||
Glib ………………. yes | |||
GTK theme ………….. no | |||
HarfBuzz …………… no | |||
Iconv ……………… yes | |||
ICU ……………….. yes | |||
Image formats: | |||
GIF ……………… yes (plugin, using bundled copy) | |||
JPEG …………….. yes (plugin, using bundled copy) | |||
PNG ……………… yes (in QtGui, using system library) | |||
journald …………… no | |||
mtdev ……………… no | |||
Networking: | |||
getaddrinfo ………. yes | |||
getifaddrs ……….. yes | |||
IPv6 ifname ………. yes | |||
OpenSSL ………….. yes (loading libraries at run-time) | |||
NIS ……………….. yes | |||
OpenGL / OpenVG: | |||
EGL ……………… yes | |||
OpenGL …………… yes (OpenGL ES 2.x) | |||
OpenVG …………… no | |||
PCRE ………………. yes (bundled copy) | |||
pkg-config …………. yes | |||
PulseAudio …………. no | |||
QPA backends: | |||
DirectFB …………. no | |||
EGLFS ……………. yes | |||
KMS ……………… no | |||
LinuxFB ………….. yes | |||
XCB ……………… no | |||
Session management ….. yes | |||
SQL drivers: | |||
DB2 ……………… no | |||
InterBase ………… no | |||
MySQL ……………. no | |||
OCI ……………… no | |||
ODBC …………….. no | |||
PostgreSQL ……….. no | |||
SQLite 2 …………. no | |||
SQLite …………… yes (plugin, using bundled copy) | |||
TDS ……………… no | |||
udev ………………. yes | |||
xkbcommon ………….. no | |||
zlib ………………. yes (system library) | |||
NOTE: Qt is using double for qreal on this system. This is binary incompatible against Qt 5.1. | |||
Configure with '-qreal float' to create a build that is binary compatible with 5.1. | |||
//////////////////////////////////////////////////////////////////////////// | |||
ensuite il faut compiler les lib et les installer avec les commande suivante (étape très longue 2-5 heure) | |||
#make -j 5 (~3H) | |||
#make install (~20Min) | |||
-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-_ | |||
configuration de Qt | |||
Installer Qt | |||
Il est possible d'installer plusieurs version de Qt. | |||
la première méthode installe seulement Qt-Creator, la seconde installe l'environnement Qt avec tout les outils ( documentation, exemple …) | |||
Méthode 1 : | |||
Télécharger et exécuter le lien suivant sur votre environnement de développement | |||
http://download.qt.io/official_releases/qtcreator/3.3/3.3.0/qt-creator-opensource-linux-x86-3.3.0.run | |||
# wget http://download.qt.io/official_releases/qtcreator/3.3/3.3.0/qt-creator-opensource-linux-x86-3.3.0.run | |||
# chmod +x qt-creator-opensource-linux-x86-3.3.0.run | |||
#./qt-creator-opensource-linux-x86-3.3.0.run | |||
Méthode 2 : | |||
Télécharger et exécuter le lien suivant sur votre environnement de développement | |||
http://download.qt.io/official_releases/online_installers/qt-opensource-linux-x86-online.run | |||
# wget http://download.qt.io/official_releases/qtcreator/3.3/3.3.0/qt-opensource-linux-x86-online.run | |||
# chmod ''x qt-opensource-linux-x86-online.run | |||
#./qt-opensource-linux-x86-online.run | |||
Une fois l'IDE installé , il faut configurer le compilateur | |||
<code>Qtcreator | |||
outils → options | |||
appareil mobile → ajouter → périphérique Linux générique | |||
nom : olimex | |||
IP : 192.168.xxx.xxx | |||
authentification | |||
Login de la carte | |||
mdp de la carte | |||
Compiler & Exécuter | |||
Débogueur → ajouter | |||
Nom :gdb-olimex | |||
Chemin:[chemin linaro]/gcc-linaro-arm-linux-gnueabihf-4.8-2013.09_linux/bin/arm-linux-gnueabihf-gdb | |||
Compilateur → ajouter → GCC | |||
Nom : gcc-olimex | |||
chemin du compilateur : [chemin linaro]/gcc-linaro-arm-linux-gnueabihf-4.8-2013.09_linux/bin/arm-linux-gnueabihf-g''+ | |||
Version de | Version de Qt → ajouter → /opt/qt5olim2/bin/qmake (chemin définis dans .config lors de la compilation des source Qt) | ||
Nom de la version : Qt-olimex | |||
Kits → ajouter | Kits → ajouter | ||
Nom : Olimexkit | |||
Type de périphérique : périphérique Linux générique | |||
Appareil mobile : olimex | |||
Racine du système : /mnt/a20 | |||
compilateur : gcc-olimex | |||
Version de Qt : Qt-olimex | |||
a partir de là vous devriez avoir vos projet qui s’exécute automatiquement sur la carte distante si celle-ci a bien était monter dans /mnt/a20 | a partir de là vous devriez avoir vos projet qui s’exécute automatiquement sur la carte distante si celle-ci a bien était monter dans /mnt/a20 | ||
Line 222: | Line 778: | ||
Sources | Sources | ||
https://github.com/OLIMEX/OLINUXINO/tree/master/SOFTWARE/A20/A20-build | https://github.com/OLIMEX/OLINUXINO/tree/master/SOFTWARE/A20/A20-build | ||
http://linux-sunxi.org/ | |||
http://linux-sunxi.org/Fex_Guide | |||
http://linux-sunxi.org/Mali_binary_driver | |||
https://www.olimex.com/forum/index.php?topic=3825.0 | |||
https://www.olimex.com/forum/index.php?topic=3826.0 | |||
http://wiki.qt.io/Building_Qt_5_from_Git | |||
https://www.olimex.com/forum/index.php?topic=2666.0 | |||
http://wickwire2099.blogspot.pt/ |
Latest revision as of 20:32, 16 May 2016
This article may require cleanup to meet the Qt Wiki's quality standards. Reason: Auto-imported from ExpressionEngine. Please improve this article if you can. Remove the {{cleanup}} tag and add this page to Updated pages list after it's clean. |
Install VM Debian Conf debian création SD conf SD conf SD Qt conf debian Qt conf Qt autres
Installation VM
Télécharger virtualbox à l'adresse suivante http://download.virtualbox.org/virtualbox/4.3.20/VirtualBox-4.3.20-96997-Win.exe
et debian (32bits) i382 (amd64) etant la version 64bits http://cdimage.debian.org/debian-cd/7.8.0/i386/iso-cd/debian-7.8.0-i386-netinst.iso
installer virtualbox et créer une Machine virtuelle (VM)
nom : [votre choix] type : Linux Version : Debian (32 bit) quantité mémoire 1024 minimum créer un disque dur virtuel maintenant format : VDI Dynamiquement alloué taille disque dur : 80 go minimum
installation Debian : suivre les indication lors de l'installation Attention a bien faire attention lors de l'attribution du mdp administrateur pour ne pas l'oublier et pour plus de confort bien choisir votre langue pour avoir un clavier correctement mappé .
configuration Debian : Pour résoudre le problème de résolution il faut installer les additions invitées
virtualbox : Périphériques -> Insérer l'image CD des additions invité
démarrer un terminal en administrateur Application-> accessoire → terminal administrateur
ou sur un console normal tapez : su – et le mot de passe administrateur
Nous installons maintenant les paquet utils
#apt-get install linux-headers-`uname -r` build-essential
Se placer dans /media
#cd /media/
Monter le CD des additions invitées
#mount cdrom0
Se placer dans le répertoire du CD
#cd cdrom
Lancer le script
#sh VboxLinuxAddition-XXXX.run
il faut maintenant mettre a jour notre environnement avec les commandes suivante
#apt-get update
#apt-get upgrade
Dans certain cas il y a des problème de clef il faut faire la manipulation suivante
# apt-get install emdebian-archive-keyring
configuration clavier
il faut utiliser l'outil console-data
#apt-get install console-data
pour modifier plus tard le mappage il faut utiliser
#dpkg console-data
Pour les opération de compilation il peut être intéressant de supprimer le mode veille de la VM pour plus de confort
Utilisez les commandes
#xset s 0 0
#xset dpms 0 0 0
-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''-''—''-''-''-''-''-''-''-
Création SD
Processus complet pour créer une carte SD pour carte OLIMEX avec kernel 3.4.90 et Linux Debian
toutes les étapes seront réalisé en console et en mode administrateur
1. Installation de la toolchain
Avant d'installer la ToolChain il faut ajouter un dépôt a ceux existant pour notre VM:
#nano /etc/apt/sources.list
et ajouter à la fin
deb http://www.emdebian.org/debian squeeze main
deb http://www.emdebian.org/debian sid main (Pour la version wheezy de Debian)
puis ctrl-x
et o ou y selon la langue pour enregistrer
Installer la ToolChain avec les commande suivante
# apt-get install gcc-4.7-arm-linux-gnueabihf ncurses-dev uboot-mkimage build-essential git
cela va installer les outils pour : configurer le kernel, compiler le kernel, le uboot et finalement créer une image de ces éléments .
Git permet de télécharger des paquets sur Github
Vous avez maintenant les outils essentiel a la réalisation d'un noyau pour A20
2. construction du UBOOT
Nous allons créer un dossier pour ne pas mélanger les éléments.
# cd /home
# mkdir a20-olimex
# cd a20-olimex
Télécharger les source de uboot sur github
# git clone -b sunxi https://github.com/linux-sunxi/u-boot-sunxi.git
après le téléchargement vous avez un nouveaux répertoire
# cd u-boot-sunxi/
choisir dans les différente commande suivante celle correspondant a la carte A20 visé pour configurer le uboot
Les noms des différent fichier de configuration peuvent être trouvé dans le fichier boards.cfg
2.1 A20-OLinuXino_Lime2 board
# make A20-OLinuXino_Lime2_config ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
2.2 A20-SOM board
Il existe deux type de A20-SOM avec comme principale différence la vitesse du bus pour la mémoire DDR3
A20-SOM rev.B - DDR3 vitesse du bus 384MHz(6 layer PCB)
A20-SOM après rev.D - DDR3 vitesse du bus 480MHz(8 layer PCB)
A20-SOM up to rev.B type
# make Olimex_A20-SOM_config ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
A20-SOM after rev.D il est posible d'utiliser le configuration du Lime2
# make A20-OLinuXino_Lime2_config ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
2.3 A20-OLinuXino-MICRO board
# make A20-OLinuXino_MICRO_config ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
2.4 A20-OLinuXino-LIME board
# make A20-OLinuXino_Lime_config ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
Pour construire le uboot utiliser les commandes suivante
se placer dans /usr/bin
# cd /usr/bin
Modifier le lien vers le compilateur avec la commande suivante
# ln -sf arm-linux-gnueabihf-gcc-4.7 arm-linux-gnueabihf-gcc
ensuite retourner dans le dossier uboot
# cd /home/a20-olimex/u-boot-sunxi/
# make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
A la fin du processus, vous pouvez vérifier si tout s'est bien passé
# ls u-boot.bin u-boot-sunxi-with-spl.bin spl/sunxi-spl.bin
Si le retour correspond a ça :
→ spl/sunxi-spl.bin u-boot.bin u-boot-sunxi-with-spl.bin
tout est OK !
# cd ..
Vous devez vous trouver dans le dossier suivant
/home/a20-olimex#
3. Construction du kernel
Les source du kernel sont disponible sur github
télécharger les avec :
# git clone https://github.com/linux-sunxi/linux-sunxi (étape longue ~ 30 min a 1M/sec)
après le téléchargement allez dans le dossier
# cd linux-sunxi/
Pour ajouter le support SPI il faut
télécharger le fichier spi-sun7i.c
# wget https://raw.githubusercontent.com/OLIMEX/OLINUXINO/master/SOFTWARE/A20/A20-build/spi-sun7i.c
et le copier dans drivers/spi directory
# cp spi-sun7i.c drivers/spi
Télécharger les patch SPI.patch
# wget https://raw.githubusercontent.com/OLIMEX/OLINUXINO/master/SOFTWARE/A20/A20-build/SPI.patch
et appliquer le patch:
# patch -p0 < SPI.patch
Ils faut maintenant récupéré le fichier de configuration pour le kernel a20_olimex_defconfig
# wget https://raw.githubusercontent.com/OLIMEX/OLINUXINO/master/SOFTWARE/A20/A20-build/a20_olimex_defconfig
copier le fichier a20_olimex_defconfig dans le répertoire de configuration:
# cp a20_olimex_defconfig arch/arm/configs/
et make:
# make ARCH=arm a20_olimex_defconfig
le résultat devrait être:
→ configuration written to .config
si vous voulez changer la configuration du kernel :
(Attention a avoir une console en pleine écran pour permettre l'ouverture de l'utilitaire)
# make ARCH=arm menuconfig
Maintenant vous pouvez continuer avec la compilation du kernel
# make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j4 uImage
lorsque c'est fini vous avez un uImage et le message suivant qui confirme le bon déroulement:
Kernel: arch/arm/boot/zImage is ready
UIMAGE arch/arm/boot/uImage
Image Name: Linux-3.4.90+
Created: Tue Aug 19 16:23:22 2014
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 4596072 Bytes = 4488.35 kB = 4.38 MB
Load Address: 40008000
Entry Point: 40008000
Image arch/arm/boot/uImage is ready
la prochaine étape et la construction des module du kernel:
# make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j4 INSTALL_MOD_PATH=out modules
# make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j4 INSTALL_MOD_PATH=out modules_install
A ce point vous disposé de l'uboot et des modules kernel compilé pour votre cible.
Le fichier uImage est dans linux-sunxi/arch/arm/boot/
Les modules kernel sont dans
linux-sunxi/out/lib/modules/3.x.xx
Ou 3.x.xx est la version du kernel. Dans notre cas
linux-sunxi/out/lib/modules/3.4.90+
4. formatage et préparation de la carte SD
il est recommandé d'utiliser une carte SD entre 2 et 16 Go en classe 10 .
Premièrement il faut créer une table de partitions adapter a notre SD avec l'outil fdisk
brancher SD dans un lecteur de carte SD sur la machine hôte .
Il faut activer le périphériques pour la VM dans le option virtualbox
virtualbox → périphériques → périphériques USB
Pour connaître le périphérique reconnus par notre VM il faut tester en branchant et débranchant la carte sd et en regarde le retour de
- ls /dev/sd avec un <TAB> <TAB> pour voir la différence en général le périphérique est le sdb
Lorsque vous connaissez le périphérique vous pouvez commencer les étapes pour le formater
- fdisk /dev/sdX
ensuite
# p
s'il existent des partitions, il faut les supprimer avec la commande suivante. Répété l'opération jusqu'à ce qu'il n'y est plus de partitions d enter
création de la première partition
- n enter p enter 1 enter enter 16M
Création de la seconde partition
- n enter p enter 2 enter enter enter
lister les partition créé
- p enter
Si vous avez correctement réaliser les étapes, vous devriez avoir pour une carte 4Go le message suivant
Disk /dev/sdg: 3980 MB, 3980394496 bytes 123 heads, 62 sectors/track, 1019 cylinders, total 7774208 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x00000000
Device Boot Start End Blocks Id System
/dev/sdg1 2048 34815 16384 83 Linux /dev/sdg2 34816 7774207 3869696 83 Linux
Écrivais les partitions press w
Si cette étape rate il faut démonter la carte SD
- umount /media/[indicatif de la carte]
Refaite un fdisk puis w.
Maintenant nous allons formater le système de fichier de la carte partition 1 → vfat partition 2 → ext3 X etant la lettre correspondant a notre carte.
- mkfs.vfat /dev/sdX1
- mkfs.ext3 /dev/sdX2
5. Écrire le Uboot et u-boot-sunxi-with-spl.bin
Vous devez êtres dans /home/a20-olimex#
Attention il faut écrire ces blocs dans /dev/sdX et pas sdb1 ou sdb2
- dd if=u-boot-sunxi/u-boot-sunxi-with-spl.bin of=/dev/sdX bs=1024 seek=8
6. Écrire kernel uImage sur la carte SD se placer dans le dossier a20-olimex cd /home/a20-olimex#
créer un fichier pour monter les partitions de la carte SD
- mkdir /mnt/sd
monter la première partition de la carte SD
- mount /dev/sdX1 /mnt/sd
copier le Kernel uImage dans la première partition
- cp linux-sunxi/arch/arm/boot/uImage /mnt/sd
7. Écrire le fichier script.bin
Le script.bin contient la configuration des paramètres concernant les GPIO assignement, mémoire DRR , écran utilisé … .
7.1 Pour A20-OLinuXino_Lime2 board, télécharger le script.bin suivant
7.2 Pour A20-SOM board télécharger le script.bin suivant
7.3 Pour A20-OLinuXino-MICRO board télécharger le script.bin suivant
7.4 Pour A20-OLinuXino-LIME board télécharger le script.bin suivant
Enfin, copier le script.bin dans la partition monter de la carte
- cp script.bin /mnt/sd
- sync
- umount /dev/sdX1
8. Debian rootfs
Le noyaux Linux et Uboot sont prêt, maintenant nous allons installer sur la deuxième partition le rootfs. Il serais possible de le construire mais cela serais trop long (voir multistrap). Nous préférons en prendre un déjà réalisé nous quittons le repertoire kernel
- cd ..
Vous devriez être dans le dossier a20-olimex
- /home/user/a20-olimex
télécharger le Debian rootfs avec le nom "debian_FS_34_90_camera_A20-olimex.tgz" ,il vous faudra un client torrent (Azureus, uTorrent, qBittorrent,Rtorrent etc). Apt-get install rtorrent Le liens du torrent: https://www.olimex.com/wiki/images/2/29/Debian_FS_34_90_camera_A20-olimex.torrent
monter maintenant la deuxième partition:
- mount /dev/sdX2 /mnt/sd
et décompresser l'archive dans la SD
- tar zxvf debian_FS_34_90_camera_A20-olimex.tgz -C /mnt/sd
- ls /mnt/sd
le résultat devrais ressembler a ceci bin dev home lost+found mnt proc run selinux sys usr boot etc lib media opt root sbin srv tmp var
Il faut maintenant remplacer les module kernel par ceux compilé
- rm -rf /mnt/sd/lib/modules/*
- cp -rfv linux-sunxi/out/lib/modules/3.x.xx+/ /mnt/sd/lib/modules/
dans notre cas:
- cp -rfv linux-sunxi/out/lib/modules/3.4.90+/ /mnt/sd/lib/modules/
remplacer /lib/firmware folder with the generated /linux-sunxi/out/firmware
- cp -rfv linux-sunxi/out/lib/firmware/ /mnt/sd/lib/
- sync
- umount /mnt/sdX2
A ce point vous avez une carte prête a être utilisé . Login et mot de passe par défaut → root / olimex
------------------------------------------------
Configuration SD
démarrage
Pour le premier démarrage il est intéressant d'utiliser la sortie debug sur UART pour vérifier que le démarrage se passe bien et récupérer quelque informations
branche la carte sur uart pour accéder lors du premier démarrage a la console et activer le mode DHCP pour pouvoir accéder a la carte par ssh (plus simple pour contrôler la carte)
réseaux Avant d'établir une IP fixe il est utile d'utiliser le DHCP pour intégrer la route vers la Boxe internet ou attribuer directement la route :
- route add -net 192.168.55.0 netmask 255.255.255.0 gw 192.168.1.254 dev eth0 (exemple a adapter a votre reseaux)
pour afficher l'IP attribuer dans la console
- ifconfig eth0
et pour modifier les paramètres de l'interface réseaux il faut éditer le fichier interfaces nano /etc/network/interfaces ensuite pour redémarrer une interfaces on effectue ifdown eth0 ifup eth0 ou /etc/init.d/networking restart (celle-ci redémarre toute les interfaces)
FEX (A venir) http://linux-sunxi.org/Fex_Guide
choix écran Olimex fourni un script qui permet de choisir quelle écran utiliser (HDMI, LCD 4,5,11 pouces) dans /root
- cd /root
- ./change_display_olimex_a20.sh
calibration tactile une fonction est directement intégrer au noyaux et il est possible de l'appeler avec l'instruction suivante
- ts_calibrate
------------------------------------------------
Configuration SD pour Qt5
Pour exécuter les application Qt5 il faut installer les bon outils ainsi que les librairie qui seront utile a Qt tel que les driver graphique les lib multimédia et les pilotes openGL pour le module Mali (processeur graphique de nos carte)
Installation mali
La configuration par défaut impose que le module mali soit désactiver. Pour le réactiver il faut soit l'appeler :
- modprobe mali
ou pour l'activer au boot éditer le fichier /etc/modules
- nano /etc/modules
et dé-commenter le module en supprimant le « # » devant
Pour qu'un user normal puisse utiliser ce module il faut lui donner la permission avec :
KERNEL"mali", MODE="0660", GROUP="video" KERNEL"ump", MODE="0660", GROUP="video"
il faut maintenant installer lib-UMP prérequis
- apt-get install git build-essential autoconf libtool
récupérer le dépôt libUMP
- git clone https://github.com/linux-sunxi/libump.git
- cd libump
build de libump
- apt-get install debhelper dh-autoreconf pkg-config
- dpkg-buildpackage -b
- dpkg -i ../libump_*.deb
- autoreconf -i
- ./configure
- make
- make install
Installation Mali
- apt-get install git build-essential autoconf automake
pour installer la version x11, ajouter
- apt-get install xutils-dev
récupéré le dépôt
- git clone —recursive https://github.com/linux-sunxi/sunxi-mali.git
- cd sunxi-mali
Il reste a compiler avec la configuration voulu
- make config (avec auto détection de la configuration)
Pour choisir l'environnement (exemple framebuffer)
- make config VERSION=r3p0 ABI=armhf EGL_TYPE=framebuffer
pour X11 seulement
- apt-get install libx11-dev libxext-dev libdrm-dev
- git clone https://github.com/robclark/libdri2
- cd libdri2
- ./autogen.sh
- ./configure
- make
- make install
- ldconfig
Enfin pour terminer l'installation des composant il faut se placer dans le dossier sunxi-mali puis
- make install
pour tester il faut aller dans le dossier sunxi-mali et compiler le test
- make test
- cd test
- ./test
Doit afficher un triangle dans une fenêtre sur x11 ou en console .
------------------------------------------------
Configuration Debian 02 (compilation Lib Qt):
installer sshfs
- apt-get install ssh
- apt-get install sshfs
créer un dossier dans /mnt
- mkdir /mnt/a20
se connecter a la carte cible
- sshfs -o allow_other root@193.253.231.61:/ /mnt/a20
il vous sera normalement demandé le mot de passe administrateur de la carte cible vérifier que le lien est bien réaliser en regardant dans /mnt/a20
Ensuite, il faut téléchargé la chaîne de cross compilation https://releases.linaro.org/13.09/components/toolchain/binaries et chercher gcc-linaro-arm-linux-gnueabihf-4.8-2013.09_linux.tar.xz
et décompresser le :
- tar xvfJ gcc-linaro-arm-linux-gnueabihf-4.8-2013.09_win32.tar.xz
ensuite il faut récupérer les patch pour le compilateur :
- apt-get install git
- git clone git://gitorious.org/cross-compile-tools/cross-compile-tools.git
- cd cross-compile-tools
—remplacer [chemin compilateur linaro] par le chemin du compilateur Linaro—
- ./fixQualifiedLibraryPaths /mnt/a20/ /[chemin du compilateur linaro]/gcc-linaro-arm-linux-gnueabihf-4.8-2013.09_linux/bin/arm-linux-gnueabihf-g+
il faut maintenant télécharger Qt_everywhere
http://download.qt.io/archive/qt/5.3/5.3.2/single/
décompresser l'archive :
- tar -zxvf qt-everywhere-opensource-src-5.3.2.tar.gz
entrer dans le dossier qt-everywhere
- cd qt-everywhere-opensource-src-5.3.2
et effectuer les instruction suivante
- mkdir qtbase/mkspecs/devices/linux-a20olimex-g+/
- cp qtbase/mkspecs/devices/linux-beagleboard-g/qplatformdefs.h qtbase/mkspecs/devices/linux-a20olimex-g/
il va falloir éditer le fichier qmake.conf avec :
- nano qtbase/mkspecs/devices/linux-a20olimex-g/qmake.conf
copier coller la configuration suivante:
///////////////////////////////////////////////////////////////////
- qmake configuration for the A20_OlinuxinO boards
- http://www.olimex.com/
MAKEFILE_GENERATOR = UNIX CONFIG= incremental gdb_dwarf_index QMAKE_INCREMENTAL_STYLE = sublib
include(../../common/linux.conf) include(../../common/gcc-base-unix.conf) include(../../common/g+-unix.conf)
load(device_config)
QT_QPA_DEFAULT_PLATFORM = eglfs
- EGLFS_PLATFORM_HOOKS_SOURCES = $$PWD/qeglfshooks_a20.cpp
- modifications to g.conf
QMAKE_CC = $${CROSS_COMPILE}gcc QMAKE_CXX = $${CROSS_COMPILE}g+ QMAKE_LINK = $${QMAKE_CXX} QMAKE_LINK_SHLIB = $${QMAKE_CXX}
- modifications to linux.conf
QMAKE_AR = $${CROSS_COMPILE}ar cqs QMAKE_OBJCOPY = $${CROSS_COMPILE}objcopy QMAKE_NM = $${CROSS_COMPILE}nm -P QMAKE_STRIP = $${CROSS_COMPILE}strip
COMPILER_FLAGS = -march=armv7-a -mtune=cortex-a7 -mfpu=neon -DLINUX=1 -DEGL_API_FB=1 -mfloat-abi=hard
- modifications to gcc-base.conf
QMAKE_CFLAGS = $${COMPILER_FLAGS} QMAKE_CXXFLAGS= $${COMPILER_FLAGS} QMAKE_CXXFLAGS_RELEASE = -O3
QMAKE_LIBS= -lrt -lpthread -ldl
- Extra stuff (OpenGL, DirectFB, …)
QMAKE_INCDIR_EGL = /mnt/a20/usr/include/EGL QMAKE_LIBDIR_EGL = /mnt/a20/usr/lib QMAKE_INCDIR_OPENGL_ES2 = /mnt/a20/usr/include/GLES2 QMAKE_LIBDIR_OPENGL_ES2 = /mnt/a20/usr/lib
- QMAKE_INCDIR_OPENVG = $${QMAKE_INCDIR_EGL}
- QMAKE_LIBDIR_OPENVG = $${QMAKE_LIBDIR_EGL}
QMAKE_LIBS_EGL = -lEGL QMAKE_LIBS_OPENGL_ES2 = -lGLESv2 $${QMAKE_LIBS_EGL}
- QMAKE_LIBS_OPENVG = -lOpenVG $${QMAKE_LIBS_EGL}
- Sanity check
deviceSanityCheckCompiler()
load(qt_config)
////////////////////////////////////////////////////////////////////////////
il faut aussi éditer le fichier qeglfshooks_stub.cpp
nano qtbase/src/plugins/platforms/eglfs/qeglfshooks_stub.cpp
chercher createNativeWindow avec ctrl-w et modifier la fonction comme suis :
////////////////////////////////////////////////////////////////////////////
EGLNativeWindowType QEglFSHooks::createNativeWindow(QPlatformWindow *platformWindow,
const QSize &size, const QSurfaceFormat &format)
{
Q_UNUSED(platformWindow); Q_UNUSED(size); Q_UNUSED(format);
—————————Partie a modifier————————————
//return 0; static struct mali_native_window native_window = { .width = (short unsigned int)size.width(), .height = (short unsigned int)size.height(), }; return &native_window;
———————————————————————————- }
////////////////////////////////////////////////////////////////////////////
Nous allons maintenant pouvoir compiler les source Qt
il faut en premier configurer avec : remarque :remplacer [chemin compilateur linaro] par le chemin du compilateur Linaro—
- ./configure -opengl es2 -device linux-a20olimex-g++ -device-option CROSS_COMPILE=/[chemin compilateur linaro]/gcc-linaro-arm-linux-gnueabihf-4.8-2013.09_linux/bin/arm-linux-gnueabihf- -sysroot /mnt/a20/ -opensource -confirm-license -optimized-qmake -release make libs prefix /opt/qt5olim2 -no-pch -nomake examples -nomake tests no-xcb -eglfs -v
attention a bien vérifier le chemin du cross-compilateur et aussi vérifier que la carte cible est toujours monter dans /mnt/a20 avec la commande
- ls /mnt/a20
vous devriez avoir un config.summary de ce type là a la fin :
////////////////////////////////////////////////////////////////////////////
Build options:
Configuration ………. accessibility alsa audio-backend c+11 clock-gettime clock-monotonic compile_examples concurrent cross_compile dbus egl eglfs evdev eventfd fontconfig full-config getaddrinfo getifaddrs glib iconv icu inotify ipv6ifname large-config largefile libudev linuxfb medium-config minimal-config mremap nis no-harfbuzz opengl opengles2 openssl pcre png posix_fallocate qpa qpa reduce_exports reduce_relocations release rpath shared small-config system-freetype system-png system-zlib xinput2 xlib xrender Build parts ………… libs Mode ………………. release Using C+11 ………… yes Using PCH ………….. no Target compiler supports: iWMMXt/Neon ………. no/auto
Qt modules and options:
Qt D-Bus …………… yes (loading dbus-1 at runtime) Qt Concurrent ………. yes Qt GUI …………….. yes Qt Widgets …………. yes Large File …………. yes JavaScriptCore JIT ….. yes (To be decided by JavaScriptCore) QML debugging ………. yes Use system proxies ….. no
Support enabled for:
Accessibility ………. yes ALSA ………………. yes CUPS ………………. no FontConfig …………. yes FreeType …………… yes (system library) Glib ………………. yes GTK theme ………….. no HarfBuzz …………… no Iconv ……………… yes ICU ……………….. yes Image formats: GIF ……………… yes (plugin, using bundled copy) JPEG …………….. yes (plugin, using bundled copy) PNG ……………… yes (in QtGui, using system library) journald …………… no mtdev ……………… no Networking: getaddrinfo ………. yes getifaddrs ……….. yes IPv6 ifname ………. yes OpenSSL ………….. yes (loading libraries at run-time) NIS ……………….. yes OpenGL / OpenVG: EGL ……………… yes OpenGL …………… yes (OpenGL ES 2.x) OpenVG …………… no PCRE ………………. yes (bundled copy) pkg-config …………. yes PulseAudio …………. no QPA backends: DirectFB …………. no EGLFS ……………. yes KMS ……………… no LinuxFB ………….. yes XCB ……………… no Session management ….. yes SQL drivers: DB2 ……………… no InterBase ………… no MySQL ……………. no OCI ……………… no ODBC …………….. no PostgreSQL ……….. no SQLite 2 …………. no SQLite …………… yes (plugin, using bundled copy) TDS ……………… no udev ………………. yes xkbcommon ………….. no zlib ………………. yes (system library)
NOTE: Qt is using double for qreal on this system. This is binary incompatible against Qt 5.1. Configure with '-qreal float' to create a build that is binary compatible with 5.1.
////////////////////////////////////////////////////////////////////////////
ensuite il faut compiler les lib et les installer avec les commande suivante (étape très longue 2-5 heure)
- make -j 5 (~3H)
- make install (~20Min)
------------------------------------------------_
configuration de Qt Installer Qt Il est possible d'installer plusieurs version de Qt. la première méthode installe seulement Qt-Creator, la seconde installe l'environnement Qt avec tout les outils ( documentation, exemple …) Méthode 1 : Télécharger et exécuter le lien suivant sur votre environnement de développement http://download.qt.io/official_releases/qtcreator/3.3/3.3.0/qt-creator-opensource-linux-x86-3.3.0.run
- wget http://download.qt.io/official_releases/qtcreator/3.3/3.3.0/qt-creator-opensource-linux-x86-3.3.0.run
- chmod +x qt-creator-opensource-linux-x86-3.3.0.run
- ./qt-creator-opensource-linux-x86-3.3.0.run
Méthode 2 : Télécharger et exécuter le lien suivant sur votre environnement de développement http://download.qt.io/official_releases/online_installers/qt-opensource-linux-x86-online.run
- wget http://download.qt.io/official_releases/qtcreator/3.3/3.3.0/qt-opensource-linux-x86-online.run
- chmod x qt-opensource-linux-x86-online.run
- ./qt-opensource-linux-x86-online.run
Une fois l'IDE installé , il faut configurer le compilateur
Qtcreator
outils → options
appareil mobile → ajouter → périphérique Linux générique
nom : olimex
IP : 192.168.xxx.xxx
authentification
Login de la carte
mdp de la carte
Compiler & Exécuter
Débogueur → ajouter
Nom :gdb-olimex
Chemin:[chemin linaro]/gcc-linaro-arm-linux-gnueabihf-4.8-2013.09_linux/bin/arm-linux-gnueabihf-gdb
Compilateur → ajouter → GCC
Nom : gcc-olimex
chemin du compilateur : [chemin linaro]/gcc-linaro-arm-linux-gnueabihf-4.8-2013.09_linux/bin/arm-linux-gnueabihf-g+
Version de Qt → ajouter → /opt/qt5olim2/bin/qmake (chemin définis dans .config lors de la compilation des source Qt)
Nom de la version : Qt-olimex
Kits → ajouter
Nom : Olimexkit
Type de périphérique : périphérique Linux générique
Appareil mobile : olimex
Racine du système : /mnt/a20
compilateur : gcc-olimex
Version de Qt : Qt-olimex
a partir de là vous devriez avoir vos projet qui s’exécute automatiquement sur la carte distante si celle-ci a bien était monter dans /mnt/a20
Sources
https://github.com/OLIMEX/OLINUXINO/tree/master/SOFTWARE/A20/A20-build
http://linux-sunxi.org/
http://linux-sunxi.org/Fex_Guide
http://linux-sunxi.org/Mali_binary_driver
https://www.olimex.com/forum/index.php?topic=3825.0
https://www.olimex.com/forum/index.php?topic=3826.0
http://wiki.qt.io/Building_Qt_5_from_Git
https://www.olimex.com/forum/index.php?topic=2666.0
http://wickwire2099.blogspot.pt/