Верхние /usr/include/linux
и нижние заголовки /usr/include/asm*
распространяются вместе с ядром Linux. Остальные заголовки ( /usr/include/sys/*.h
, /usr/include/bits/*.h
, и многие другие) распределены с библиотекой C (в библиотеке GNU C , также известный как Glibc, на всех не встроенные системы Linux). В руководстве по glibc есть небольшое объяснение .
Обратите внимание, что /usr/include/linux
и /usr/include/asm
должен содержать заголовки, которые использовались при компиляции библиотеки C, а не заголовки из работающего ядра. В противном случае, если некоторые константы или структуры данных изменились, между скомпилированной программой и библиотекой C возникнет несоответствие, что может привести к сбою или, что еще хуже. (Если заголовки соответствуют библиотеке C, но библиотека C не соответствует ядру, то на самом деле происходит то, что ядро разработано для поддержания стабильного ABI и должно обнаруживать, что оно вызывается под другим ABI, и соответствующим образом интерпретировать аргументы syscall. В любом случае ядро должно делать это для статически скомпилированных программ.)
Я помню жаркую дискуссию между Debian и Red Hat некоторое время назад (десять лет?) По этому /usr/include/linux
вопросу; по-видимому, каждая сторона придерживается своей позиции. (Насколько я понимаю, Debian прав, как объяснено выше.) В настоящее время Debian распространяет /usr/include/linux
и друзей в linux-libc-dev
пакете, который скомпилирован из исходников ядра, но не обновлен с помощью ядра. Заголовки ядра находятся в специфичных для версии пакетах, обеспечивающих linux-headers-2.6
метапакет; это то, что вам нужно для компиляции модуля для конкретной версии ядра.
Пакет, который вы ищете - это заголовки библиотеки C. Я не знаю, как это называется, но вы можете узнать с помощью yum provides /usr/include/sys/types.h
.
glibc-headers
.