2012-05-17 3 views
1

커널 용 모듈을 작성 중입니다. 나는 잠시 동안 (예 : 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"라고 입력하면 메시지가 즉시 연속적으로 쓰여집니다.

나는 분명히 내 문제를 설명했으면 좋겠다. 아무도 도와 줄 수 있니?

답변

2

두 개의 메시지가 즉시 으로 연속적으로 쓰여집니다. beacuse 그들은 연속적으로입니다. 타이머가 지연되지 않으므로 20 초 후에 커널이 timer_handle() 함수를 실행합니다.이 함수는 비어 있습니다.

당신은 몇 가지 코드 실행 Linux Device Driver 3th 장 당신은 사용자가 읽기 트리거의 쓰기 콜백 이후로, 잘못 인쇄 3

1

7 절 읽어 지연해야하는 경우.

언제 타이머를 등록 하시겠습니까? 나는 왜 당신이 글을 쓰는 지 알 수 없었다.

타이머는 주기적으로 또는 일부 이벤트 트리거를 기준으로 타이머를 사용해야합니까?