0

OS の背後で実行されている UEFI ランタイム ドライバーで I/O デバイス (スーパー IO コントローラーなど) をエミュレートする方法はありますか?

4

1 に答える 1

1

特定の I/O 範囲をトラップして SMI を生成し、これらのアクセスをドライバーにルーティングする SMM ドライバーを作成する必要があります。トラップされた I/O 範囲に書き込まれた値は、ドライバーによって CPU 保存状態領域から取得され、エミュレートされたデバイスのステート マシンによって適切に処理されます。OS がトラップされた I/O 範囲から読み取る値は、x86 システムで値が返される CPU 保存状態の EAX レジスタの保存された状態を置き換えることによって、ドライバーによって返されます。

この手法は、8042 キーボード コントローラをエミュレートし、BIOS レベルで USB HID デバイスをサポートするために、レガシー BIOS で広く使用されていました (別名レガシー USB)。SMM は x86 システムでのみ使用可能であり、プラットフォームに大きく依存することに注意してください。つまり、あるプラットフォームでは動作するドライバが、他のプラットフォームでは動作しない場合があります。最新の UEFI 実装には適切なレベルの SMM 抽象化があり、SMM コードのスケーラビリティに役立ちますが、I/O トラップ機能はチップセットによって異なります。SMM ベースのエミュレーション機能は、AMD Geode プロセッサで極限まで活用され、SuperIO だけでなく、オーディオおよびビデオ コントローラに至るまで、ほとんどの PC 周辺機器をエミュレートしました。

于 2015-03-28T18:05:46.253 に答える