2016-06-19 1 views
0

this fabulous tutorial에 설명 된대로 Linux에 문자 장치 드라이버 커널 모듈을 만들었습니다. 드라이버는 잘 작동하지만 난 (기능 write()를 호출) 호출 사용자 프로세스가 일정 시간 동안 차단되도록 커널 모듈 기능을문자 장치 드라이버 커널 모듈 작성자에게 절전 모드를 설정하는 방법

static ssize_t device_write(struct file *filp, const char *buff, size_t len, loff_t *off) 

을 확장 할 필요가있다.

내 커널 모듈에 device_writelinux/delay.h을 포함하고 msleep(1000)을 사용하여 CPU를 대기시킬 수 있습니다. 그러나 이것이 사용자 공간에서 write()의 함수 호출을 차단하는 올바른 방법인지는 모르겠습니다.

리소스와 동시 액세스하는 것과 혼동하지 마십시오. 그게 내 요점이 아니야. 하드웨어 데이터를 쓸 때까지 사용자 공간 프로그램의 write() 호출을 차단하기 만합니다. 시간이 걸립니다. 이 작업이 완료되면 작업이 성공했는지 알 수 있으며 device_write을 통해 적절한 상태 호출을 write 사용자 공간 프로그램 호출로 반환 할 수 있습니다.

+0

작업이 완료되면 "추측 하시겠습니까?" –

+0

힌트 : 어떻게하는지 알아 내고 싶다면, 일반적으로 비슷한 것을하는 기존 메커니즘을 찾아서 어떻게 작동하는지 살펴보십시오. 매우 일반적인 I/O 블로킹 드라이버를 설명하는 것처럼 보이기 때문에 비슷한 예제를 찾는 데 어려움이 없어야합니다. –

답변

0

차단 기능 내에서 down_interruptible (struct semaphore)을 사용하고 다른 커널 스레드/이벤트 핸들러에서 세마포어를 해제하여 호출 스레드를 해제 할 수 있습니다.