Использование заголовков ядра в реальном времени для компиляции кода пользовательского пространства против заголовков по умолчанию - PullRequest
2 голосов
/ 05 января 2012

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

Теперь ядро ​​реального времени было установлено вместе с уровнем ядра, и наш код хотел бы использовать CLOCK_MONOTONIC_RAW.Он существует как часть заголовочных файлов ядра, но когда я компилирую наш код, он не находит его в стандартном пользовательском пространстве, включающем.

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

Ответы [ 2 ]

1 голос
/ 05 января 2012

Ну, код пользовательского пространства использует заголовки пользовательского пространства.Модули ядра используют заголовки ядра (и именно поэтому символические ссылки плохие, потому что вы будете смешивать код пользовательского пространства с заголовками ядра).

Чтобы получить определение CLOCK_MONOTONIC_RAW, вам придется обновить glibc - для определений CLOCK_,заголовки "borderline" (они по-прежнему считаются пользовательским пространством!) в / usr / include / linux не используются.

При установке CentOS 5 по умолчанию вы облажались, потому что и glibc (2.5), и ядро ​​(2.6.18) слишком стар;glibc-2.12 (commit glibc-2.12 ~ 111) и kernel-2.6.28 первыми имеют MONOTONIC_RAW.Это означает, что это должен быть CentOS 6 или что-то еще лучше.

Вы можете попробовать обмануть свой путь, используя в своем коде что-то вроде #ifndef CLOCK_MONOTONIC_RAW, #define CLOCK_MONOTONIC_RAW 4, #endif, но это считается непереносимым.

0 голосов
/ 16 февраля 2012

Определение CLOCK_MONOTONIC_RAW находится в /usr/local/include/linux/time.h при нашей установке Fedora 11, но этот заголовок, по-видимому, в основном непригоден для использования.Он не объявляет clock_gettime и не определяет clockid_t, но, к счастью, определяет struct timerspec и struct itimerspec.Первому предшествует "#ifndef _STRUCT_TIMESPEC", так что вы можете отключить его, но последний полностью незащищен, что означает, что вы не можете включить и в один и тот же файл без получения конфликтующих определений.

Возможно,быть некоторым искажением директив #include, которые вы могли бы использовать, чтобы заставить это работать, используя заголовки в / usr / include, но я сдался и просто скопировал версию linux в каталог с исходным кодом для моего проекта, а затем закомментировал дополнительный мусор, которыйМне не нужноТак много для мобильности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...