Різниця між / usr / include / sys та / usr / include / linux?


12

Ну, очевидно, є різниця, але мені цікаво раціональне, чому деякі речі підпадають під / usr / include / sys, а інші йдуть під / usr / include / linux і мають те саме ім'я файлу заголовка? Чи має це щось спільне з POSIX vx non-POSIX?

Крім того, мені вдалося заповнити / usr / include / linux заголовками в моїй системі Fedora, захопивши пакет kernel-headers, чи є стандартне ім'я пакета для отримання файлів заголовків, які підпадають під / usr / include / sys ? Я не зміг його знайти.

Відповіді:


14

Заголовки під /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.


2
Відповідь на останній шматочок є glibc-headers.
mattdm
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.