Como começar a escrever drivers?

21

Eu tenho um laptop barato descartável que eu gostaria de mexer, um Thinkpad SL 500.

O que me incomoda são dois leds, um para conectividade sem fio e outro para hibernação, que não acendem, apesar de funcionais, eu tentei no Windows.

Então, eu gostaria de escrever um driver de kernel para eles, nada grande, apenas parece uma boa idéia brincar com o kernel.

Minha pergunta é: qual metodologia devo seguir sistematicamente para descobrir quais dispositivos são responsáveis ​​por esses leds (em geral, não necessariamente específicos para o meu hardware) e quais drivers são responsáveis ​​pelos outros dois leds que funcionam, bluetooth e o indicador de bateria?

E quando digo metodologia, eu realmente quero dizer a metodologia, passo a passo, com razões para cada passo, como na resposta que dei a alguém aqui: O que && significa em vazio * p = && abc;

Sou proficiente em fazer o fgrepping através de grandes repositórios de código, usando analisadores de código estático & co, mas acho que minha falta de conhecimento de hardware me atrapalha nesse problema.

PS: Estou usando o ArchLinux, quase a última versão do kernel.

Flavius
fonte
Você já tentou ativar o CONFIG_IDEAPAD_LAPTOP no kernel?
Paweł Rumian
@gorkypl: não, por que eu faria? A questão não é resolver o problema, é sobre a estratégia usada para resolver o problema sozinho (como programador).
Flavius
3
OK, eu te entendi mal. De qualquer forma, como o módulo do kernel IDEAPAD_LAPTOP é responsável por essas coisas na série SL de Thinkpads, você pode começar observando seu código-fonte. Além disso, você pode estar interessado em algumas leituras, por exemplo, no kernelnewbies: kernelnewbies.org/KernelHacking ou em um ótimo livro escrito por LKH: kroah.com/lkn Duas outras boas fontes que me vêm à mente são: lwn.net/Kernel/ LDD3 e amazon.com/dp/0596005652/?tag=stackoverfl08-20
Paweł Rumian

Respostas:

5

Que metodologia devo seguir sistematicamente para descobrir quais dispositivos são responsáveis ​​por esses LEDs?

Idealmente, você deve encontrar a fonte (aberta) do sistema operacional do kernel no qual os LEDs do laptop estão funcionando; basta comentar parte por parte do kernel até localizar o código responsável pelos LEDs (e com alguns congelamentos do sistema, mas essa é a parte divertida).

Se os LEDs não estão funcionando no Linux e você não sabe qual hardware os está dirigindo em outros sistemas operacionais, como você acha que escreverá um driver?

Receio que seja a melhor resposta que alguém possa dar, e isso torna você (quase) nada mais inteligente do que antes. Apenas aponta que você precisa descobrir exatamente qual hardware possui, para poder fazer algo mais.

Para ajudar mais, dois ponteiros:

  1. Um dos chips IDE ou SATA frequentemente usados ​​é a série ICHX ou ICHXr da Intel (ICH5, ICH6, ICH7 ... ou ICH6R, ICH7R, ...).

  2. Diretório de kernel do Linux, onde está localizado o código-fonte para controlar muitos LEDs

Eu daria a você o terceiro ponteiro também, mas como esse gorkypy já escreveu acima, posso repetir: drivers de dispositivo Linux, 3ª edição , em PDF, de graça.

stemd
fonte