Si vous êtes complètement nouveau dans le développement de noyaux, je vous suggère de ne pas commencer par le développement matériel et d'aller vers des modules de noyaux "uniquement logiciels" comme proc file / sysfs ou pour des exemples plus complexes le développement de systèmes de fichiers / réseaux, en développant sur une machine uml/vmware/virtualbox/... pour que le crash de votre machine ne soit pas trop douloureux :) Pour le développement embarqué, vous pouvez opter pour un petit kit de développement ARM ou une petite machine Via C3/C4, ou n'importe quel vieux PC que vous pouvez graver avec votre périphérique USB / PCI / n'importe quoi.
Un bon endroit pour commencer est probablement Kernelnewbies.org - qui contient de nombreux liens et des informations utiles pour les développeurs de noyaux, et propose également une liste de tâches faciles à mettre en œuvre pour les débutants.
Des livres à lire :
Comprendre le noyau Linux - Une très bonne référence détaillant la conception des sous-systèmes du noyau.
Pilotes de périphériques Linux - est écrit plus comme un tutoriel avec beaucoup d'exemples de code, se concentrant sur la mise en route et expliquant les aspects clés du noyau linux. Il présente le processus de construction et les bases des modules du noyau.
Guide de programmation du module du noyau Linux - Quelques éléments d'introduction supplémentaires
Comme suggéré précédemment, regarder le code linux est toujours une bonne idée, d'autant plus que les API du noyau Linux ont tendance à changer assez souvent ... LXR est d'une grande aide avec une interface de navigation très agréable. lxr.linux.no
Pour comprendre le processus de construction du noyau, ce lien peut être utile :
Makefiles du noyau Linux (kbuild)
Enfin, parcourez le répertoire Documentation de la distribution Kernel Source !
Voici quelques exercices intéressants volés avec insolence à un cours de développement de noyaux :
- Ecrivez un module noyau qui crée le fichier /proc/jiffies rapportant l'heure actuelle en jiffies à chaque accès en lecture.
- Ecrivez un module noyau fournissant le fichier proc /proc/sleep. Lorsqu'une application écrit un nombre de secondes sous forme de texte ASCII dans ce fichier ("echo 3 > /proc/sleep"), elle doit bloquer pendant le nombre de secondes spécifié. Les accès en écriture ne doivent pas avoir d'effet secondaire sur le contenu du fichier, c'est-à-dire que lors des accès en lecture, le fichier doit apparaître vide (voir LDD3, ch. 6/7).
- Écrivez un fichier proc où vous pouvez stocker temporairement du texte (en utilisant echo "blah" > /proc/pipe) et le ressortir (cat /proc/pipe), en effaçant le fichier. Faites attention aux problèmes de synchronisation.
- Modifier le module d'exemple pipe pour s'enregistrer en tant que périphérique de caractères /dev/pipe, ajouter l'allocation dynamique de mémoire pour les requêtes d'écriture.
- Écrire un système de fichiers très simple.