カーネル用のモジュールを書いています。何かをテストするだけで、プロセスをしばらく (たとえば、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秒間待機させたい。メッセージ「Inside write 2 \n」は、メッセージ「Inside write 1 \n」が書き込まれた 20 秒後に書き込まれる必要があります。add_timer(&timer); を使用しました。それらの間ですが、機能しません。ターミナルで「dmesg」と入力すると、メッセージがすぐに連続して書き込まれます。
私の問題を明確に説明したいと思います:)誰か助けてくれませんか?