На свеже установлен Ubuntu, я нашел заголовки ядра в обоих /usr/include/linux
и /usr/src/kernel-version-headers/include/linux
В чем разница между/usr/include/linux и папкой include в Linux-источнике ядра?
ли они взаимно одинаковы?
На свеже установлен Ubuntu, я нашел заголовки ядра в обоих /usr/include/linux
и /usr/src/kernel-version-headers/include/linux
В чем разница между/usr/include/linux и папкой include в Linux-источнике ядра?
ли они взаимно одинаковы?
Они очень разные; Заголовки /usr/include/linux
являются заголовками, которые использовались при компиляции стандартной библиотеки C системы. Они принадлежат библиотеке C-библиотеки и обновляются в блокировке со стандартной библиотекой C. Они существуют для обеспечения интерфейса пользователя userbox для ядра, как поняли и «брокера» библиотекой C.
Заголовки /usr/src/linux-headers-$(uname -r)/include/linux
используются через символические ссылки /lib/modules/$(uname -r)/build
. Они принадлежат пакетам заголовков ядра и обновляются с помощью ядра. Это подмножество заголовков ядра и достаточная система Kbuild, необходимая для создания модулей ядра из дерева. Эти файлы представляют собой внутренние элементы ядра - модули должны строить против них, если они должны правильно понимать объекты в памяти. Подробные сведения см. В файле ядра Documentation/kbuild/modules.txt
.
1: «опосредованное» был моим первым выбором слова, но это подразумевает какое-то контроль доступа, что не так. «Брокер» подразумевает сторонний процесс, но это также не так. Рассмотрим: когда программа C вызывает _exit()
, она фактически вызывает библиотеку стандартного C _exit()
обертки, которая вызывает системный вызов exit(2)
. Интерфейс select(2)
имеет верхнее ограничение на количество дескрипторов файлов, которые можно отследить, и этот лимит скомпилирован в стандартную библиотеку C. Даже если интерфейс ядра был расширен, библиотеку C также необходимо перекомпилировать.