저는 PCI 장치 용 리눅스 장치 드라이버를 작성했습니다. 이 장치는 DMA 작업을 수행합니다. DMA 작업이 실행 중일 때 프로그램이 충돌 할 때 문제가 발생합니다.Linux 디바이스 드라이버가 device_remove() 함수에서 DMA가 종료 될 때까지 기다릴 수 있습니까?
실제로 충돌이 발생하면 device_remove()
함수가 시스템에서 호출됩니다 (close()
이 호출 된 것처럼). 이 함수는 PCI 장치가 사용하는 메모리 영역을 정리하여 할당 된 메모리를 올바르게 해제합니다. 정상적인 상황에서 제대로 작동한다는 뜻입니다.
그러나 DMA가 실행 중이면 실제로 종료 될 때 해제 된 장치 데이터에 더 이상 액세스 할 수 없기 때문에 DMA 정리를 수행 할 수 없습니다. 간단한 해결책은 close() 함수에서 대기하는 것입니다. 는 (이것은 나의 이해하지만, 어쩌면 DMA 함수의 마지막 부분은 실행되지 않습니다?)
는 그것을 실제로 장치의 device_remove()
(일명 close()
) 함수에 종료 할 DMA를 위해 통곡하는 것이 좋습니다 운전사? 이 문제를 해결할 다른 방법이 있습니까?
나는 이것이 매우 건방진 것을 알고 있지만, 언제나 아니오라고 말할 수 있습니다! 이 드라이버의 일부 소스 코드를 얻을 수 있습니까? 부분적인 관심은 DMA 전송을 설정하는 것입니다 ...! 저예요, 건배. –
아니요. 불행히도 우리 둘 모두에게 독점 드라이버입니다. –