7

Linux 用の PCIe ドライバーを作成していますが、現在 DMA を使用していません。PCIe デバイスがユーザー空間から有効になったら、読み書きする方法を知る必要があります。

ドライバーでは、probe() で基本を行います。

pci_enable_device();
pci_request_regions();
pci_iomap();

しかし、ユーザー空間からこのメモリにアクセスして読み書きするにはどうすればよいでしょうか? PCIe ドライバーにファイル操作を追加しますか? pci_iomap からのメモリは、ユーザー空間コードが呼び出すことができる場所に表示されますか?

open('mapped memory location');
mmap(...);

もしそうなら、場所は何ですか?

注: PCIe デバイスは、オーディオ、イーサネットなどの Linux サブシステムには接続されません。

4

2 に答える 2

4

カーネル空間からユーザー空間にメモリをエクスポートして割り込みを取得するだけの場合は、UIO ドライバーについて考えてください。

これにより、すべてのアクセスは /dev/uioX ファイルを介して行われます。その上で mmap() を実行してメモリをエクスポートし、(ブロッキング読み取りで) 読み取りして割り込みを「キャッチ」することができます。

UIO は PCIe に完全に適合しており、そのためのドライバーがカーネルに既に存在します。

于 2016-02-09T08:31:06.800 に答える