Los encabezados debajo /usr/include/linux
y debajo /usr/include/asm*
se distribuyen con el kernel de Linux. Los otros encabezados ( /usr/include/sys/*.h
, /usr/include/bits/*.h
y muchos más) se distribuyen con la biblioteca C (la biblioteca GNU C , también conocida como glibc, en todos los sistemas Linux no integrados). Hay una pequeña explicación en el manual de glibc .
Tenga en cuenta que /usr/include/linux
y /usr/include/asm
debe contener los encabezados que se utilizaron al compilar la biblioteca C, no los encabezados del núcleo en ejecución. De lo contrario, si algunas constantes o estructuras de datos cambian, habrá una inconsistencia entre el programa compilado y la biblioteca de C, lo que probablemente provocará un bloqueo o algo peor. (Si los encabezados coinciden con la biblioteca C pero la biblioteca C no coincide con el núcleo, lo que realmente sucede es que el núcleo está diseñado para mantener un ABI estable y debe detectar que se llama bajo un ABI diferente e interpretar los argumentos de syscall en consecuencia. kernel debe hacer esto para programas compilados estáticamente de todos modos).
Recuerdo un acalorado debate entre Debian y Red Hat hace un tiempo (¿una década?) Sobre el /usr/include/linux
tema; aparentemente cada lado se está pegando a su posición. (Según tengo entendido, Debian tiene razón, como se explicó anteriormente.) Debian actualmente distribuye /usr/include/linux
y amigos en el linux-libc-dev
paquete, que se compila a partir de fuentes del núcleo pero no se actualiza con el núcleo. Los encabezados del núcleo están en paquetes específicos de la versión que proporcionan el linux-headers-2.6
metapaquete; Esto es lo que necesita para compilar un módulo para una versión particular del núcleo.
El paquete que está buscando son los encabezados de la biblioteca C. No sé cómo se llama, pero puedes averiguarlo yum provides /usr/include/sys/types.h
.
glibc-headers
.