Ambiente de Kernel Hacking

22

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

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

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

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

por rajaganesh87 16.03.2011 / 09:31

4 respostas

15

Meu sabor pessoal para o desenvolvimento do kernel Linux é o Debian. Agora, para seus pontos:

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

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

    No entanto, você deve estar ciente de que esse método não é viável para determinados cenários, como depuração de problemas de hardware específicos e outros, para os quais seria melhor usar depuração serial física e hardware real. Para isso você pode usar o KGDB (ele também funciona com o ethernet). O KDB também é uma boa escolha. Ah, e a propósito, tanto o KGDB quanto o KDB foram mesclados no Kernel do Linux. Mais sobre esses dois aqui . Outro método interessante, que funciona maravilhosamente para problemas não relacionados a hardware, é usar o User-mode Linux Kernel . Executar o Kernel no modo de usuário como qualquer outro processo permite depurá-lo como qualquer outro programa ( exemplos ). Mais informações sobre o Linux no modo de usuário aqui . A UML faz parte do Linux Kernel desde o 2.6.0, assim você pode construir qualquer versão oficial do kernel acima no modo UML por seguindo estes passos .

  3. Veja 2. Infelizmente não há melhor aqui, já que cada ferramenta / método tem seus prós e contras.

Espero que isso ajude você a iniciar sua jornada maluca no desenvolvimento do kernel do Linux.

    
por 16.03.2011 / 16:39
5

Se você estiver desenvolvendo uma plataforma incorporada que não seja baseada em hardware i386, será necessário fazer uma compilação cruzada. O projeto Emdebian fornece ferramentas para desenvolver para muitas arquiteturas (ARM, m68k, MIPS e mais) em PCs (i386 ou amd64). Isso significa que sob o Debian, você pode simplesmente adicionar os repositórios e o apt-get instalar o toolchain para o (s) alvo (s) de sua escolha.

    
por 16.03.2011 / 23:43
3

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

    
por 16.03.2011 / 15:22
0

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

    
por 18.01.2013 / 01:55