回答:
Libusbは、cursesがテキスト端末とやり取りするライブラリと同じようにUSBデバイスとやり取りするライブラリです。ALSA(より正確には、そのlibasoundコンポーネント)は、audiデバイスなどとやり取りするライブラリです。カーネルは、ハードウェアのやり取りを処理します。それは提供してデバイスファイルをアプリケーションがを通じて、ハードウェアとの対話を開くことができread
、write
およびシステムコール。ioctl
ioctl
システムコールです。これにより、アプリケーション(ユーザーレベルのコード)がカーネルによって処理される要求を発行できます。
Libusbを使用すると、アプリケーションは、デバイスにレポートする何かがあるときに実行されるコールバック関数を登録できます。ここでは、内部の情報フローの大まかな概要を示します。
read
、write
またはioctl
デバイス・ファイルのシステムコールとリターンにそのシステムコールが発生します。libusb
にアクセスできますか?
/dev/ttyS*
ます。USBも同じ原理ですが、より高速で複雑です。
Linuxは2つのリングを使用します。リング0はカーネルレベルと呼ばれ、リング3はユーザーレベルと呼ばれます。ユーザーからカーネルへの接続は、(既に述べたように)syscallsを介して行われます。それらの間には、ユーザーランドから見たライブラリがあります。したがって、安定性、セキュリティ、同期、保存間隔などの理由から、カーネルへの最も低レベルのアクセスはライブラリに実装されています。カーネルドライバーは、ユーザーランドへのさまざまなインターフェイスを提供します:(ioctl、sysfs、ソケット、キャラクターデバイス、ブロックデバイスなど)ユーザー空間インターフェイス。そのため、必要に応じて、ライブラリを省略してカーネルドライバーへのアクセスを実装するか、静的リンクライブラリを使用してバイナリをはるかに簡単にコンパイルできます。
良い出発点はlibusbソースを読むことです、それらは十分に文書化されています。
それが使用するシステムコール(2)カーネルにより調製し、デバイスファイルを(/dev/bus/usb/*
)