2013-09-26 4 views
0

사용자 공간에서 실행되는 PCI 장치 드라이버를 쓰려고합니다. 내 아이디어가 아니라 고객이 원하는 것. Target은 임베디드 Linux 보드로 단일 사용자 이상을 가질 수 없습니다. 저는 숙련 된 C 프로그래머이고 Linux를 알고 있습니다. Linux 드라이버 개발에 익숙하지 않습니다.Linux 사용자 공간 PCI 드라이버

정말이 장치 드라이버입니까 아니면 라이브러리입니까? 일반적인 호출 pci_register_driver 등을 사용해야합니까, 아니면 fopen을 사용하여 장치에 액세스 할 수 있습니까? mmap 및 ioperm을 사용하여 액세스 할 수 있습니까?

인터럽트는 MSI 모델을 사용하여 수행됩니다. 또한 DMA 전송을 처리해야합니다. 기기가 사용자에게 많은 양의 데이터를 스트리밍합니다.

이 주제에 대한 정보는 많지 않습니다. LDD3은 몇 페이지 밖에 쓰지 않으며, 여기에서 찾을 수있는 것은 없습니다.

미리 감사드립니다.

답변

1

PCI 카드를 처리하는 드라이버가 없으면 포트 액세스 만 필요한 경우 ioperm (또는 주소에 따라 iopl)을 사용하여 액세스 할 수 있습니다.

DMA 모드와 인터럽트를 사용하는 것은 커널 모드 드라이버 없이는 불가능합니다.

googleing 사용자 모드 드라이버 (DMA 및 인터럽트 포함) 작성을 허용하는 "일반 커널 모드 드라이버"와 같은 텍스트를 찾았습니다.

PCI 카드에 액세스하기위한 커널 모드 드라이버가 Linux 보드에 설치되어 있는지 고객에게 물어보십시오.

+0

답변 해 주셔서 감사합니다. 나는 사용자 프로그램에 링크 될 수있는 libpci-dev 패키지를 발견했으며, 일부 제한된 기능을 제공한다. 하지만 당신이 말했듯이, DMA와 인터럽트 처리가 빠져 있습니다. dev pci 라이브러리를 사용하면 pci config 레지스터를 읽고 쓸 수 있습니다. –

0

고성능 사용자 공간 PCI 드라이버를 vfio라고하는 적절한 방법이 있습니다. 문서는 많지 않지만 커널 문서 http://lxr.free-electrons.com/source/Documentation/vfio.txt과 헤더 파일 /usr/include/linux.vfio.h를 참조하십시오. Linux 3.6부터 사용할 수 있습니다.