В чем разница между / usr / include / linux и папкой include в источнике ядра linux? - PullRequest
4 голосов
/ 01 февраля 2012

В недавно установленной Ubuntu я нашел заголовки ядра как /usr/include/linux, так и /usr/src/kernel-version-headers/include/linux

Они взаимно одинаковы?

1 Ответ

9 голосов
/ 01 февраля 2012

Они очень разные; /usr/include/linux заголовки - это заголовки, которые использовались при компиляции стандартной C-библиотеки системы. Они принадлежат пакету библиотеки C и обновляются в стандартной версии стандартной библиотекой C. Они существуют, чтобы обеспечить ядру интерфейс userland , как это понято и "предоставлено" 1 библиотекой C.

Заголовки /usr/src/linux-headers-$(uname -r)/include/linux используются через символические ссылки /lib/modules/$(uname -r)/build. Они принадлежат пакетам заголовков ядра и обновляются вместе с ядром. Это подмножество заголовков ядра и достаточно системы Kbuild, необходимой для сборки модулей ядра из дерева. Эти файлы представляют собой внутреннюю часть ядра - модули должны быть скомпилированы с ними, чтобы правильно понимать объекты в памяти. Посмотрите файл Documentation/kbuild/modules.txt ядра для некоторых деталей.


1: «Опосредовано» было моим первым выбором слова, но оно подразумевает какой-то контроль доступа, что не так. «Брокерский» подразумевает сторонний процесс, но это также не так. Обратите внимание: когда C-программа вызывает _exit(), она на самом деле вызывает стандартную библиотеку C _exit() wrapper , которая вызывает системный вызов exit(2). Интерфейс select(2) имеет верхний предел количества файловых дескрипторов, которые можно отслеживать, и этот предел компилируется в стандартную библиотеку C. Даже если бы интерфейс ядра был расширен, библиотеку C также пришлось бы перекомпилировать.

...