커널쓰레드 CPU 사용율, 제거방법.....

지나가는새의 이미지

module에 kernel_thread 루틴을 첨가 하려 합니다.

커널 스레드는 init_module에 다음과 같이 추가되어 있구요

kernel_thread( kte_thread_func, NULL, CLONE_FS | CLONE_FILES | CLONE_SIGHAND );

커널 스레드가 처음 인지라 테스트 겸 해서 스레드 코드는 다음과 같이 했습니다.

static void kte_thread_func( void* data )
{
    daemonize();

    while(1){
        schedule();
    }
 }

insmod 하면 잘 돌기는 하는거 같은데요, CPU 점유율이 너무 높습니다.
root 89 99.9 0.0 0 0 ? RW 00:00 0:02 [insmod]

일반 app 에서는 sleep(1) 하면 되긴 하는데, 커널에서는 어떤식으로 해야 하는지 궁금하네요. udelay(xxx) 를 해 봤지만 별 소용 없었습니다.

그리고 exit_module 에서 자꾸 패닉이 나는데요.
exit_module 에는 다음과 같이 구현 했는데 어디가 틀린지 모르겠네요.

static void __exit kte_module_exit(void)
{
    wait_asleep( 100 );
   ....
}

static void wait_asleep( unsigned int die )
{
    current->state = TASK_INTERRUPTIBLE;
    schedule_timeout(HZ/die);
}

어디가 잘못 되었으니까 패닉이 나겠죠..

커널쓰레드를 처음 해 보는것이라서 어려움이 많네요. 도움 부탁 합니다.

익명 사용자의 이미지

http://ar.linux.it/docs/khttpd/ktftpd.tar.gz

이 예제를 참고해 보시지요.