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)
kernel
drivers
kernel-modules
Jeff Schaller
la source
la source
Réponses:
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.
la source
Il existe de nombreux noyaux.
Linux
n'est pas le seul jeu sur le marché, mais c'est le plus utilisé. Certaines personnes recommandent auminix
noyau 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. 1Trouvez 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 -nn
et / ou identifiant USBsudo 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. ;)
la source
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
.la source
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.
la source