36 votes

Apprendre le kernel hacking et le développement embarqué à la maison ?

J'ai toujours été attiré par le monde du kernel hacking et des systèmes embarqués.
Quelqu'un a-t-il de bons tutoriels (+ du matériel facilement disponible) pour commencer à s'occuper de ce genre de choses ?
Quelque chose comme des kits pour écrire des pilotes, etc., qui sont accompagnés d'une bonne documentation et sont abordables ?

Merci !

33voto

VolkA Points 10297

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.

5voto

Andrew Edgecombe Points 13183

Un absolu doit est ce livre de Rubini. (disponible en version papier ou en version électronique gratuite)

Il donne des implémentations de plusieurs pilotes fictifs qui ne nécessitent pas que vous ayez d'autre matériel que votre ordinateur. Pour commencer à développer un noyau, c'est le moyen le plus simple.

Pour ce qui est du travail embarqué, je vous recommanderais d'acheter l'un des nombreux SBC (single board computers) qui existent. Il y en a un certain nombre qui sont basés sur des processeurs x86, généralement avec des interfaces PC/104 (électriquement, le PC/104 est identique au bus ISA standard, mais il est basé sur des connecteurs empilables plutôt que sur des connecteurs de bord - très facile à interfacer avec du matériel personnalisé).

Ils ont généralement des connecteurs vga qui facilitent le débogage.

3voto

Readonly Points 48598

Pour le piratage de Linux embarqué, le simple routeur Linksys WRT54G que l'on peut acheter partout est une plateforme de développement à lui seul. http://en.wikipedia.org/wiki/Linksys_WRT54G_series :

Le WRT54G est remarquable pour être le premier périphérique réseau grand public dont le code source du micrologiciel a été publié pour satisfaire aux obligations de la licence GNU GPL. Cela permet aux programmeurs de modifier le micrologiciel pour changer ou ajouter des fonctionnalités à l'appareil. Plusieurs projets de micrologiciels tiers fournissent au public des micrologiciels améliorés pour le WRT54G.

J'ai essayé d'installer OpenWrt et DD-WRT firmware dessus. Vous pouvez les consulter comme point de départ pour le piratage sur une plate-forme à faible coût.

3voto

terminus Points 3966

Pour commencer, le meilleur moyen est de lire beaucoup de code. Comme Linux est un logiciel libre, vous trouverez des dizaines de pilotes. Trouvez-en un qui fonctionne d'une certaine manière comme ce que vous voulez écrire. Vous trouverez du code décent et relativement facile à comprendre (le périphérique de bouclage, ROM fs, etc.).

Vous pouvez également utiliser le lxr.linux.no qui est le code de Linux avec des références croisées. Si vous devez trouver comment quelque chose fonctionne et que vous avez besoin de consulter le code, c'est un moyen simple et efficace.

Il y a aussi un livre O'Reilly (Understanding the Linux Kernel, la 3ème édition concerne les noyaux 2.6) ou si vous voulez quelque chose de gratuit, vous pouvez utiliser le livre Advanced Linux Programing ( http://www.advancedlinuxprogramming.com/ ). Il existe également beaucoup de documentation spécifique sur les systèmes de fichiers, les réseaux, etc.

1voto

DGentry Points 10759

Il faut se préparer à certaines choses :

  • vous ferez de la compilation croisée. Le dispositif embarqué utilisera un processeur MIPS, PowerPC ou ARM, mais n'aura pas assez de puissance CPU, de mémoire ou de stockage pour compiler son propre noyau dans un délai raisonnable.
  • Un système embarqué utilise souvent un port série comme console, et pour réduire le coût, il n'y a généralement pas de connecteur soudé sur les cartes de production. Déboguer les paniques du noyau est très difficile, à moins de pouvoir souder un connecteur de port série, vous n'aurez pas beaucoup d'informations sur ce qui a mal tourné.

Le site Linksys NSLU2 est un moyen peu coûteux d'obtenir un véritable système embarqué avec lequel travailler, et il dispose d'un port USB pour ajouter des périphériques. N'importe lequel des nombreux points d'accès sans fil peut également être utilisé, voir la page Page de compatibilité d'OpenWrt. Sachez que les modèles actuels du Linksys WRT54G que vous trouverez dans le commerce ne peuvent plus être utilisés avec Linux : ils ont moins de RAM et de Flash afin de réduire le coût. Cisco/Linksys utilise maintenant vxWorks sur le WRT54G, avec une empreinte mémoire plus petite.

Si vous voulez vraiment vous lancer, les kits d'évaluation pour les processeurs embarqués commencent à quelques centaines de dollars US. Je vous recommande de ne pas dépenser d'argent pour ces kits, sauf si vous en avez besoin professionnellement pour un travail ou un contrat de conseil.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X