Os cabeçalhos sob /usr/include/linux
e abaixo de /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 conhecido como glibc, em todos os sistemas Linux não incorporados. Há uma pequena explicação no manual da glibc .
Observe que /usr/include/linux
e /usr/include/asm
devem 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 corresponderem à biblioteca C, mas a biblioteca C não corresponder ao kernel, o que realmente acontece é que o kernel é projetado para manter uma ABI estável e deve detectar que é chamado sob uma ABI diferente e interpretar os argumentos syscall adequadamente. O kernel deve fazer isso para programas estaticamente compilados de qualquer forma.)
Eu me lembro de um debate acalorado entre o Debian e a Red Hat há algum tempo (há uma década) sobre o /usr/include/linux
issue; aparentemente, cada lado está aderindo à sua posição. (Até onde eu entendi, o Debian está certo, como explicado acima). O Debian atualmente distribui /usr/include/linux
e amigos no pacote linux-libc-dev
, que é compilado a partir de fontes do kernel, mas não atualizado com o kernel. Os cabeçalhos de kernel estão em pacotes específicos da versão, fornecendo o meta-pacote linux-headers-2.6
; isto é o 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. Eu não sei como é chamado, mas você pode descobrir com yum provides /usr/include/sys/types.h
.