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.
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.)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.
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?
fonte
Respostas:
Meu gosto pessoal pelo desenvolvimento do Linux Kernel é o Debian. Agora, para seus pontos:
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:
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 .
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.
fonte
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.
fonte
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.
fonte
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.
fonte