Очевидно, что не должно быть проблем с установкой системного времени в модуле ядра Linux. Однако функция do_settimeofday() всегда возвращает EINVAL (недопустимый аргумент) в моем модуле, написанном для ядра 4.4. Я попробовал пример this topic, и получил тот же EINVAL (когда я напечатал результат do_settimeofday(). Интересно, что STIME (2) системный вызов использует тот же do_settimeofday() функции в ядре, и он всегда работает.Установить системное время в пространстве ядра Linux
Спасибо за идеи и советы!
Спасибо, @ Цыварев. Первый - это не тот случай. Второй из них понятен, но каков правильный способ изменения системного времени? _stime_ использует тот же _do_dettimeofday_ согласно http://lxr.free-electrons.com/source/kernel/time/time.c#L82. –
Пожалуйста, добавьте ** конкретный случай использования ** в ваш вопрос. Этот прецедент должен содержать: 1. * Точное значение * timespec, которое вы не можете установить с помощью 'do_settimeofday()' ядра. 2. * Точное значение * (то же самое) timespec, которое вам удалось установить с помощью 'sime()' пользователя. – Tsyvarev
ОК, сейчас он работает, спасибо! Ему не понравилось время, которое слишком далекое от текущего времени (согласно вашей монотонной причине времени). Пример, который я упомянул (из сообщения в [http://stackoverflow.com/questions/27446558/set-time-in-kernel-space]), очевидно, не будет работать, поскольку он не вычисляет время эпохи! –