La meilleure façon d'entrer dans la programmation du noyau?

8

Pas tellement demander quels livres (même si vous connaissez des guides / tutoriels qui pourraient être utiles) mais quelle est la meilleure façon de commencer à faire de la programmation du noyau et y a-t-il une distribution particulière qui serait la meilleure pour apprendre?

Je suis principalement intéressé par la partie Pilotes de périphériques, mais je veux également savoir comment le noyau est configuré (modules et autres) .J'ai environ 4 à 5 ans d'expérience avec C / C ++, mais ce sont principalement des connaissances du Collège (c'est donc pas comme 4-5 ans d'expérience de travail, si vous voyez ce que je veux dire)

Jeff Schaller
la source
4
Pour commencer, il est orthographié noyau avec un e.
Caleb
J'ai remarqué que lorsque je mettais les étiquettes lol.
4
La prochaine fois, prenez le temps de le réparer. C'est un bon moyen de respecter la communauté ici qui prend le temps de vous aider. De plus, si vous voulez coder pour le noyau, vous devrez être rigoureux sur des détails comme ça!
Caleb
@Caleb, fera l'affaire!
Merci d'avoir posé cette question, je me suis toujours demandé
Mike Pennington

Réponses:

11

D'abord:

Pour les stades bébé, l'écriture de diverses variations sur les modules "hello world" et les pilotes de matériel virtuels est la meilleure façon de commencer (le vrai matériel présente les problèmes du monde réel mieux affrontés lorsque vous avez plus d'idée de ce que vous faites).

"Linux Device Drivers" est un excellent livre et vaut bien le coup de commencer avec: http://lwn.net/Kernel/LDD3/

LDD (utilisé, au moins) a des exercices où vous avez écrit des pilotes virtuels, par exemple des disques RAM et des périphériques réseau virtuels.

Deuxièmement:

abonnez-vous à https://lkml.org/ ou à la liste de diffusion d'un sous-système dans lequel vous allez pirater. Rôdez un peu, parcourez les discussions, lisez la révision du code (réponses aux correctifs) pour voir quel genre de choses les gens trébucher ou reprendre.

Voyez si vous pouvez obtenir du matériel (bon marché) pour un appareil qui n'est pas encore pris en charge, ou pas encore bien pris en charge. Les bons candidats sont des cartes réseau USB bon marché ou des périphériques USB similaires à faible coût. Quelque chose avec un pilote obsolète ou hors de l'arborescence, peut-être écrit par le fournisseur, peut-être pour 2.4.x, est idéal, car vous pouvez commencer avec quelque chose qui fonctionne (en quelque sorte), et l'adapter / réécrire progressivement , tester au fur et à mesure. Ma première tentative de pilote était pour une carte réseau USB Davicom DM9601. Il y avait un pilote de noyau écrit par le vendeur de la série 2.4 que j'ai lentement adapté à 2.6. (Remarque: le pilote dans la ligne principale n'est pas mon pilote, à la fin quelqu'un d'autre en a écrit un à partir de zéro).

Un autre bon moyen est de consulter le site Kernel Newbies, en particulier les "kernel janitors" todo: http://kernelnewbies.org/KernelJanitors/Todo Il s'agit d'une liste de tâches qu'un débutant devrait être capable de réaliser.

jmtd
la source
4
Bonne réponse pour Linux, il manque une seule ressource: LXR pour parcourir la source du noyau.
Gilles 'SO- arrête d'être méchant'
8

Il existe de nombreux noyaux.

Linuxn'est pas le seul jeu sur le marché, mais c'est le plus utilisé. Certaines personnes recommandent au minixnoyau de comprendre les concepts du système d'exploitation. J'irais avec la série Linux 2.6.x car c'est la plus courante et elle ne sera pas gaspillée pour quelque chose (presque) que personne n'utilise. Solaris, XNU (Mac), FreeBSD et Dragonfly sont remarquables. 1

Trouvez quelque chose de super simple (port série, usb, etc.) et faites-le faire autre chose. Pour un défi supplémentaire, essayez d'écrire un module de noyau pour quelque chose qui n'en a pas encore. (Assurez-vous d'abord de rechercher sur Google le suspect par pci sudo lspci -nnet / ou identifiant USB sudo lsusb.)

Mise à jour: ne faites pas cela directement sur votre système principal, utilisez des machines virtuelles (VM) (ordinateur dans un ordinateur) comme mentionné. VirtualBox peut fournir cela et c'est gratuit. En outre, je ne veux pas que cela semble écrasant, mais essayez les instantanés de machine virtuelle afin de pouvoir revenir en arrière au cas où quelque chose casse la machine virtuelle elle-même.

Mise à jour 2 : La note sur Git (DVCSes inc. Mercurial, fossile, bazaar, darcs) est une bonne idée, principalement pour le code et les petits fichiers importants. Essayez de ne pas utiliser Git pour sauvegarder de la musique, des vidéos et autres, sauf si vous en connaissez les implications. ;)

dhchdhd
la source
6

Recherchez un module ou un pilote que vous souhaitez modifier ou démarrez avec un type de module null / hello world et créez à partir de là. Travailler spécifiquement avec un module car il vous permettra de charger, décharger, recompiler et recharger le code dans un noyau en cours d'exécution. Plus tard, vous pouvez entrer dans les bits de base, mais fondamentalement, les modules en ont toutes sortes et vous pouvez faire à peu près tout ce que vous voulez.

Deuxièmement, utilisez une machine virtuelle. Configurez une machine invitée sous VirtualBox ou certaines sur VM et faites vos tests de noyau là-dedans pendant un certain temps. De cette façon, vous ne tuerez pas votre système principal lorsque vous casserez quelque chose, et redémarrer, revenir en arrière vers un instantané de travail, etc. est vraiment facile.

Troisièmement, apprenez git.

Caleb
la source
1

Quelqu'un mentionne déjà le livre "Linux Device Drivers" - c'est une excellente ressource, et je le recommande également fortement.

Bien que la question mentionne que l'expéditeur ne demande pas spécifiquement de livres, la dernière édition du livre "Understanding the Linux Kernel" ( http://oreilly.com/catalog/9780596005658/ ) est inestimable pour en savoir plus sur le noyau Linux en général et contient également une section sur les pilotes de périphériques Linux.

CORPORATEWAGESLAVE
la source