Пишу модуль для ядра. Мне нужно подождать какое-то время (например, 20 секунд), чтобы что-то протестировать. Процесс должен продолжиться через 20 секунд. В моей функции module_init я использовал такой таймер:
init_timer(&timer);
timer.expires = jiffies + HZ*20;//timer expires in delay ticks
timer.data = 0;//zero is passed to the timer handler
timer.function = timer_handle;//function to run when timer expires
"таймер" - это структура, которая определена таким образом
static struct timer_list timer;
timer_handle - это моя функция, которая запускается по истечении таймера:
void timer_handle (unsigned long data){
}
Теперь в моей функции:
ssize_t write(struct file *filp, const char *buff, size_t count, loff_t *offp) {
unsigned long ret;
printk(KERN_INFO "pid : .%d \n", task->pid);
down_write(&rwsem);
if ( (filp->f_flags & O_ACCMODE) == O_RDONLY)
{
printk(KERN_INFO "The reader thread is not able to write. \n");
return -EINVAL;
}
printk(KERN_INFO "Inside write 1 \n");
add_timer(&timer);
ret = copy_from_user(bufferr, buff, count);
up_write(&rwsem);
printk("Inside write 2 \n");
return count;
}
После "printk (KERN_INFO" Inside write \ n ");" Я хочу, чтобы процесс ожидал 20 секунд. Сообщение «Внутри записи 2 \ n» должно быть написано через 20 секунд после записи «Внутри записи 1 \ n». Я использовал add_timer (& timer); между ними, но это не работает. Я ввожу "dmesg" в терминал, и сообщения сразу же пишутся последовательно.
Надеюсь, я ясно объяснил свою проблему :) Кто-нибудь может мне помочь?