web-dev-qa-db-ja.com

OS /ハードウェア通信/リバースエンジニアリングドライバーのキャプチャ

私の主な質問は、オープンソースコミュニティがWindowsドライバー(ビデオカードなど)をリバースエンジニアリングして、Linuxでそれらを書き直す方法です。

私はEEを卒業しているので、マイクロプロセッサの設計など、組み込みシステム用のアセンブリ、Cのコースを受講し、組み込みLinuxに取り組んできました。しかし、ハードウェアメーカーのAPIを使用せずにLinux用のドライバーがどのように記述されているかを理解しようとすると、何かが足りないように感じます。

私の質問につながるのは、いくつかの新しいラップトップには、デュアルビデオカードが付属しているということです。統合されたものと個別のものの両方。 Windowsで2つを切り替えることができるドライバーソフトウェアはありますが、私が知る限り、オープンソースドライバーもプロプライエタリドライバーもありません。明らかに、私は「どうやってそのmsyelfを書くのか」のような愚かなことを求めているのではありません。しかし、Linuxでハードウェアサポートを取得することのプロセスをいつも疑問に思っていたことに気づきました。

4
Falmarri

もちろん、多くの可能性があります。

たとえば、USBデバイスの場合、ドライバーをサポートするシステムでデバイス/コンピューター間のUSBトラフィックを監視できます(ネットワークのtcpdumpに類似)。たとえば、Windowsの場合、いくつかのUSBモニターツールを使用できます(たとえば、IIRC usbsnoop)。

USBスキャナーの場合、たとえばデフォルト設定でトレースを生成してから、1つの設定を変更し、別のトレースを生成し、それらを比較して、何が変更されたかを把握します。

これと同様に、SCSI、Firewireなどのデバイスのデータをトレースできます。

次に、プロプライエタリドライバーを逆アセンブル/デバッグしてみることができます(たとえば、 IDA pro を使用)。

または、仮想マシンまたはエミュレーター(qemuなど)でWindowsを実行し、ブレークポイントを使用して、ドライバー呼び出しの前後のハードウェア状態を検査することもできます。これと同様に、ドライバーが書き込み/読み取りを行うレジスターなどを観察できます。

3
maxschlepzig