あなたの質問は、「デバイスコントローラー内で物理ハードウェアを制御する」ことにより、「デバイスドライバー」を排除することを提案しているようです。これの前提は次のようです。
カーネルは、デバイス ドライバーを介して物理ハードウェアを制御します。
デバイス ドライバーのその説明は、開発者の観点からではなく、エンド ユーザーの理解のために私が考えているものと似ています。エンドユーザーはデバイスを認識しており、その抽象化を採用して各デバイスポートの特定の制御ビットまでそのデバイスを制御できるのはデバイスドライバーです。
ただし、デバイス ドライバーは、次のようなありふれたハウスキーピング タスクを担当します。
- デバイスのステータスと可用性を維持する。
- 操作のためのデバイスの構成。
- データフローの管理、データ転送のセットアップ/破棄、ユーザー空間とカーネル空間の間でのデータのコピー。
- 割り込みと例外の処理。
これらのタスクは、デバイス ドライバーに不可欠です。これらのタスクは、カーネル ドライバーの範囲外で周辺機器に転送することはできません。
場合によっては、デバイス ドライバーがデバイスを完全に制御するのではなく、デバイスの管理のみを試みることがあります (たとえば、パケット フラッド中の NIC ドライバー)。
「このすべての機能がデバイスコントローラー自体の内部に保持されている」場合でも、デバイスドライバーを排除できる可能性はまったくありません。また、デバイス ドライバーから周辺機器に発行される制御ディレクティブ/コマンドも存在します。
問題のハードウェア デバイスは、自律型ロボット デバイスではなく、コンピューター周辺機器である必要があります。デバイスは、コンピューターで動作するように設計されている必要があります。プロセッサとデバイスの間にあるインターフェイスは、タスクに適している必要があります。ペリフェラルがより「インテリジェント」になれば、おそらく CPU の負荷が軽減され、高レベルのコマンド インターフェイスが低レベルのサブ操作ディレクティブを置き換えることができます。ただし、「すべて」ではなく、「一部」の機能のみを周辺機器に転送できます。