Primeiramente:
Para os estágios do bebê, escrever várias variações nos módulos "hello world" e drivers de hardware virtual é a melhor maneira de começar (o hardware real apresenta problemas reais melhor enfrentados quando você tem mais uma ideia do que está fazendo) .
"Drivers de dispositivos Linux" é um livro excelente e vale a pena começar com: link
LDD (usado para, pelo menos) ter exercícios em que você escreveu drivers virtuais, por exemplo, Discos RAM e dispositivos de rede virtual.
Em segundo lugar:
inscreva-se no link ou na lista de discussão de um sub-sistema em que você estará invadindo. Lurk um pouco, fazendo a varredura de tópicos, leitura de revisão de código (respostas a patches) para ver que tipo de coisas as pessoas tropeçam ou captam.
Veja se você pode obter hardware (barato) para um dispositivo que ainda não é compatível ou que ainda não é bem suportado. Bons candidatos são NICs USB baratas ou periféricos USB de baixo custo similares. Algo com um driver desatualizado ou fora da árvore, talvez escrito por um fornecedor, talvez para 2.4.x, é ideal, já que você pode começar com algo que funciona (classificar) e gradualmente adaptá-lo / reescrevê-lo. isso, testando como você vai. Minha primeira tentativa de motorista foi por uma placa de rede USB DM9601 da Davicom. Havia um driver de kernel escrito por um fornecedor de 2,4-séries que eu lentamente adaptei para o 2.6. (Nota: o driver na linha principal é não meu driver, no final alguém escreveu um a partir do zero).
Outra boa maneira é olhar para o site Kernel Newbies, especificamente o "kernel janitors" todo: link Este é um lista de tarefas que um iniciante deve ser capaz de resolver.