ファームウェアとドライバーを別々にする必要があるのはなぜですか?

ファームウェアとドライバーを別々にする必要があるのはなぜですか?

デバイス ファームウェアとドライバーの違いを見ると、技術的に区別する必要がある理由がよくわかりません。ファームウェアは簡単に変更できないこと、ファームウェアが低レベルのデバイス操作を実行すること、ドライバーがホスト OS と通信するためにあることは理解しています。

問題は、なぜこれら 2 つのレイヤーを 1 つにまとめることができないのかということです。OS との通信方法を認識し、すべての要求を低レベルのデバイス操作に直接変換するドライバーがあれば十分です。これは開発を容易にするためですか (つまり、このソフトウェアを開発するために必要な開発者の知識を減らすため)? フラッシュ メモリに存在しないソフトウェアを使用してデバイスと通信することはできないのですか?

答え1

いいえ、両方のタイプのソフトウェアは通常、異なるタイプのマシンで実行されます。

ファームウェアは周辺機器のプロセッサ/コントローラ上で実行され、ドライバーはマシンの CPU 上で実行されます。通常、これらは異なるタイプです。

理論上は、できた周辺機器のビット バンギングをすべてマシンの CPU に実行させます。これは初期のコンピューターで実行されていました。ただし、これには高いコストがかかります。

多くの場合、外部プロトコルには厳しいタイミング制限があります(ネットワークカードやCRTディスプレイなど)。CPUはたくさん適切なタイミングで作業を完了するためには、割り込みが必要です。そのため、有名な Sinclair ZX-81 では、CPU がハードワークしているときにディスプレイがオフになり、画面をリフレッシュする時間がありませんでした :)

そのため、最近では周辺機器の作業を分離しようとしています。ネットワークがいっぱいになるとCPUに通知されます。パケット到着し、ビットを変更するためにワイヤをポーリングする必要がありません。

答え2

ファームウェアは、デバイスのハードウェアを直接使用してデバイス上で実行されます。ファームウェアは OS の API であると見なすこともできます。コンピューターがどの OS を実行しているかは関係ありません。x 命令を受信すると、ファームウェアは y を実行し、値 z を返す場合があります。デバイスには、命令の実行速度を制御する独自のクロックと独自のメモリがあり、デバイスのプロセッサはコンピューターと異なる場合があります (たとえば、コンピューターは amd64 ですが、デバイスには arm64 プロセッサが搭載されている場合があります)。ファームウェアは CPU または RAM と直接通信せず、バスから命令を受け取り、データをバスに戻します。

ドライバーは、コンピューター上で OS カーネル レベルまたは OS ユーザー レベルで実行されます。ドライバーは OS に依存しており、機能するには OS の要件を満たす必要があります。ドライバーは通常、コンピューターの CPU や RAM を必要とする作業を処理し、命令の処理が完了すると、命令はファームウェアを介してデバイスに渡されます。

答え3

実際のところ、それらを分離する必要はありません。

多くの場合、中央 CPU からハードウェアを直接制御することから、ファームウェアで可能な限り実装することまで、あらゆる範囲を網羅できます。

以下は、ファームウェアとドライバーのバランスに関する設計上の考慮事項の不完全なリストです。

  1. 標準ドライバーまたはインターフェースを使用しますか?

もちろん、NAND セマンティクスをドライバーに公開し、コントローラー チップを保存する USB フラッシュ メモリ スティックを作成できます。そして、その特殊なドライバーを何らかの方法で配布します (Windows、Linux、MAC、Konica プリンターなど)。一方、ユーザーと OS 開発者は、USB スティックが標準のブロック デバイス ドライバーで動作することを期待しています。非 HID インターフェイスの光学式マウス? これもあまり良いアイデアではありません。

  1. 機能の一部に特許/NDA/企業秘密の負担がありますか?

ドライバーは(コンパイルされていても)簡単にリバースエンジニアリングや変更が可能ですが、ファームウェアの場合はそうではありません。これはビデオチップの場合によくあることです。

  1. 規制遵守ですか?

多くの無線関連のファームウェア (Wi-Fi、セル、Bluetooth) は、周波数スペクトル規制への準拠を強制します。

  1. コスト?設計費と製造費の両方に関して、通常最適なポイントがあります。

などなど…

さらに、ROM メモリがないデバイスもかなりあるため、ファームウェアは実際にはドライバーの一部であり、電源を入れるたびにデバイスにアップロードされます。

関連情報