5

256 バイトの TLP ペイロード サイズを必要とする PCIe ボードを使用しています。それをサポートする CPU (Core i7-3930K) と Intel マザーボード、BIOS で TLP ペイロード サイズ設定を提供しない DX79SR を入手しました。デフォルトでは最大 128 バイトの TLP ペイロードがあり、BIOS なしで 256 バイトに変更する必要があります。Windows でこの値を表示する PCIUtils ソフトウェアを見つけましたが、これは多目的ポータブル ソフトウェアであり、複雑すぎて必要なものを見つけることができません。

Intel のドキュメントには、CPU I/O レジスタに設定する必要がある値が記載されており、I/O の場所は C8Fh と CFCh であると述べている別のドキュメントがあります。

これは私が立ち往生している場所です。これらのレジスタを設定するために設定したい場合、どこから始めればよいかわかりません。私は経験豊富な Windows S/W 開発者ですが、ドライバーを扱ったことはありません。この PCIe ボードのドライバのソース コードを変更、ビルド、実行できるソース コードはありますが、Intel CPU の I/O レジスタにデータを書き込む方法がわかりません。ただし、_outp() 関数はユーザー モードでは機能しないことがわかりました。

実行可能ファイル(より簡単)またはドライバーのいずれかから開始する場所を教えてください。私が間違っていなければ、I/O ポート C8Fh と CFCh から読み書きするだけでよいと思います。現在は Windows XP 32 ビットです。Win7 x64 は後で、Visual Studio 2010 C++ または WDK になります。

4

1 に答える 1

2

基本的に、あなたがしなければならないことはout、それぞれinx86asm命令を使用することです。重要なのは、プロテクトモードでは、これら2つの命令がロックされているため、ユーザーランドモードでは使用できないということです。

開始するのに最適な場所は、WDK(Windowsドライバーキット)を入手してサンプルを確認することです(これにはソフトウェアドライバーのみが必要です)。PCIボードのドライバーがカーネルモードドライバーである場合は、DriverEntry関数に呼び出しを追加するだけで済みます。

それが不可能な場合は、独自のソフトウェアカーネルモードドライバーをビルドする必要があります。これは、ドライバービルドしてデプロイする方法を説明した簡単なサンプルコードです。カーネルモードでいくつかの命令を実行したいだけなので、実際のコードは簡単なはずです。

于 2012-12-03T06:51:45.927 に答える