Tag Archives: avr

Premiers pas en développement noyau

Je voulais me mettre au développement noyau, mais je ne savais pas par où commencer, alors un sage m’a dit: « pour apprendre rien de tel que de le faire: vous achetez un petit périphérique USB et vous en écrivez le driver. »
Ma réponse a été: « effectivement, je n’y avais pas pensé, en général on utilise la libusb pour ce genre de choses. »

Un périphérique USB

Et voila que quelques jours après, sans avoir trouvé de périphérique sympa je me suis dit, mais pourquoi pas le faire aussi ?
Comme je vous l’ai déjà raconté, j’ai déjà bricolé un périphérique USB: l’USBtinyISP, donc je suis allé rechercher le code original de usbtiny et je me suis monté un petit prototype avec 4 LED et 2 boutons:

Photo de mon prototype

Bon plutôt que d’utiliser un ATtiny, j’ai pris un ATmega8 histoire d’avoir un peu de place pour y ajouter du code plus tard ;-) (l’ATtiny2313 est déjà super plein pour l’USBtinyISP).

Et voila le schéma (en image, les sources gschem sont sous git dans le répertoire sch):

Le schéma

Une fois le montage prêt, quelques lignes de code basées sur l’exemple de tinyusb et hop un firmware pour l’ATmega (à la racine du projet).

Qu’il a fallut tester, hop la première méthode évoquée plus haut, quelques lignes de code avec libusb, disponible dans le répertoire test, m’ont permis de parfaire le firmware ;-)

Voila, tout marche, on va pouvoir entrer dans le vif du sujet.

Le gestionnaire de périphérique Linux

En fait j’ai tout simplement suivi et adapté les tutoriels suivants:

En regardant la version de usbled.c présente dans les sources de Linux afin de mettre à jour les derniers détails.

Cela donne un driver qui ajoute les pseudo-fichiers leds et keys dans le répertoire du périphérique déjà créé dans /sys/bus/usb/ par le noyau Linux.

Voila ! Vous je sais pas mais moi j’ai appris plein de choses ! ;-)

Tout le code est disponible sous GPL2 et GPL2+ sur mon gitweb: jvdg_usbgadget.git

Pour le nom un peu égocentrique, c’était surtout pour éviter tout risque de conflit, comme de toutes façons ceci n’a pas vocation à être intégré dans Linux (le périphérique utilise un ID USB réservé aux prototypes, donc inutilisable en grande série…)

ça fait un bail…

Bon, en fait je lis plus que je n’écris depuis que j’ai syndiqué Planet Debian dans mon aggrégateur de flux, gregarious.

J’ai aussi fait quelques changement sur le thème, mis a jours wordpress sans gros soucis. Merci à wordpress et debian.

Pour finir, ce blog est sous titré « electronics » et je n’ai jamais parlé d’électronique jusqu’ici. En revanche j’ai pratiqué. ;)

J’ai cherché des soft pour tracé des schéma et garder un trace de mon travail, dans un premier temps pour moi, puis pour les publier sur ce blog quand il seront prèt.
Un projet qui m’a semblé intéressant: Fritzing mais il semble trop instable, Je ne veux pas dire qu’il plante mais que le format de fichier n’est pas figé. Ce qui signifie que des projets enregistré avec la version d’aujourd’hui ne s’ouvriront peut être plus avec la version de demain.

Donc je me suis tourné vers les outils du gEDA project. À commencer par gschem pour tracer les schéma électronique puis je me suis mis à PCB pour préparer mes cartes.
Je ne fait pas de vrai PCBs, je préfère utiliser des cartes à prototype et y souder pleins de petits fils, mais utiliser PCD avec une grille à 100mil (1mil c’est 1/1000 de pouces soit 0,0254mm) facilite grandement le placement des composants.

J’ai commencer à bricoler avec des micro-contrôleurs AVR de Atmel en utilisant avr-gcc et avr-libc. J’ai commencer par me faire un programmateur d’avrpar usb, l’USBtinyISP. Je publierais les fichiers gschem et PCB un des ces quatres. (ou plus vite si vous me le demandez).

J’allais oublié, J’ai retrouvé un vieux liens sur le Chip Directory. C’est une collection de ficher decrivant le brochage de beaucoup de vieux circuits tels les séries TTL 74xx et les séries MOS 40xx.