Mar 312013
 

Voilà que je resort mon arduino de mes cartons, motivé à dépoussierer le code de ma 'boite musicale'. Et quel ne fut pas ma surprise quand le package rxtx refusa de s'installer suite a des erreurs de compilation.

Vous commencez peut-etre a me connaitre ; je n'ai pas abandonné pour si peu. Voilà donc que je me retrouve a publier ce petit billet, acompagné des instructions pour patcher et installer la derniere version de rxtx sous votre systéme :)

Avec une traduction anglaise aproximative, pour que nos amis non-francophone ne soient pas en reste.

Step 1 : Arduino package

Install the aur arduino package using the well known and loved binnary : yaourt.
Installez le package arduino en utilisant la commande yaourt :

yaourt -S arduino

Step 2 : Download, patch and install rxtx

Download the pre-release zip from http://rxtx.qbang.org/wiki/index.php/Download :
Telechargez la pre-release depuis http://rxtx.qbang.org/wiki/index.php/Download :

wget http://rxtx.qbang.org/pub/rxtx/rxtx-2.2pre2.zip
unzip rxtx-2.2pre2.xip
cd rxtx-2.2pre2

Launch configure with the --disable-lockfile option :
Lancez configure avec l'option --disable-lockfile :

./configure --disable-lockfile

Here, if you try to compile, you'll probably have a "UTS_RELEASE" undefined error. To correct that, first locate the file utsrelease.h(find /usr/ -name 'utsrelease.h'). In my case, he is in "/lib/modules/3.8.4-1-ARCH/build/include/generated/". Then, include this file to config.h (It's a file generated by configure.) , so that that constant will be defined everywhere.
Ici, si vous tentez de compiler, vous aurez probablement une erreur "UTS_RELEASE" est indéfinit. Pour coriger ce problème, commencez par trouver le fichier utsrelease.h (find /usr/ -name 'utsrelease.h'). Pour ma part, il se trouvait dans "/lib/modules/3.8.4-1-ARCH/build/include/generated/". Ensuite, incluez le dans config.h(C'est un fichier généré par configure), de facon à ce que la constant soit définie partout.

echo "\n#include \"/lib/modules/3.8.4-1-ARCH/build/include/generated/utsrelease.h\"\n" >> config.h

Now, we have to add the ttyACMx devices to the list of checked devices. We just need to modify the file src/gnu/io/RXTXCommDriver.java, and add an entry into an array (ttyACM). See the diff file here :
Maintenant, on doit ajouter ttyACM à la liste des périphériques. On modifit le fichier src/gnu/io/RXTXCommDriver.java en ajoutant une entrée à un tableau (ttyACM). Regardez le fichier diff suivant :

--- src/gnu/io/RXTXCommDriver.java.back 2013-03-31 14:14:38.718567087 +0200
+++ src/gnu/io/RXTXCommDriver.java      2013-03-31 14:08:38.728149384 +0200
@@ -577,6 +577,7 @@
                                                "ttyS", // linux Serial Ports
                                                "ttySA", // for the IPAQs
                                                "ttyUSB", // for USB frobs
+                                               "ttyACM",// linux CDC ACM devices
                                                "rfcomm",       // bluetooth serial device
                                                "ttyircomm", // linux IrCommdevices (IrDA serial emu)
                                                };

The line marked with a plus is the one added.
La ligne marqué d'un plus est celle ajoutée.

Then, compile and install!
Maintenant, compilez et installez!

make && sudo make install

Use your arduino

You can now launch the arduino IDE (command arduino) and upload a test sketch (like blink). You can select your arduino uno wich will probably show as "ttyACM0" in the device list.
Vous pouvez maintenant lancer l'IDE arduino (commande arduino) et charger un programme de test. Vous pouvez selectionner votre carte dans la liste des periphérique, probablement sous le nom "ttyACM0".

Quelques infos

On désactive l'option --diseable-lockfile pour faire disparaitre des messages d'erreur parlant d'impossibilité d'écrire les fichiers de lock. On ajouter le bon fichier .h contenant UTS_RELEASE pour eviter de stupide erreur de compilation (le fichier dans le quel est définit la macro a chang'e récamment). Enfin, il est necessaire de modifier le code de rxtx (lisez les commentaires, vous verez qu'on vous demande explicitement de rajouter les devices manquant, en vous proposant la liste de tous ceux possible, et elle est bien longue!) pour que vous puissiez utiliser ttyACMx. Une autre solution serait d'ajouter un lien symbolique dans /dev/ d'un ttyUSBx vers un ttyACMx, par exemple (ttyUSB figure dans le tableau o`u nous avons ajouter ttyACM).

Bref, en fin de compte, si vous ne parvenez pas à utiliser votre arduino et que vous avez une erreur du type "processing.app.SerialNotFoundException: Port série « /dev/ttyACM0 » non trouvé", c'est peut-etre tout simplement que ttyACM ne figure pas dans les périphériques accepté par rxtx.

Références :
- http://arduino.cc/en/Guide/troubleshooting#toc1 rubrique Drivers / Linux.
- https://wiki.archlinux.org/index.php/Arduino

Feb 252010
 

Publication officiel

Voila, fait maintenant 1 moi que nous vous le préparions, cuisiné aux petits oignions : La parution officiel de "Introduction à VFS sous Linux 2.6.30" (Ou ILVFS pour les intimes).

Plus qu'une simple parution sur ce blog, l'article est aussi disponible sur developpez.com, sous une forme plus colorée et peut-être plus agréable à lire.
Le document "Black&White" bien-sur toujours disponible pour les fans.

Je vous invite donc à vous rendre de ce pas consulter l'article et, si vous vous en sentez le courage, donner votre avis sur le forum.

Sur ce, bonne soirée.

Nb: Les plus curieux aurons déjà pu lire le document depuis une petite semaine, et l'avant gout qui était auparavant disponible dans un précédant billet.

Dec 282009
 

Bonsoir,

Vous vous demandez peut-être pourquoi plus un seul article n'a fleuris sur ce blog le long de ce dernier moi? Et bien, c'est tout simplement que j'ai commencer la rédaction d'un long - très long.... trop long! - document relatif au fonctionnement de la couche VFS de linux. Actuellement, je suis bien loin d'avoir rédiger la moitier de ce document, cherchant a illustrer mes dires de schéma et de code, à vérifier l'exactitude des informations que j'ai pus recueillir, la simple introduction que constituent les chapitres 1 et 2 m'ont prit énormément de temps. J'espère que toute fois ils vous paraitrons aussi claire qu'ils le sont pour moi, et que les multiples illustrations vous seront utile pour mieux visualiser les mécanismes mis en jeux.

Mais qu'est ce que VFS?

Peut-être que certains d'entre vous ont manquer mon engouement récent à l'écriture d'un file-système et les articles relatifs, aussi je me dois au moins d'expliquer succinctement ce dont il est ici question.

VFS, pour Virtual File System(Système de fichier Virtuel) est une couche d'abstraction fournis par le kernel linux affin de développer aisément des drivers qui ont a manipuler des fichier. C'est en fait très dépendant de l'architecture "tout fichier" de linux. Via vfs, il est en effet possible avec un simple éditeur de texte de modifier des données stoker sur un disque, mais aussi de modifier la configuration du processeur (il est ici question du fameux file-système /proc, qui ne correspond a aucun fichier physique, et que l'on qualifie donc de virtuel).

Ce document présente donc les bases de VFS nécessaire au développement d'un driver de filesystème, qu'il soit virtuel ou bien associer a un driver de block.

Les chapitres 1 et 2

En fait, les seuls chapitre présent sont une introduction à ce qu'est VFS et quelques détailles sur des mécanismes qui ne sont pas directement lier a son utilisation. Ainsi, le cœur du problème (manipulation des ad-spaces, structures de pointeurs de fonctions, impémentation de lookup et readdir, etc...) n'y figure pas. Ne soyez donc pas trop exigent de ces premiers chapitre et soyez sur que le contenue deviendras plus technique et ciblé dans les chapitres suivant.

Sur ce,

Je vous laisse le lien vers ces premiers chapitres : vfs_01.pdf

Nov 082009
 

Bonsoir,

Cela fait maintenant plus d'un mois que je dissimule a la plupart d'entre vous, lecteur, le projet sur le quel je concentre toute mon attention depuis septembre.

Ce projet, est un projet plain de rebond, et je crains avoir a plusieurs reprise sous estimer le travaille nécessaire. Je suis toute fois heureux de vous annoncer que je suis en possession d'une implémentation qui, bien qu'instable, s'avère déjà partiellement fonctionnelle.

Je travaille actuellement sur un FileSystem et son implémentation dans le kernel Linux. Plus qu'un system de fichier, SFS seras avant tout un exemple claire et concis de filesystem, une sorte de journal de bord d'un voyageur qui tenta de traverser la jungle des filesystem et qui du affronter les plantes carnivores mangeuses d'inodes, les dangereux marais aux mémoires mouvantes, les lianes empoisonnés des dentries... bref, un périple qui pourrais presque donner lieux à une nouvelle.

Mais commençons par l'origine, le point de départ de ce projet, qui bien que n'aillant jusque la jamais été rédiger, est rester a chaque instant dans mon esprit :

Qu'est ce que SFS?

Simple File System : Simple système de fichier.

SFS se veut une implémentation d'un système de fichier élémentaire, baser sur une logique simple, une approche simpliste dans le but de réduire un maximum la complexité de l'implémentation pour une meilleur compréhension des couches d'abstraction du kernel linux.

Ainsi, il est de mon devoir, avant de publier une quelconque implémentation, d'établir les Specs de ce filesystem.

Le SuperBlock

Mais il y a tellement a dire, tellement de détaille indispensable a la bonne compréhension d'un filesystem. Tellement que je ne peux tout ecrire en une soirée. Alors, je vous propose le premiers chapitre des Specs de SFS : Le SuperBlock. C'est très certainement le plus court de tous les chapitres, étant donner que - selon moi - le superblock est au filesystem ce qu'est le préface à un roman.

Voici donc la première révision des specs de SFS : SFS.pdf

Je suis ouvert a tout commentaire :)