優れたドライバーは、ハードウェアの機能をカプセル化し、OS /アプリケーションがこれらを自然な方法で利用できるようにします。
これをどのように行うのが最善かは、ターゲットとするオペレーティングシステムと、ドライバーのハードウェアの種類に大きく依存します。
私の経験はすべてLinuxと小さなカスタムリアルタイムOSenです。
Linuxの場合、Linuxデバイスドライバーを読むことをお勧めします。Linuxドライバーのさまざまなフレーバーと、オペレーティングシステムが提供する抽象化の概要を説明しています。
データが連続して読み取られるシリアルポートなどのデバイスは、通常、読み取り用のアプリケーションのユーザー空間にデバイスノードを持つキャラクターデバイスドライバーによって処理されます。cat
これらから読むことができます。
フラッシュストレージやハードディスクなどのランダムアクセスデバイスは、ブロックデバイスによって処理されます。dd
これらにアクセスできます。良い例として、Linux MTDシステムをご覧ください。
ハードウェアを低レベルで操作するドライバーは、ほぼ確実にカーネルスペースに実装する必要があります。ランタイムのロード可能なカーネルモジュールを作成するか、Linuxカーネルに静的にコードを配置することを選択できます。
USBのような既存の汎用ドライバーの上に構築されるドライバーは、ユーザースペースに書き込まれる場合があります。たとえば、libusbを使用します。