Рейтинг:0

Невозможно использовать/найти gettimeofday в ядре Ubuntu

флаг hu

Я использую Ubuntu 20.10 с исходным кодом ядра 5.8.0-59.66.

Мне нужно получить текущее время суток (от эпохи) в ядре. Используя либо RHEL 7.9, либо CENTOS 7, я полагался на функцию gettimeofday().

Короче говоря, документация указывает на то, что функция существует в Ubuntu -

http://manpages.ubuntu.com/manpages/bionic/man2/gettimeofday.2.html

в котором говорится о включении следующих

   #include <sys/time.h>

Этот файл или фактически каталог «sys», похоже, не существует в моем дереве исходных текстов ядра. Если я выполняю поиск в time.h, я нахожу несколько файлов, включая ~/include/linux/time.h, но они не содержат определения функции.

Я что-то упустил здесь? Или, возможно, есть лучший и/или обновленный метод получения времени в виде gettimeofday?

Он отлично работает на других моих модах ядра, отличных от Ubuntu. Но это мой первый опыт работы с Ubuntu.

Я забыл добавить ошибку компиляции.

ошибка: неявное объявление функции «gettimeofday» 
[-Werror=неявное-объявление-функции]
 1329 | получить время дня (& время);

Код, использующий эту функцию,

структурировать время;      
получить время дня (& время);
local_time = (u32)(time.tm_sec);

Имейте в виду, что это не точный код в версиях RHEL и Centos. Я внес небольшие изменения, основанные на ошибках компилятора, например, time.tv_sec стал time.tm_sec, и поэтому это не доказано.

Однако я думаю, что первая проблема заключается в отсутствии определения для gettimeofday? Или я могу ошибаться...

TonyB avatar
флаг za
Не могли бы вы показать нам свой код ..?
TonyB avatar
флаг za
В моей системе Ubuntu 20.04 файл sys/time.h находится здесь: `/usr/include/x86_64-linux-gnu/sys/time.h` и содержит следующий комментарий (среди прочего) о gettimeofday()... «Сама эта функция наполовину устарела; большинству вызывающих абонентов вместо этого следует использовать time или clock_gettime».
rhg910 avatar
флаг hu
Отличный. Я попробую сегодня вечером и официально отвечу завтра.
флаг us
Раздел 2 справочных страниц предназначен для системных вызовов из пользовательского пространства. Такие функции обычно недоступны в самом ядре. Как правило, модули ядра могут использовать только ``и`` заголовки; `` заголовки не являются частью ядра.
флаг us
https://stackoverflow.com/questions/50349294/getnstimeofday-is-an-implicit-declaration-in-system-call-when-linux-time-h-i предлагает вам использовать `getnstimeofday` from ``.
rhg910 avatar
флаг hu
Я бы закрыл этот пост как ответ, если бы увидел галочку, указанную на страницах справки. В нынешнем виде ответ TonyB указал мне правильное направление, как и ответ Нейта.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.