
ファームウェア バイナリ ファイルは、バイナリ ファイルがそのデバイス用であるかのように、デバイスによってどのように識別されますか。この場合のカーネルの役割は何ですか。
答え1
ハードウェア デバイスはファームウェア ファイルの名前を指定しません。デバイス ドライバーがそれを行います。
一般的に言えば、カーネルは標準化された識別子 (PCI/PCIe または USB バスのベンダー/製品 ID、または DMI 情報など) に基づいてハードウェアを検出するか、デバイスが存在するはずであることを既に認識しているか (プラットフォーム デバイス。ARM などの一部のアーキテクチャのデバイス ツリー情報に基づく)、管理者またはシステム起動スクリプトがカーネルに特定のドライバー (完全に自動検出できない古い ISA アーキテクチャに基づく一部の x86 レガシー デバイスで引き続き使用されている) をロードするように明示的に指示する場合があります。
次に、ドライバーは、ハードウェア ベンダーによって文書化されているか、リバース エンジニアリングされた方法を使用して、デバイスが存在することを確認し、デバイスの状態を突き止めようとします。デバイスにファームウェアが必要な場合は、ドライバーは適切なファームウェア ファイルをロードするために必要なカーネル呼び出しを含めます。ファームウェア データがメモリにロードされると、ドライバーは特定のハードウェアに適した方法を使用して、それをハードウェア デバイスに送信します。
ハードウェア デバイス自体は、ファームウェア データが正しいことを検証する場合としない場合があります。最も単純なハードウェア設計では、ドライバーによって提供されるファームウェアが正しいことを単純に信頼し、正しくない場合はハングする可能性があります。その場合、デバイスを再び使用可能にするには、デバイス固有のリセット シーケンスや、電源を切ったりプラグを抜いたりする必要がある可能性があります。その反対の極端なケースでは、ファームウェアが暗号署名されていたり、暗号化されていたりして、適切なキーと検証/復号化機能がデバイスのハードウェアに埋め込まれている場合があります。
ファームウェアの検証/復号化ロジックをハードウェア自体に追加すると、ハードウェア デバイスの価格と複雑さが増すため、通常、メーカーは、非標準のファームウェアの使用によってデバイス自体が動作しなくなるだけでなく、より重大な問題が発生する可能性がある場合にのみこれを行います。たとえば、WiFi デバイスのファームウェアは、使用される周波数と電力レベルを規制する場合があるため、不適切なファームウェアを使用すると、デバイスが禁止された周波数で送信し、航空管制レーダー (民間または軍事) に干渉する可能性があります。これは非常に深刻な結果を招く可能性があるため、ハードウェア メーカーは、適切な規制に準拠していることが認定されたファームウェア バージョンのみを使用できるようにするインセンティブを持っています。