커널 용 모듈을 작성 중입니다. 나는 잠시 동안 (예 : 20 초) 프로세스를 기다려야 만 테스트 할 수 있습니다. 20 초 후에 프로세스를 진행해야합니다. 내 module_init()라는 함수에서 나는 그런 타이머 사용 :리눅스 커널 add_timer
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"내부 쓰기 \ n ");" 나는 기다리는 과정을 20 초간 유지하고 싶다. "내부 쓰기 2 \ n"메시지는 20 초 후에 "내부 쓰기 1 \ n"메시지를 써야합니다. add_timer (& 타이머)를 사용했습니다. 그들 사이에 있지만 작동하지 않습니다. 터미널에 "dmesg"라고 입력하면 메시지가 즉시 연속적으로 쓰여집니다.
나는 분명히 내 문제를 설명했으면 좋겠다. 아무도 도와 줄 수 있니?