2012-04-19 2 views
4

모듈을 언로드하지 않을 때까지 무한 루프를 실행하고 싶은 모듈을 만들었습니다. 현재 rmmod를 사용하면 모듈이 여전히 바쁘다는 것을 알게되고 얼마 후 커널 패닉이 발생합니다.리눅스 커널 모듈에서 무한 루프 실행

while(1) 
{ 
    ....... 

} 

모듈을 언로드 할 때까지 무한 루프를 실행할 수있는 트릭이 있습니까?

+1

이것은 좋은 생각 같지 않습니다. 무엇을 성취하려고합니까? – stsquad

+0

타이머 인터페이스를 대신 사용해보십시오. http://kerneldeveloper.drupalgardens.com/addtimer-function –

답변

6

이 루프는 어떤 상황에서 실행됩니까? 이것은 매우 중요한 질문입니다.

init_module을 실행하면 insmod 프로세스가 절대 종료되지 않으므로 상당히 나쁩니다.
일부 시스템 호출이 실행되는 경우 시스템 호출이 반환되지 않으며 잘못 될 수도 있습니다.
두 경우 모두 프로세스를 죽일 방법이 없습니다 (심지어 kill -9 아님).
softIRQ 처리기 (또는 더 나쁜 경우 hardIRQ 처리기)에서 처리하는 경우 시스템이 중단됩니다.

이 작업에 전념하는 커널 스레드에서 수행하는 경우 제대로 수행 할 수 있습니다.
하지만 CPU를 완전히 먹고 싶지 않으면 스케줄러를 호출하여 다른 작업을 실행해야합니다. msleep_interruptible은 좋은 방법입니다.

+0

코드에 예제를주세요. – karan421

+0

준비된 예가 있습니다. 나는 너에게 맡길거야. – ugoren

2

잘 모르겠지만 while (1) while (notStopped)을 사용하십시오. 처음에는 1로 설정되고 stop_module()에서는 0으로 설정됩니다.

+0

모듈을 언로 드하지만 두 번째 시스템은 교수형에 처한 ..... – karan421

관련 문제