1

/dev/snd/pcmC0D0p の下に audio-driver をラップする Loadable Kernel Module (LKM) を作成しました。

したがって、私は に移動pcmC0D0ppcmC0D0p_bak、ドライバーの名前を に変更し、などpcmC0D0pのすべてのコマンドをパススルーしました (ただし、MMAPed データを転送する前に他のことを行います)。MMAPIOCTL

これは悪いことですが (Linux プログラミングの最初のステップです)、うまくいきました。

今日、私は に関する記事を読みましUserspace device drivers

今、私は疑問に思っています:これは本当に可能でしょうか? MMAP や IOCTL などのメソッドを実装したユーザー空間コードで「ドライバー」を作成し、通常のカーネル デバイス (/dev/snd/pcmC0D0p) の代わりに配置しますか?

そうじゃないですよね?

可能であれば、簡単な例、参照はありますか? なんでも大歓迎です!

4

1 に答える 1

0

ユーザー空間のデバイス ドライバーを作成することは可能ですが、あなたが考えている方法とはまったく異なります。

例としてuio_pci_genericモジュールがあります。これは、PCI デバイスの ID で (/proc を介して) プログラムでき、 を介してデバイスのメモリを利用できるようにしますmmap。呼び出しをブロックすることで、割り込みを受け取ることができreadます。

これにより、ドライバーのふりをすることはできず、ドライバーのようなアクション (ハードウェア デバイスとの直接通信、割り込みの受信など) を実行することのみが許可されることに注意してください。ユーザー空間プログラムは、カーネル モジュールの助けがなければ、ioctl への呼び出しを処理したり、キャラクター デバイスとして自身を公開したりすることはできません。

于 2013-02-21T20:52:14.183 に答える