Caminho para os cabeçalhos do kernel linux x86_64

0

Eu quero compilar o programa usando alguns cabeçalhos de kernel do Linux. Mas, se eu adicionar apenas -I/usr/src/linux-headers-4.4.0-36/include , não será possível encontrar linux/export.h . Vi arquivos com o mesmo nome em arch / architecture , mas não consigo encontrar amd64 ou x86_64 . uname -pmi disse x86_64 x86_64 x86_64 . O que é o diretório correto em arch no meu caso?

O sistema é Linux Mint com o kernel 4.4.0.-36 do repositório.

UPD: eu quero usar

#include <linux/platform_device.h>
#include <linux/usb/g_hid.h>

hello.cpp:

#include <linux/platform_device.h>
#include <linux/usb/g_hid.h>

int main ()
{
    return 0; // nothing
}

Mas o compilador com -I /usr/src/linux-headers-4.4.0-36/include -I /usr/src/linux-headers-4.4.0-36/arch/x86/include disse sobre muitas redefinições e não consegue encontrar <generated/timeconst.h> . Eu encontrei em /usr/src/linux-headers-4.4.0-36-generic/include . Mas com os mesmos caminhos no diretório -generic , também tenho alguns erros.

    
por val 01.09.2016 / 22:17

1 resposta

2

A maioria das arquiteturas com variantes de 32 e 64 bits está no mesmo subdiretório arch . Isso mudou ao longo do tempo; x64_64 foi mesclado em x86 em 2.6.24, sh64 em sh em 2.6.25, sparc64 em sparc em 2.6.29. arm64 ainda é uma arquitetura separada a partir de 4.7. ppc64 foi movido para powerpc em 2.6.14 e ppc foi finalmente mesclado em 2.6.27. mips64 foi mesclado nos primeiros 2,6 dias.

Portanto, os cabeçalhos amd64 estão em arch/x86 .

Mas você normalmente compila programas contra cabeçalhos da libc, não contra cabeçalhos de kernel. (Mesmo que às vezes tenham o mesmo nome, eles têm conteúdos diferentes!) Verifique se você realmente precisa de cabeçalhos de kernel - isso só acontece com programas que usam interfaces instáveis que podem mudar entre versões de kernel (por exemplo, algumas interfaces de depuração de baixo nível). / p>     

por 02.09.2016 / 09:02