11.07.2015 Views

블록 디바이스 드라이버 예제 블록 디바이스 드라이버

블록 디바이스 드라이버 예제 블록 디바이스 드라이버

블록 디바이스 드라이버 예제 블록 디바이스 드라이버

SHOW MORE
SHOW LESS
  • No tags were found...

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

DMA561• claim_dma_lock• 다른 디바이스 드라이버와의 경쟁 방지• unsigned long claim_ dma_ lock(void);• disable_dma• DMA 동작 금지• void disable_dma(unsigned dma(unsigned int dmanr);• clear_dma_ff• DMA의 플립플롭(flip-flop) 클리어• 플립플롭 :16비트 데이터 전송을 8비트 버스에서 처리할 때 사용• void clear_dma_ff(unsigned int dmanr);• set_dma_mode• 전송 방향 설정• void set_dma_mode(unsigned int dmanr, char mode);• mode type• DMA_MODE_READ : I/O 하드웨어에서 메모리로 데이터 전송• DMA_MODE_WRITE : 메모리에서 I/O 하드웨어로 데이터 전송http://eoslab.ssu.ac.krLinux Device DriverDMA562• set_dma_addr• DMA에 사용되는 DMA 버퍼 주소 지정• void set_ dma_ addr(unsigned int dmanr, unsigned int a);• DMA에 지정되는 주소는 버스 주소여야 하므로 __get_dma_pages와 같은 함수를 사용하여 반환된 주소인 경우 virt_to_bus() 함수를 이용하여버스 주소로 변환• set_dma_count• DMA를 이용해 전송되는 데이터의 크기 지정• void set_dma_count(unsigned int dmanr, unsigned int count);• 전송 단위는 바이트• DMA 채널이 16비트 채널인 경우 반드시 짝수• enable_dma• DMAC 활성화• void enable_dma(unsigned int dmanr);http://eoslab.ssu.ac.krLinux Device Driver

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!