Что такое заголовки ядра, которые можно использовать в пространстве пользователя? Отличаются ли их подпись или интерфейс от заголовков в разных каталогах?

Решение предоставлено предложением ikkachu. В частности, введите

grep -re cron /var/log/ 

или что-то подобное.

Появится список со временем и другой информацией.

Указанное время показало, что сервер фактически отключался от времени UTC. Таким образом, корректировка времени UTC решила проблему.

Определение точного времени, которое использует сервер, независимо от его фактического местоположения, является решением проблемы такого типа.

4
31.03.2020, 00:17
1 ответ

Добро пожаловать в StackExchange для Unix и Linux!

Да, заголовки ядра предоставляют интерфейс для других частей ядра -в этом вы совершенно правы. Они также включают определения для интерфейса между ядром и пользовательским пространством -, но обычно «сырой» интерфейс ядра используется не напрямую, а через библиотеку C (часто glibc).

Интерфейс ядра пространства пользователя -может включать в себя несколько версий конкретного системного вызова по причинам обратной совместимости. Выполняя системный вызов через библиотеку C, все приложения получают одну и ту же версию фактического системного вызова и, таким образом, гарантируют согласованное поведение. Кроме того, когда соответствующая часть интерфейса ядра будет обновлена, вам нужно будет только обновить библиотеку C, чтобы воспользоваться преимуществами новых функций.

(Например, когда время _t расширяется до 64 -бит в 32 -битных архитектурах, чтобы избежать проблемы Y2K38, библиотека C может перейти к использованию всегда 64 -битной версии интерфейс ядра, но имеют настраиваемое сопоставление пользовательского пространства -для приложений, которые все еще используют 32-битную версию -. В этот момент функции, использующие 32 -битное время _t, могут быть устаревшими и удалены из ядра, а библиотека C может предоставить лучшие обходные пути для устаревших приложений, которые все еще используют 32 -битный тип.)

Таким образом, если вы также не компилируете свои собственные версии библиотеки C, вам, как правило, следует отдавать предпочтение заголовочным файлам разработки библиотеки C, а не непосредственному использованию заголовков ядра.

Заголовки в /usr/include/linux/обычно поставляются с пакетом заголовков разработки библиотеки C,и опишите версию ядра, для которого была скомпилирована библиотека C. Это то, что обычно требуется разработчику пользовательского приложения.

/lib/modules/$(uname -r)/buildчасто является символической ссылкой на /usr/src/..., где хранятся заголовки или полный исходный код текущей версии ядра. Он используется при компиляции внешних (или сторонних -модулей ядра ), то есть модулей ядра из исходных кодов, которые не интегрированы в основной исходный код ядра. Эти заголовки включают необходимые сигнатуры версии API ядра, чтобы модули могли использовать внутренние API версии -ядра -.

4
19.03.2021, 02:31

Теги

Похожие вопросы