2014-03-05 3 views
1

하드웨어 디버깅을 쉽게하기 위해 내 명령에서 DMA 작업을 쉽게 트리거하는 방법을 찾아야합니다. Linux에있는 기존 PCI 장치 (예 : 사운드 카드 또는 넷 카드)의 DMA read을 레지스터에 직접 작성하여 초기화 할 수 있습니까? 또는 사용자 정의 드라이버를 작성하고 insmod으로 호출해야합니까?PCI 장치가 DMA 작업을 시작하는 방법?

답변

3

DMA 작업을 시작하는 표준 방법은 없습니다. 일반적으로 호스트의 DMA 버퍼를 준비하고 장치의 DMA 레지스터를 설정하고 DMA 주소, 크기 등을로드해야합니다.

그러나 PCI 장치 용 DMA 레지스터에 대한 단일 표준은 없습니다 . PCI 장치의 사양 문서를 찾아야합니다. 이 사양에서는 DMA 장 ("대상 액세스"와 반대되는 PCI "마스터 액세스"라고도 함)를 찾습니다.

여기에 찾을 수 있습니다 : - 분산 형 수집 또는 연속 DMA가 지원되는 경우. - DMA 레지스터를 설정하는 방법 중 하나는 일반적으로 DMA CSR - "DMA 명령/상태 레지스터"라고합니다. - 장치가 복잡한 DMA 레이아웃 (하나 이상의 링 버퍼, DMA 설명자 체인 등)을 지원하는 경우

그러나 많은 PCI 장치가 0 크기 DMA를 지원한다는 것이 좋습니다. 어떤 메모리 액세스도하지 않지만 "DMA 완료"인터럽트 만 트리거합니다. 이것은 당신을 위해 시작할 수있는 매우 편리한 장소가 될 수 있습니다.

+0

예, PCI 드라이버를 작성하는 것은 불가능합니다. 하지만 문제는 실제로 추가 PCI 장치가 없다는 것입니다. 기존 PCI 카드를 사용할 수 있는지 여부를 모르겠습니다. 나는 원래 드라이버와'insmod' 광산을'rmmod' 할 수 있습니까? – qweruiop

+0

로드 가능한 모듈, 즉 커널의 일부로 컴파일되지 않고 독립 실행 형로드 가능 모듈 인 경우 다른 모듈을 rmmod 할 수 있습니다. 'lsmod'에 모듈이 있으면 언로드 할 수 있습니다. –