Não é possível acessar o linux / skbuff.h

2

Estou escrevendo um módulo do kernel no qual preciso acessar sk_buff variables. Mas quando eu escrevo

#include <linux/skbuff.h>

O Netbeans diz que não pode localizar esse arquivo de cabeçalho.

    
por Chani 02.01.2012 / 08:21

1 resposta

2

Esse cabeçalho não é propositadamente instalado em /usr/include/linux , mesmo se você tiver os cabeçalhos do kernel instalados. Isso ocorre porque as coisas definidas nesse cabeçalho não fazem parte da ABI estável do kernel; os desenvolvedores do kernel têm permissão para alterar qualquer coisa nesse cabeçalho entre quaisquer dois lançamentos, então você deve referenciar os cabeçalhos específicos da versão do kernel que você deseja que o driver faça o link.

Para os kernels 2.6+, é mais fácil obter o comportamento correto através do uso do kernel padrão esquema do Makefile do driver do que através de tentativas de distorcer o NetBeans. O sistema de compilação de drivers 2.6+ faz um lote de coisas para você, mais do que você obterá de um IDE "fácil de usar" como o Netbeans.

Talvez você possa obter o melhor dos dois mundos. Alguns IDEs permitem usá-lo como um editor glorificado, mas delegam a criação a uma ferramenta make externa.

Se você tivesse que fazer tudo dentro do Netbeans, poderia fazê-lo praticamente da mesma maneira que construímos drivers para os kernels 2.4 e anteriores. Basicamente, você acaba referenciando diretórios de arquivos de cabeçalho dentro do próprio código-fonte do kernel. No GNU Makefile speak, você teria algo assim:

KERNPATH=/usr/src/kernels/$(shell uname -r)
CFLAGS=-I$(KERNPATH)/include

Fazer o mesmo no Netbeans provavelmente será algo difícil ou impossível:

  1. O Netbeans provavelmente não tem como executar um comando shell ( uname -r ) de dentro do IDE como parte do processo de compilação e usar sua saída para substituir em uma variável usada no restante da compilação .

  2. O caminho de origem do kernel varia de acordo com a distribuição do Linux. Com Makefiles você pode simplesmente escrever um script de shell para descobrir detalhes locais como este, mas duvido que você possa fazer isso com o Netbeans. O caminho acima está correto para um sistema do tipo Red Hat que eu verifiquei enquanto escrevia esta resposta. Eu então verifiquei um sistema Ubuntu e encontrei os mesmos arquivos em /usr/src/linux-headers-$(uname -r)/include . Não havia padrões para isso até que o novo sistema de compilação do driver kernel 2.6 fosse desenvolvido.

por 02.01.2012 / 09:30