Comment commencer à écrire des pilotes?

21

J'ai un ordinateur portable bon marché jetable que j'aimerais faire tourner, un Thinkpad SL 500.

Ce qui me dérange, ce sont deux leds, l'une pour la connectivité sans fil et celle pour l'hibernation, qui ne s'allument pas du tout, bien qu'elles soient fonctionnelles, je l'ai essayé sur Windows.

Je voudrais donc écrire un pilote de noyau pour eux, rien de grand, cela ressemble à une bonne idée de jouer avec le noyau.

Ma question est quelle méthodologie dois-je suivre systématiquement pour savoir quels appareils sont responsables de ces voyants (en général, pas nécessairement spécifiques à mon matériel), et quels pilotes sont responsables des deux autres voyants qui fonctionnent, Bluetooth et l'indicateur de batterie?

Et quand je dis méthodologie, je veux vraiment dire la méthodologie, étape par étape, avec les raisons de chaque étape, comme dans la réponse que j'ai donnée à quelqu'un d'autre ici: Que signifie && dans void * p = && abc;

Je suis compétent pour fgrepping à travers de grands référentiels de code, en utilisant des analyseurs de code statiques & co, mais je pense que mon manque de connaissances matérielles me gêne sur ce problème.

PS: J'utilise ArchLinux, donc presque la dernière version du noyau.

Flavius
la source
Avez-vous essayé d'activer CONFIG_IDEAPAD_LAPTOP dans le noyau?
Paweł Rumian
@gorkypl: non, pourquoi le ferais-je? La question n'est pas de résoudre le problème, c'est la stratégie utilisée pour résoudre le problème moi-même (en tant que programmeur).
Flavius
3
OK, je vous ai mal compris. Quoi qu'il en soit, comme le module de noyau IDEAPAD_LAPTOP est responsable de ces choses dans la série SL de Thinkpads, vous pouvez commencer par regarder son code source. En outre, vous pouvez être intéressé par une lecture, par exemple sur kernelnewbies: kernelnewbies.org/KernelHacking ou un excellent livre écrit par LKH: kroah.com/lkn Deux autres bonnes sources qui me viennent à l'esprit sont: lwn.net/Kernel/ LDD3 et amazon.com/dp/0596005652/?tag=stackoverfl08-20
Paweł Rumian

Réponses:

5

Quelle méthodologie dois-je suivre systématiquement pour savoir quels appareils sont responsables de ces voyants?

Idéalement, vous devriez trouver une source (ouverte) du système d'exploitation du noyau sur lequel fonctionnent les voyants de votre ordinateur portable, puis vous pouvez simplement commenter partie par partie du noyau jusqu'à ce que vous localisiez le code responsable des voyants (et que le système se bloque quelques fois, mais c'est la partie amusante).

Si les LED ne fonctionnent pas sous Linux et que vous ne savez pas quel matériel les pilote sur d'autres systèmes d'exploitation, comment pensez-vous que vous écrirez un pilote?

C'est la meilleure réponse que quiconque puisse donner, je le crains, et cela ne vous rend (presque) rien de plus intelligent qu'avant. Vous indique simplement que vous devez savoir exactement de quel matériel vous disposez, pour pouvoir faire quelque chose de plus.

Pour être plus utile, deux conseils:

  1. L'une des puces IDE ou SATA souvent utilisées est la série Intel ICHX ou ICHXr (ICH5, ICH6, ICH7 ... ou ICH6R, ICH7R, ...).

  2. Répertoire du noyau Linux où se trouve le code source pour contrôler beaucoup de LED

Je vous donnerais également un 3e pointeur, mais comme cette gorkypy l'a déjà écrit ci-dessus, je peux simplement répéter: pilotes de périphériques Linux, 3e édition , en PDF, gratuitement.

stemd
la source