¿Cómo empezar a escribir controladores?


21

Tengo una laptop barata y desechable que me gustaría jugar, una Thinkpad SL 500.

Lo que me molesta son dos leds, uno para conectividad inalámbrica y otro para hibernación, que no se encienden en absoluto, aunque son funcionales, lo he probado en Windows.

Así que me gustaría escribir un controlador de kernel para ellos, nada grande, solo parece una buena idea jugar con el kernel.

Mi pregunta es qué metodología debería seguir sistemáticamente para averiguar qué dispositivos son responsables de esos leds (en general, no necesariamente específicos de mi hardware), y qué controladores son responsables de los otros dos leds que funcionan, bluetooth y el indicador de batería.

Y cuando digo metodología, realmente me refiero a la metodología, paso a paso, con razones para cada paso, como en la respuesta que le he dado a alguien más aquí: ¿Qué significa && en vacío * p = && abc;

Soy eficiente en la recopilación de grandes repositorios de código, utilizando analizadores de código estático & co, pero creo que mi falta de conocimiento del hardware me dificulta este problema.

PD: Estoy usando ArchLinux, por lo que casi la última versión del kernel.


¿Has intentado habilitar CONFIG_IDEAPAD_LAPTOP en el kernel?
Paweł Rumian

@ gorkypl: no, ¿por qué lo haría? La pregunta no se trata de resolver el problema, se trata de la estrategia utilizada para resolver el problema yo mismo (como programador).
Flavio el

3
OK, te he entendido mal. De todos modos, como el módulo de kernel IDEAPAD_LAPTOP es responsable de tales cosas en la serie SL de Thinkpads, puede comenzar mirando su código fuente. Además, puede interesarle alguna lectura, por ejemplo, en kernelnewbies: kernelnewbies.org/KernelHacking o un gran libro escrito por LKH : kroah.com/lkn Otras dos buenas fuentes que se me ocurren son: lwn.net/Kernel/ LDD3 y amazon.com/dp/0596005652/?tag=stackoverfl08-20
Paweł Rumian

Respuestas:


5

¿Qué metodología debo seguir sistemáticamente para averiguar qué dispositivos son responsables de esos LED?

Idealmente, debe encontrar la fuente (abierta) del sistema operativo del kernel en el que funcionan los LED de su computadora portátil, luego puede comentar parte por parte del kernel hasta que encuentre el código que es responsable de los LED (y tener algunos bloqueos del sistema haciendo eso, Pero esa es la parte divertida).

Si los LED no funcionan en Linux y no sabe qué hardware los controla en otros sistemas operativos, ¿cómo cree que escribirá un controlador?

Me temo que esa es la mejor respuesta que cualquiera podría dar, y eso te hace (casi) nada más inteligente que antes. Simplemente le indica que necesita saber exactamente qué hardware tiene para poder hacer algo más.

Para ser de más ayuda, dos punteros:

  1. Uno de los chips IDE o SATA de uso frecuente es la serie ICHX o ICHXr de Intel (ICH5, ICH6, ICH7 ... o ICH6R, ICH7R, ...).

  2. Directorio del kernel de Linux donde se encuentra el código fuente para controlar muchos LED

También le daría el tercer puntero, pero como este gorkypy ya escribió anteriormente, solo puedo repetir: controladores de dispositivos Linux, tercera edición , en PDF, de forma gratuita.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.