2017-10-15 13 views
0

私はウェブカメラを持っていて、私のLinux OSにこのウェブカメラのデバイスドライバをインストールしたところ、デバイスドライバ用のデバイスファイルが作成されるようになりました(たとえば、/dev/video0)。Linuxのデバイスドライバにはデバイスファイルを使用してのみアクセスできますか?

今、このウェブカメラにアクセスしたいと思うプログラムをCに作成したいとします。私のプログラムがデバイスファイル(/dev/video0)を使用してデバイスドライバにアクセスする場合、私のプログラムはウェブカメラのデバイスドライバにアクセスできますか?それとも別の方法ですか?

+0

デバイスクラスによって異なります。 –

+1

ほとんどの実用的な目的の答えは「はい」です。 –

+0

ほとんどのウェブカメラドライバは、[Video4Linux API](https://linuxtv.org/downloads/v4l-dvb-apis/uapi/v4l/open.html)と互換性があります。デバイスドライバ( 'tty'、ディスクなど) – myaut

答えて

1

一般的な質問をしてから具体的な例を挙げました。私は両方に取り組もうとします。

ドライバをロードすると、ドライバとの通信方法は、このドライバで定義されている方法で行われます。通常、これはドライバ用に作成された/devデバイスを介して行われます。それが事実なら、それはそれと通信する唯一の方法です。

これは普遍的ではありません。多くのドライバには、/sys sysfs擬似ファイルシステムの下にエントリがあり、そこからいくつかの側面を変更することができます。実際には、のみが/sys fsでアクセス可能なクラスの全クラスがあります。 GPIOデバイスと有線デバイスは、/sys/class/gpioなどのパスにアクセスしてオンとオフを切り替えることができます。

もう1つのオプションは、推奨されていませんが、時には使用されることがありますが、/proc疑似ファイルシステムを使用することです。ここでも、通信方法を定義するのはドライバーの責任です。ユーザーは、ドライバが定義したプロトコルに従わなければなりません。

また、一部のドライバにはファイルシステムの存在が全くありません。最も明白な標準的な例は、ネットワークインターフェイスです。それらと通信する唯一の方法は、ネットワーキングシステムコールによるものです。

あなたが提供した特定の例では、/dev/video0と表示されるビデオカメラについて話しました。このようなカメラは、通常、Video4Linux(またはv4l)カメラであり、それらはキャラクタデバイスを介してアクセスされます。

このように、カメラと通信するためのプロトコルには、人生を楽にするラッパーがあるかもしれません。実際のデバイスを開く場合は、それと複雑なハンドシェイクを実装する必要があります。代わりに、v4lライブラリーを使用してアクセスの詳細をラップすることができます。

間違いをしないでください。あなたはまだ/devのキャラクターデバイスと話しています。それは、それがあなたのコードではなく、図書館のものであるということだけです。

関連する問題