Linux
, paru dans
la Gazette Linux
numéro 154 de septembre 2008
Adaptation française: Renaud Flavigny
Relecture de la version française: Deny
Copyright © 2008 Sujith H.
Copyright © 2008 Renaud Flavigny
Copyright © 2008 Deny
Résumé
Tout ceci a commencé avec un article de Slashdot qui décrivait les possibilités étonnantes de CHDK (Canon Hacking Development Kit). Cet article ralluma la flamme de mon ambition d'acheter un appareil photo et d'explorer pleinement son potentiel. Je me suis décidé pour un Canon A720IS qui supporte CHDK. Dans cet article, je voudrais vous faire partager le travail fait pour compiler CHDK sous GNU/Linux
, l'installer et examiner ses capacités de script.
Table des matières
J'ai téléchargé les derniers sources de CHDK depuis son référentiel SVN dans un répertoire chdk
de mon répertoire personnel :
cd chdk svn co https://tools.assembla.com/svn/chdk/trunk
Puisque CHDK s'exécute sur une plate-forme différente de celle où il est compilé, nous avons besoin d'un compilateur croisé. Pour cela, j'ai téléchargé binutils (version 2.17) et le compilateur GCC (version 3.4.6) ; j'ai ensuite créé un répertoire nommé arm-elf
et un répertoire nommé chdk_cross_compiler
dans mon répertoire personnel, j'ai ensuite désarchivé binutils et GCC dans ce dernier.
Compiler binutils nécessite les étapes suivantes :
cd ~/chdk_cross_compiler/binutils-2.17
./configure --srcdir=../binutils-2.17 --target=arm-elf --prefix=${HOME}/arm-elf
make
make install
Ensuite, j'ai ajouté ~/arm-elf/bin
à mon chemin d'accès (PATH)
export PATH=${HOME}/arm-elf/bin:${PATH}
Maintenant, compilons GCC
cd ~/chdk_cross_compiler/gcc-3.4.6
Ensuite, j'applique une retouche correctif depuis chdk
, qui se situe dans ~/chdk/trunk/tools/patches/gcc-3.4-arm.diff
patch -p0 < ~/chdk/trunk/tools/patches/gcc-3.4-arm.diff
À présent, je crée un répertoire nommé gcc-3.4.6-arm-elf
dans ~/chdk_cross_compiler
et je construis GCC de sorte qu'il compile pour le processeur ARM en tant que cible par défaut:
cd /home/sujith/chdk_cross_compiler/gcc-3.4.6-arm-elf ../gcc-3.4.6/configure --srcdir=../gcc-3.4.6 --target=arm-elf \ --enable-multilib --enable-languages=c --enable-clocale=gnu \ --disable-libm --disable-libc --disable-threads \ --disable-nls --disable-libssp --disable-intl --disable-libiberty \ --with-cpu=arm9 --with-newlib --prefix=${HOME}/arm-elf unset LIBRARY_PATH unset CFLAGS make make install
Maintenant que le compilateur croisé est prêt, il est temps de compiler CHDK
cd ~/chdk/trunk
Puisque mon appareil photo est un Canon A720IS, j'ai décommenté les deux lignes du fichier makefile.inc
PLATFORM=a720 PLATFORMSUB=100c
et je le compile avec
make fir
Cela crée un fichier DISKBOOT.BIN
dans mon répertoire ~/chdk/trunk/bin
, que j'ai dû copier sur la carte mémoire de l'appareil photo. Pour cela j'ai dû formater la carte SD en FAT-16 avec la commande suivante :
mkdosfs -F 16
L'étape finale consiste à rendre la carte bootable en modifiant la partition FAT. J'ai fait cela avec hexedit (assurez-vous que la carte SD n'est pas montée avant d'exécuter la commande). Avant de faire ça, cependant, nous devons trouver quel périphérique était monté en utilisant la commande mount ; pour moi, c'était /dev/sda1
umount /dev/sda1 hexedit /dev/sda1
Dans hexedit, je suis passé en mode ASCII et j'ai écrit BOOTDISK
à l'offset 0x40 ; ensuite j'ai remonté la carte et j'ai copié le fichier DISKBOOT.BIN
dans le réperoire racine de la carte SD ; j'ai verrouillé la carte en écriture (il y a un petit bouton de verrouillage sur la carte elle-même) et j'ai inséré la carte dans l'appareil photo. L'appareil photo a démarré sur le CHDK et a affiché un message montrant le niveau de micro-programme de CHDK. J'étais maintenant l'heureux propriétaire d'un appareil photo motorisé par CHDK. Je trouve intéressant, toutefois, que, bien que la carte soit verrouillée en écriture, les photos sont toujours écrites dessus.
Maintenant, allumer l'appareil photo en mode alternatif et presser le bouton CHDK : Jouer à un jeu, Charger un fichier, Image Raw, Histogrammes, etc.
(mon appareil photo a un bouton , ça peut être différent pour d'autres modèles) affiche les options deIl y a un petit interpréteur avec CHDK appelé UBasic. Commençons avec un script « Bonjour tout le monde ». Les noms de fichier doivent avoir une extension .bas
(par exemple file1.bas
)
@title Hello World print "Hello World"
Ici @title
fait référence au titre du programme, s'il n'est pas fourni, le nom de fichier sera créé par CHDK. Copiez le programme dans le répertoire chdk/scripts
sur la carte SD et chargez-le. Sur mon appareil photo, je dois presser le déclencheur pour exécuter le script. Vous pouvez voir la sortie sur l'écran :
Pour faire clignoter le voyant DEL orange de mon appareil photo, j'ai écrit le code suivant :
for n=1 to 5 print "Led blink ",n gosub "ledblink" next n :ledblink set_led 7 1 60 sleep 1000 set_led 7 0 set_led 8 1 60 sleep 1000 set_led 8 0 return
gosub
est utilisé pour aller à une sous-routine ; ici la sous-routine est ledlink
. set_led
est l'instruction qui permet d'allumer et d'éteindre la DEL, 7
est l'argument pour la DEL orange. De la même façon, 8
désigne la DEL bleue.
La DEL bleue est allumée :
Pour prendre des photos à un intervalle moyen de 5 secondes, j'ai écrit ce petit bout de code :
for n=1 to 6 sleep 5000 print "shoot ",n, "of ",6 shoot next n
Pour mettre l'appareil photo en mode 'raw', utilisez l'instruction set_raw
. Le code peut être utilisé pour mettre la caméra en mode 'raw' puis prendre une photo.
set_raw 1 sleep 1000 shoot sleep 1000 set_raw 0
Vous pouvez vérifier la tension de la batterie avec le code suivant ; la tension est exprimée en millivolts.
for n=1 to 10 a=get_vbatt print "The V is ",a/1000, "V" print "The V is ",a, "mV" sleep 9000 a=0 next n
Voici quelques unes des bidouilles que j'ai faites en utilisant GNU/Linux
et mon appareil photo Canon. Si vous êtes prêt à faire des expériences avec votre appareil photo compatible avec CHDK, allez-y, c'est le moment. Un avertissement amical : ces bidouilles ne sont pas pour les cardiaques !
Le Wiki CHDK m'a été trés utile lors de mes bidouilles et pour l'écriture de cet article. Vous pourrez le consulter ici
Sujith H. : J'ai rejoint la communauté du logiciel libre il y a cinq ans et j'ai toujours apprécié la liberté apportée par les logiciels libres. Je remercie mon gourou M. pradmode C.E. de m'avoir présenté dans la communauté du logiciel libre. J'ai terminé mon B. Tech au Government Engineering College Palakkad (Kerala, India). Je travaille chez ElinaNetworks Ltd., Bangalore comme ingénieur R&D. Mon blog est à http://sujith-h.livejournal.com. Mes centres d'intérêts comprennent Python et le C.
L'adaptation française de ce document a été réalisée dans le cadre du Projet de traduction de la Gazette Linux.
Vous pourrez lire d'autres articles traduits et en apprendre plus sur ce projet en visitant notre site : http://www.traduc.org/Gazette_Linux.
Si vous souhaitez apporter votre contribution, n'hésitez pas à nous rejoindre, nous serons heureux de vous accueillir.