2016-09-23 9 views
0

Очевидно, что не должно быть проблем с установкой системного времени в модуле ядра Linux. Однако функция do_settimeofday() всегда возвращает EINVAL (недопустимый аргумент) в моем модуле, написанном для ядра 4.4. Я попробовал пример this topic, и получил тот же EINVAL (когда я напечатал результат do_settimeofday(). Интересно, что STIME (2) системный вызов использует тот же do_settimeofday() функции в ядре, и он всегда работает.Установить системное время в пространстве ядра Linux

Спасибо за идеи и советы!

ответ

0

Согласно implementation, do_settimeofday возвращает EINVAL только если

  • timespec Его параметр неверен (количество секунд, является отрицательным или количество наносекунд находится вне интервала [0,1 000 000 000)), или

  • Установки заданного значения времени будет сломало монолитное время характера. Обратите внимание: в то время как функция предназначена для обновления real времени, она также изменяет monolitic время на ту же дельта.

+0

Спасибо, @ Цыварев. Первый - это не тот случай. Второй из них понятен, но каков правильный способ изменения системного времени? _stime_ использует тот же _do_dettimeofday_ согласно http://lxr.free-electrons.com/source/kernel/time/time.c#L82. –

+0

Пожалуйста, добавьте ** конкретный случай использования ** в ваш вопрос. Этот прецедент должен содержать: 1. * Точное значение * timespec, которое вы не можете установить с помощью 'do_settimeofday()' ядра. 2. * Точное значение * (то же самое) timespec, которое вам удалось установить с помощью 'sime()' пользователя. – Tsyvarev

+0

ОК, сейчас он работает, спасибо! Ему не понравилось время, которое слишком далекое от текущего времени (согласно вашей монотонной причине времени). Пример, который я упомянул (из сообщения в [http://stackoverflow.com/questions/27446558/set-time-in-kernel-space]), очевидно, не будет работать, поскольку он не вычисляет время эпохи! –

 Смежные вопросы

  • Нет связанных вопросов^_^