Como adicionar uma chamada de sistema ao kernel do Linux?

3

Atualmente estou lendo a Conceitos do Sistema Operacional 7ª edição por Silberschartz, Galvin e Gagne. No final do capítulo 2, há um exercício "Adicionar uma chamada do sistema ao kernel do Linux". Infelizmente, percebi que a estrutura de diretórios usada pelos autores é completamente diferente da do Ubuntu. Por exemplo, os autores referiram-se a "/usr/src/linux-2.x/include/asm-i386/unistd.h", mas na minha máquina eles são:

  • /usr/src/linux-headers-2.6.38-10
  • /usr/src/linux-headers-2.6.38-10-generic

E dentro dessa pasta, eu não consegui encontrar nada chamado "asm-i386" :(. Eu me pergunto se existe alguma documentação especificada para o Ubuntu? Qualquer sugestão seria muito apreciada.

Obrigado,

    
por Chan 13.07.2011 / 22:22

2 respostas

4

O Ubuntu não faz nada de especial. Sua primeira dificuldade é que você não tem a fonte do kernel instalada, apenas os cabeçalhos do kernel. Os autores estão descrevendo um sistema com uma cópia da origem do kernel em /usr/src/linux-2.x . Se você está apenas compilando módulos externos, os cabeçalhos, que são o que você vê no seu sistema, são suficientes. O Ubuntu envia cabeçalhos de kernel para esse propósito nos linux-headers-* packages (que você normalmente instalaria através da dependência dos linux-headers- genérico metapacote). Se você precisar de toda a fonte, pegue um arquivo comprimido do linux-source-2.6 pacote binário.

Outra coisa é que a estrutura de diretórios mudou um pouco ao longo do tempo; cabeçalhos dependentes da arquitetura movidos de include/asm-$ARCH para arch/$ARCH/include/asm . Além disso, as arquiteturas i386 e x86_64 foram mescladas em um x86 unificado em 2.6.24. ( Mais detalhes aqui. ) Agora você precisa procurar em arch/x86/include em vez de include/asm-i386 .

Aqui estão alguns recursos úteis para hackers do kernel Linux:

  • Drivers de dispositivos do Linux (LDD3)
  • LWN (notícias sobre o Linux, incluindo muitos artigos técnicos sobre o kernel de um dos autores do LDD)
  • LXR para navegar e pesquisar a origem do kernel
  • LKML (a lista de discussão do kernel do Linux), estouro de pilha para faça perguntas sobre o kernel e o desenvolvimento do kernel

E também leia este tópico no Unix & amp; Linux , que explica como localizar a implementação de um syscall existente.

    
por Gilles 14.07.2011 / 00:07
3

/usr/src/linux-headers-2.6.38-10-generic/include/linux/unistd.h

ou no futuro kernels:

/usr/src/linux-headers-KERNEL_VERSION/include/asm-generic/unistd.h

:)

    
por Andrew Gunnerson 13.07.2011 / 23:01