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


11

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

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

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


Планируете ли вы вставить этот модуль в ядро ​​CentOS по умолчанию?
Багамат

Ответы:


1

Необходимо сделать ключевое различие в том, откуда берутся заголовочные файлы:

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

Изменение ядра и его пакетов заголовков не повлияет <time.h>. Только изменение glibc сделает это.

Вы должны найти, что <time.h>включает в glibc, <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. Также не имеет значения, используете ли вы ядро ​​реального времени или нет; заголовки одинаковы.
Псуси

3
@cabanaboy, подождите ... у вас установлена ​​старая ОС, которая должна была быть поставлена ​​с ядром старше 2.6.28, когда она была добавлена. Как вы установили новое ядро? Если вы построили это из источника самостоятельно, то вам нужно make install_headers. Если вы получили обновленный пакет ядра, то вам нужно получить соответствующий обновленный пакет kernel_headers.
Псуси

0

Заголовки, которые устанавливает ваш дистрибутив, - это не те, которые находятся в ядре, а очищенные / «пользовательские» версии. Вам нужно получить копию заголовков в include / linux в исходных кодах ядра и настроить их так, чтобы они использовались в предпочтении перед заголовками в / usr / include / linux (необходимо пометить флаг -I для gcc). И проверь, если ничего не пропускает.


0

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.