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