Ambiente de hackers do kernel

22

Eu tenho trabalhado em sistemas operacionais embarcados como uCOS, ThreadX. Embora tenha codificado aplicativos no Linux, agora pretendo começar a aprender o Linux Kernel. Eu tenho algumas perguntas sobre o meio ambiente.

  1. Qual é a melhor distribuição, que possui ferramentas fáceis de usar para o desenvolvimento do kernel? (até agora eu tinha usado o RHEL e o Fedora. Embora eu esteja confortável com isso, também parece que o Ubuntu possui scripts embutidos para facilitar a compilação do kernel make_kpkg, etc.)

  2. Você pode descrever a melhor configuração para depuração do kernel? Ao depurar outros sistemas operacionais incorporados, usei a porta serial para despejar o progresso, o JTAG etc. Que tipo de configuração os desenvolvedores do kernel Linux usam? (Meu PC de teste com porta serial é suficiente para minhas necessidades? Se sim, como configurar o kernel para despejar na porta serial?) Estou planejando redirecionar as mensagens do kernel para o console serial que será lido no meu laptop.

  3. Qual ferramenta é melhor para depuração e rastreamento de código do kernel? Como mencionado anteriormente, o console serial é o único caminho? Ou existe algum tipo de interface IDE / JTAG para PC?

rajaganesh87
fonte
3
Para o número 1, o próprio Linus usa o Fedora, o que possivelmente diz algo. Não sei o suficiente sobre esse assunto para realmente responder, mas estaria interessado no que as outras pessoas dizem.
21811 jonescb
1
make_kpkg vem do Debian, no qual o Ubuntu se baseia e minha fav distro;)
Deleted Account

Respostas:

14

Meu gosto pessoal pelo desenvolvimento do Linux Kernel é o Debian. Agora, para seus pontos:

  1. Como você provavelmente adivinhou, o Ubuntu não traz nada de novo ao kernel para facilitar o desenvolvimento, além do que já está disponível no Debian. Por exemplo, make_kpkg é um recurso do Debian e não o Ubuntu. Aqui estão alguns links para você iniciar as tarefas comuns de desenvolvimento do Linux Kernel no Debian:

  2. A maneira mais fácil de depurar o kernel é usando QEMU e GDB. Alguns links para você começar:

    No entanto, você deve estar ciente de que esse método não é viável para certos cenários, como depuração de problemas de hardware específicos e outros, para os quais seria melhor usar a depuração serial física e o hardware real. Para isso, você pode usar o KGDB (funciona também com Ethernet). O KDB também é uma boa escolha. Ah, e a propósito, o KGDB e o KDB foram mesclados no Linux Kernel. Mais sobre esses dois aqui . Outro método interessante, que funciona maravilhosamente para problemas não relacionados ao hardware, é usar o Kernel Linux no modo de usuário . A execução do Kernel no modo de usuário como qualquer outro processo permite depurá-lo como qualquer outro programa ( exemplos ). Mais sobre Linux no modo de usuárioaqui . A UML faz parte do Kernel do Linux desde a 2.6.0, portanto, você pode criar qualquer versão oficial do kernel acima dessa no modo UML, seguindo estas etapas .

  3. Veja o item 2. Infelizmente, não existe o melhor método final aqui, pois cada ferramenta / método tem seus prós e contras.

Shinnok
fonte
Obrigado! para a resposta detalhada. Entre, estou interessado nos subsistemas fs e bio no kernel. que tipo de configuração seria melhor para mim?
rajaganesh87
UML e QEMU provavelmente são o caminho a percorrer, pois você pode facilmente jogar com sistemas de arquivos sem nenhum custo.
Shinnok
Links muito bons, apenas uma coisa. O meu favorito também é o debian, mas o Kernel Development pode ser feito com qualquer distribuição. Talvez o slack seja a melhor maneira, se você é purista, pois usa um kernel de baunilha, mas configurações não são coisas ruins, você encontrará o seu melhor.
D4RIO
Foram encontrados mais alguns links úteis: [Link 1] ( ibm.com/developerworks/linux/tutorials/l-kernelhack1/index.html ) [Link 2] ( ibm.com/developerworks/linux/tutorials/l-kernelhack2/index. html )
rajaganesh87
6

Se você estiver desenvolvendo para uma plataforma incorporada que não seja baseada no hardware i386, precisará compilar de forma cruzada. O projeto Emdebian fornece cadeias de ferramentas para o desenvolvimento de muitas arquiteturas (ARM, m68k, MIPS e mais) em PCs (i386 ou amd64). Isso significa que, no Debian, você pode simplesmente adicionar os repositórios e o apt-get instalar o conjunto de ferramentas para o (s) alvo (s) de sua escolha.

Gilles 'SO- parar de ser mau'
fonte
3

As sondas JTAG existem, mas são bastante caras (e as empresas que as construíram têm contratos exclusivos). A melhor maneira de depurar o código do kernel é iniciá-lo no kvm ou qemu com o gdbserver dentro da emulação.

Simon Richter
fonte
Melhor ainda, use o Linux no modo de usuário. Linux como um processo regular de usuário.
vonbrand
0

Essencialmente, qualquer distribuição de linha principal deve funcionar bem para isso (eles usam sua própria distribuição para hackear). Use o que parecer mais confortável.

vonbrand
fonte