Não é muita pergunta sobre quais livros (embora você saiba de 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 aprender?
Estou interessado principalmente na parte dos drivers de dispositivo, mas quero aprender como o Kernel também está configurado (Módulos e similares). Tenho cerca de 4-5 anos de experiência com C / C ++, mas principalmente conhecimento da faculdade (por isso é não gosta de 4-5 anos de experiência profissional, se você entende o que eu quero dizer)
kernel
drivers
kernel-modules
Jeff Schaller
fonte
fonte
Respostas:
Primeiramente:
Para os estágios iniciais, escrever várias variações nos módulos "olá mundo" e nos drivers de hardware virtual é a melhor maneira de começar (o hardware real apresenta os problemas do mundo real mais bem enfrentados quando você tem mais idéia do que está fazendo).
"Linux Device Drivers" é um excelente livro e vale a pena começar com: http://lwn.net/Kernel/LDD3/
O LDD (costumava, pelo menos) ter exercícios nos quais você gravou drivers virtuais, por exemplo, discos RAM e dispositivos de rede virtual.
Em segundo lugar:
inscreva-se em https://lkml.org/ ou na lista de e-mails de um subsistema em que você estará invadindo. Espreite um pouco, examinando tópicos, lendo a revisão de código (respostas a patches) para ver que tipo de coisas as pessoas tropeçar ou pegar.
Veja se você pode obter hardware (barato) para um dispositivo que ainda não é suportado ou ainda não é suportado. Bons candidatos são NICs USB baratas ou periféricos USB de baixo custo semelhantes. Algo com um driver desatualizado ou fora da árvore, talvez escrito por fornecedor, talvez para 2.4.x, é ideal, pois você pode começar com algo que funcione (mais ou menos) e adaptá-lo / reescrever gradualmente testando à medida que avança. Minha primeira tentativa de driver foi para uma placa de rede Davicom DM9601 USB. Havia um driver do kernel gravado pelo fornecedor da série 2.4 que eu adaptei lentamente para o 2.6. (Nota: o motorista na linha principal não é o meu motorista, no final, alguém escreveu outro a partir do zero).
Outra boa maneira é consultar o site Kernel Newbies, especificamente o todo "kernel janitors": http://kernelnewbies.org/KernelJanitors/Todo Esta é uma lista de tarefas que um iniciante deve ser capaz de enfrentar.
fonte
Existem muitos núcleos existentes.
Linux
não é o único jogo por aí, mas é o mais usado. Algumas pessoas recomendam ominix
kernel para entender os conceitos de sistema operacional. Eu iria com a série Linux 2.6.x, pois é a mais comum e não será desperdiçada em algo (quase) que ninguém usa. O Solaris, XNU (Mac), FreeBSD e Dragonfly são notáveis. 1Encontre algo super simples (porta serial, usb, etc.) e faça-o fazer outra coisa. Para um desafio extra, tente escrever um módulo do kernel para algo que ainda não o tenha. (Certifique-se de procurar o suspeito no Google por pci
sudo lspci -nn
e / ou id USBsudo lsusb
primeiro.)Atualização: não faça isso diretamente no sistema principal, use máquinas virtuais (VM) (computador em um computador) conforme mencionado. O VirtualBox pode fornecer isso e é grátis. Além disso, não quero que isso pareça impressionante, mas tente os instantâneos da VM para poder voltar caso algo quebre a própria VM.
Atualização 2 : A observação sobre o Git (DVCSes, incluindo mercurial, fóssil, bazar, dars) é 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 outros, a menos que conheça as implicações. ;)
fonte
Encontre um módulo ou driver que você deseja modificar ou comece com um tipo de módulo nulo / olá mundo e construa a partir daí. Trabalhe especificamente com um módulo, pois permitirá carregar, descarregar, recompilar e recarregar o código em um kernel em execução. Mais tarde, você pode entrar nos bits principais, mas basicamente os módulos têm todos os tipos e você pode fazer praticamente o que quiser.
Segundo, use uma VM. Configure uma máquina convidada no VirtualBox ou outra na VM e faça o teste do kernel por um tempo. Dessa forma, você não matará o sistema principal quando quebrar alguma coisa, e reiniciar, voltar para um instantâneo funcional etc. é realmente fácil.
Terceiro, aprenda
git
.fonte
Alguém já menciona o livro "Linux Device Drivers" - este é um excelente recurso, e eu também o recomendo.
Embora a pergunta mencione que o autor não está solicitando livros especificamente, a edição mais recente do livro "Entendendo o Kernel do Linux" ( http://oreilly.com/catalog/9780596005658/ ) é inestimável para aprender sobre o kernel do Linux em geral e também contém uma seção sobre drivers de dispositivo Linux.
fonte