Використання заголовків ядра в реальному часі для компіляції коду простору користувача проти заголовків за замовчуванням


11

Відповідно до вимог замовника, я встановив CentOS 5.6 з ядром за замовчуванням. Коли це ядро ​​встановлено, файл time.h включає в себе файл #define CLOCK_MONOTONIC.

Тепер ядро ​​в реальному часі було встановлено разом з ядром-devel і наш код хотів би використовувати CLOCK_MONOTONIC_RAW. Він існує як частина файлів заголовків ядра, але коли я компілюю наш код, він не знаходить його в стандартному просторі користувачів.

Моє запитання, яка правильна процедура включення / заміни time.hзнайденого за замовчуванням ядром у реальному часі? З мого дослідження, схоже, що символьні посилання погані, тож як з цим поводитися? Що таке процедура чи процес? Оновлення до CentOS 6.0 або 5.7 не є можливим для потреб клієнта.


Плануєте вставити цей модуль у ядро ​​CentOS за замовчуванням?
bahamat

Відповіді:


1

Існує ключове розмежування щодо того, звідки беруться файли заголовків:

  • <time.h>надається glibc (наприклад, glibc-headersпакет)
  • <linux/time.h> надається заголовками ядра Linux.

Зміна ядра та його заголовків не вплине <time.h>. Лише зміна glibc зробить це.

Ви повинні виявити, що glibc's <time.h>включає, <bits/time.h>що вирішує як, наприклад, /usr/include/x86_64-linux-gnu/bits/time.hі визначає CLOCK_MONOTONIC_RAW. Якщо цього немає, і ви не можете його оновити, вам доведеться вдатися до включення такого коду:

#include <time.h>
#ifndef CLOCK_MONOTONIC_RAW
# define CLOCK_MONOTONIC_RAW 4
#endif

0

Вам просто потрібно #include <linux/time.h>


Дякую за відповідь. Я перевірив розташування linux / time.h, і він також не має посилання на "RAW". Я запускаю оновлене ядро ​​в реальному часі, але мені просто потрібно зрозуміти, як перенести заголовки нового ядра, які мають посилання на "RAW", у файли заголовка простору користувача. Я маю якийсь сенс чи правильний мій підхід? Ще раз дякую за допомогу.
cabanaboy

@cabanaboy, я не впевнений, де ви шукаєте або звідки прийшов файл, але linux / time.h, безумовно, має визначати CLOCK_MONOTONIC_RAW. Це також не має значення, використовуєте ви ядро ​​в реальному часі чи ні; заголовки однакові.
psusi

3
@cabanaboy, почекай ... ти працюєш зі старим ОС, який, мабуть, постачав ядро ​​старше 2.6.28, коли це було додано. Як ви встановили нове ядро? Якщо ви побудували його з джерела самостійно, тоді вам це потрібно make install_headers. Якщо ви отримали оновлений пакет ядра, вам потрібно отримати відповідний оновлений пакет kernel_headers.
psusi

0

Заголовки, які встановлює ваш дистрибутив, не ті, що в ядрі, вони санізовані / "користувацькими" версіями. Вам доведеться отримати копію заголовків у включенні / linux у джерелах ядра та налаштувати так, щоб вони використовувались у перевазі, ніж ті, які знаходяться в / usr / include / linux (потрібно поставити прапор -I для gcc). І перевірити, чи нічого не здається.


0

Я би переконався, що я будувати проти заголовків, які надійшли з новим ядром. CLOCK_MONOTONIC_RAWслід визначити в linux/time.h. Спочатку з’ясуйте, які заголовки ви використовуєте, і перевірте, як це визначено у файлі. Ви можете визначити його у своєму коді (лише як чек), щоб побачити, що відбувається.

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