Os cabeçalhos abaixo /usr/include/linux
e abaixo /usr/include/asm*
são distribuídos com o kernel do Linux. Os outros cabeçalhos ( /usr/include/sys/*.h
, /usr/include/bits/*.h
e muitos mais) são distribuídos com a biblioteca C (a biblioteca GNU C , também conhecida como glibc, em todos os sistemas Linux não incorporados). Há uma pequena explicação no manual glibc .
Observe que /usr/include/linux
e /usr/include/asm
deve conter os cabeçalhos que foram usados ao compilar a biblioteca C, não os cabeçalhos do kernel em execução. Caso contrário, se algumas constantes ou estruturas de dados forem alteradas, haverá uma inconsistência entre o programa compilado e a biblioteca C, o que provavelmente resultará em uma falha ou pior. (Se os cabeçalhos correspondem à biblioteca C, mas a biblioteca C não corresponde ao kernel, o que realmente acontece é que o kernel foi projetado para manter uma ABI estável e deve detectar que foi chamado sob uma ABI diferente e interpretar os argumentos do syscall de acordo. de qualquer maneira o kernel deve fazer isso para programas estaticamente compilados.)
Lembro-me de um debate acalorado entre o Debian e a Red Hat há um tempo (uma década?) Sobre o /usr/include/linux
assunto; aparentemente cada lado está aderindo à sua posição. (Pelo que entendi, o Debian está certo, como explicado acima.) Atualmente, o Debian distribui /usr/include/linux
e amigos no linux-libc-dev
pacote, que é compilado a partir de fontes do kernel, mas não atualizado com o kernel. Os cabeçalhos do kernel estão em pacotes específicos da versão, fornecendo o linux-headers-2.6
metapacote; é isso que você precisa para compilar um módulo para uma versão específica do kernel.
O pacote que você está procurando é o cabeçalho da biblioteca C. Não sei como se chama, mas você pode descobrir yum provides /usr/include/sys/types.h
.
glibc-headers
.