Помимо таймера ядра, есть ли способ выполнять функцию повторно через заданный интервал? - PullRequest
2 голосов
/ 17 декабря 2011

Я пишу модуль ядра, который действует как память. И я хочу делать резервные копии данных каждые 10 секунд в файл. Я думаю, что таймер ядра может решить эту проблему, но я думаю, что это слишком хлопотно для использования и, вероятно, он не может работать с kthread Любой лучший способ выполнять функцию несколько раз в установленный интервал времени, кроме использования таймера ядра. Пожалуйста, предложите мне лучший метод. любой, если это возможно, расскажет мне больше о том, как это может быть реализовано, или даст некоторую ссылку на его использование. Спасибо

Ответы [ 2 ]

1 голос
/ 19 декабря 2011

Вы можете посмотреть на schedule_delayed_work() в <linux/workqueue.h>. Это запускает ваш рабочий элемент в контексте процесса после указанной вами задержки. Вам понадобится ваша рабочая функция, чтобы перепланировать ее запуск снова (т. Е. Снова вызвать schedule_delayed_work() для себя), но это довольно стандартная вещь.

Если вы действительно хотите иметь свой собственный поток ядра, вы можете использовать schedule_timeout(), чтобы задержать себя на 10 секунд. Или ложитесь спать и используйте таймер, чтобы разбудить себя (я согласен с другим ответом - API таймера довольно прост в использовании).

1 голос
/ 17 декабря 2011

Я не думаю, что API таймера ядра неудобен для использования, нужно вызвать только 2 функции (init_timer () и setup_timer ()).Смотрите здесь примеры: http://www.ibm.com/developerworks/linux/library/l-timers-list/index.html?ca=drs-

...