Melhor maneira de entrar na programação do Kernel?

8

Não tanto perguntando quais livros (embora se você conhece algum guia / tutorial que seria útil), mas qual é a melhor maneira de começar a fazer a programação do kernel e existe uma distribuição específica que seria melhor para aprender?

Estou mais interessado na parte de Drivers de Dispositivo, mas quero aprender como o Kernel está configurado também (Módulos e tal) Tenho cerca de 4-5 anos de experiência com C / C ++, mas é principalmente conhecimento da faculdade (então não é como 4-5 anos de experiência de trabalho, se você sabe o que quero dizer)

    
por Jeff Schaller 10.05.2011 / 15:15

4 respostas

11

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.

    
por 10.05.2011 / 16:31
8

Existem muitos núcleos na existência.

Linux não é o único jogo disponível, mas é o mais usado. Algumas pessoas recomendam que o kernel minix entenda os conceitos do sistema operacional. Eu iria com o Linux 2.6.x series, pois é o mais comum e não será desperdiçado em algo (quase) ninguém usa. Solaris, XNU (Mac), FreeBSD e Dragonfly são notáveis. 1

Encontre algo super simples (porta serial, usb etc.) e faça outra coisa. Para um desafio extra, tente escrever um módulo do kernel para algo que ainda não tenha um. (Certifique-se de procurar no Google o suspeito por pci sudo lspci -nn e / ou usb id sudo lsusb first.)

Atualização: Não faça isso diretamente no seu sistema principal, use máquinas virtuais (VM) (computador em um computador) como mencionado. VirtualBox pode fornecer isso e é grátis. Além disso, não quero que pareça esmagadora, mas experimente os instantâneos da VM, para que você possa voltar no caso de algo quebrar a própria VM.

Atualização 2 : A nota sobre o Git (DVCSes inc. Mercurial, fóssil, bazar, darcs) é uma boa idéia, principalmente para código e arquivos pequenos e importantes. Tente não usar o Git para fazer backup de músicas, vídeos e tal, a menos que você saiba as implicações. ;)

    
por 10.05.2011 / 15:32
6

Encontre um módulo ou driver que você deseja modificar ou inicie com um módulo de tipo nulo / hello world e construa a partir dele. Especificamente trabalhe com um módulo porque ele permitirá que você carregue, descarregue, recompile e recarregue o código em um kernel em execução. Mais tarde, você pode entrar nos bits de núcleo, mas basicamente os módulos têm todos os tipos e você pode fazer praticamente o que quiser.

Em segundo lugar, use uma VM. Configure uma máquina guest no VirtualBox ou em alguma outra VM e faça seus testes de kernel lá por um tempo. Dessa forma, você não vai matar o seu sistema principal quando você quebrar algo, e reiniciar, retroceder para um instantâneo de trabalho, etc. é muito fácil.

Em terceiro lugar, aprenda git .

    
por 10.05.2011 / 15:22
1

Alguém já menciona o livro "Linux Device Drivers" - este é um excelente recurso, e eu recomendo também.

Embora a questão mencione o autor não está pedindo especificamente livros, a mais nova edição do livro "Compreendendo o Kernel Linux" ( link ) é inestimável para aprender sobre o kernel do Linux em geral, e também contém uma seção sobre drivers de dispositivos Linux.

    
por 10.05.2011 / 19:48