問題タブ [pci]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
3281 参照

c - Windows で PCI 領域のサイズを取得するにはどうすればよいですか?

PCI バスをスキャンして、特定のベンダーから特定のデバイスに関する情報を取得する必要がありました。私の目標は、i2c 転送を行い、さまざまなセンサーからの情報を表示するために、そのカードの PCI メモリをユーザー空間にマップするために、AMD グラフィックス カードの PCI リージョン サイズを見つけることです。

PCI バスをスキャンするために、約 1 年前に Windows x64 用の pciutils 3.1.7 をダウンロードしてコンパイルしました。おそらくDirectIOを使用しています。

これは私のコードです。

私のprintf行でわかるように、いくつかのデータを印刷しようとしましたが、正常に印刷device_idされましたが、このデバイスのPCI領域サイズを含む必要base_addrsizeあるのは常に0です.ループからのサイクルの少なくとも1つは、サイズ > 0。

私のコードは、同じコードを使用する Linux アプリケーションに基づいていますが、Linux に付属の pci.h ヘッダーを使用しています (pciutils には明らかに同じ API があります)。どうやら、Windows(私の場合はWindows 7 x64)はこの情報を表示しないか、少なくともPCIUtilsに公開されていません。

この情報をどのように入手することを提案しますか? Windows 用の pciutils に代わるものがあり、この情報を提供する場合は、それらへのリンクを喜んで取得します。

編集:私はまだ解決策を見つけていません。私の問題に対する解決策があり、32ビットWindowsでも機能する場合は、深く感謝します.

0 投票する
1 に答える
824 参照

windows-xp - PCI デバイス ドライバーのアンインストール

c++ コードを使用して、コンピューターから pci デバイス ドライバーをアンインストールしたいと考えています。デバイスマネージャーでデバイスを右クリックして「アンインストール」をクリックするのと同じアクションを探しています。という機能を見つけましたDiUninstallDeviceが、Windows 7 以降のバージョンの Windows でのみ使用できます。Windows XPを使用しています。これを行うことは可能ですか?

0 投票する
1 に答える
5850 参照

linux - pci デバイスに BAR アドレスが割り当てられていないのはなぜですか?

問題の説明は次の
とおりです。Linux の起動後、コマンド「lspci -v」を実行すると、pci デバイスは検出されますが、デバイスにアドレスが割り当てられていないことがわかります。Linux の起動メッセージをさらに確認すると、"bridge window mem ..." のようなメッセージが多数見つかります。これらのメッセージが正常なのか、実際にアドレス割り当ての失敗の兆候なのかはわかりません。

私が実行しているプロセッサは、powerpc アーキテクチャである Freescale p2010 です。ブートローダは自分たちで設計したもので、pci に関連するものには何も触れていません。そのため、Linux カーネルに完全に依存して、完全な pci 列挙を独自に行います。

Linux カーネルの pci 列挙を開始する前に行った唯一のことは、pci スペースの使用のために LAW ウィンドウ (具体的には LAW4) を構成することです。もちろん、ハードウェア構成に応じて dts ファイルを適切に変更します。これらの準備がすべて完了したら、Linux カーネルはすべての pci を機能させることができるはずだと考えましたが、そうではありませんでした。

それで、誰かがこの問題を解決する方法を知っていますか、または同様の問題に遭遇したことがあり、それに光を当てることができますか? どうもありがとうございました!

詳細は以下に添付:
========カーネル ブート引数===============

========dtsでのPCIセクションの設定=======

==============「lspci -v」の結果===============

=======================Linuxカーネル起動メッセージ====================

0 投票する
1 に答える
25509 参照

linux - バグ: でカーネル ページング要求を処理できません

単純なテスト デバイス用の PCI ドライバーを作成しています。

ハードウェアは lspci で正しく認識されます (ドライバーvabsが登録されていることがわかります):

ドライバーと PCI サブシステムの初期化と初期化解除は正常に機能します。デバイス番号を取得し、udev がデバイス ファイルを作成します。

デバイス ファイルから読み取ると、次のエラー メッセージが表示されます。

初期化で PCI リソースを正常に要求しました。これは、PCI のベースアドレス 0 である memstart0 に対して 00000000f0000000 を返します。

次のコードでこの memio アドレスから読み取ろうとすると、前述のエラーが発生します。

memcpy_fromio、ioread32、ダイレクト ポインター アクセスなどの他のアクセス関数も試しましたが、結果は同じでした。

ハードウェアは Windows マシンで動作します。唯一の注目すべき違いは、Windows ではベース アドレス 0 が 00000000f d 000000 として予約されているのに対し、Linux ではベース アドレス 0 が 00000000f 0 000000 として予約されていることです。

これは、公立学校での非営利の教育目的のためのものです。ご協力いただきありがとうございます!

0 投票する
2 に答える
1619 参照

windows - 32 ビット PCI デバイス用の Windows 64 ビット デバイス ドライバーの作成

数年前に書いたデバイス ドライバを 32 ビットから 64 ビットに移植することを評価しています。物理デバイスは 32 ビット PCI カードです。つまり、デバイスは 32 ビットですが、Win7x64 からアクセスする必要があります。デバイスは、Windows の世界にいくつかのレジスタを提示し、ドライバーが割り当てたメモリのチャンクに大量のバス マスター データを転送します。

Microsoft のドキュメントで、ドライバーが 64 ビット DMA をサポートしているかどうかを通知できると読みました。そうでない場合、DMA はダブル バッファリングされています。ただし、これが事実かどうかはわかりません。私のドライバーは完全な 64 ビットのドライバーである可能性があるため、プロセッサーのアドレス空間で 64 ビットのアドレスをサポートできますが、実際の物理デバイスはそれをサポートしません。実際、デバイス BAR は 4 GB 未満でマップする必要があり、デバイスは 4 GB 未満でバス マスターを実行するために PC RAM アドレスを取得する必要があります。これは、ドライバーが常にダブル バッファリングを行うということですか? これはパフォーマンスが非常に重要なプロセスであり、ダブル バッファリングによってシステム全体が機能しなくなる可能性があります。

もちろん、新しい 64 ビット PCI (または PCI-E) ボードを設計することは論外です。

このプロセスに関するリソースを提供してくれる人はいますか (MS ページは別として)。

どうもありがとう!

0 投票する
2 に答える
2640 参照

linux - Linuxは特定の物理アドレスにメモリを割り当てます

PCIエンドポイントドライバーをテストしています。PCIRootPort側からPCIエンドポイント側に簡単にコピーしたいと思います。PCIエンドポイント側では、PCIアドレスからCPU物理アドレスへのアドレス変換があります。変換でCPU物理アドレスを構成して、特定のDRAM領域にマップすることができます。問題は、RootPort側からの書き込みが実際に機能することを確認するために、その特定のCPU物理アドレスにメモリバッファをどのように割り当てることができるかということです。

任意の推奨事項をいただければ幸いです。どうもありがとう!

0 投票する
2 に答える
2014 参照

linux - PCIe 割り込みルーティング

現在、ザイリンクス PFGA に PCIE エンドポイント デバイスを実装していますが、割り込みに関して問題があります。

ドライバーの初期化時に、割り込みを IRQ 32 にマップします。

ただし、割り込みが発生すると、

irq は別のピン IRQ #16 にルーティングされているようです。そして、PCIe msi割り込みを使用しました。この問題の原因は何ですか?

0 投票する
1 に答える
1764 参照

c# - Windows XP で 500 MB の DMA バッファを割り当てる方法

PC には PCI カードが接続されており、そのための GUI があります。PCI カードから読み書きするために、RAM に約 400 ~ 600 MB の物理メモリの DMA バッファを割り当てたいと考えています (FPGA は PCI カードで読み書き操作を行います)。JUNGO Windows PCI ドライバーを使用しています。Contiguous または scatter/Gather メソッドを介して DMA バッファを割り当てるために、JUNGO が提供する WDC_DMAContigBufLock メソッドがあります。RAM に最大 63MB のバッファを作成でき、63MB を超えるバッファは作成できませんでした。OSはWindows XP 32bitでRAMサイズは4GB(比較的3GBは無料)。

アプリケーション (GUI) は C# .Net で記述されており、400 ~ 600MB の DMA バッファを作成しようとするのは、このアプリケーションを使用することです。400 - 600MB のバッファ サイズを作成する原因となる/停止する可能性のある解決策/アイデアを探しています。

ありがとう

0 投票する
3 に答える
379 参照

c# - PCI バスに接続されたデバイスにスレッドを使用して非同期にアクセスする必要がありますか?

PCI バス経由で PC に接続されているハードウェアがあります。デバイス ドライバーの .NET ラッパーを介してハードウェアにアクセスしています。

デバイスが PCI に関してどのように動作するかについての仕様はありません。それが私の最初の質問につながります。

1) PCI 経由で接続されたデバイスは、特定の速度でデータを配信することが保証されていますか?

2) デバイスと通信するとき、UI の応答性を維持したいと考えています。(スレッドプール) スレッドでデバイスとの通信を開始するのは良い考えですか、それとも PCI バスへのアクセス速度に比べて、これに関連するオーバーヘッドが大きすぎますか?

編集:
質問が書き直されました。長い仕事の一日の終わりを反映しすぎました。
スレッドがスレッド プール スレッドであるという要件が削除されました。

0 投票する
0 に答える
417 参照

c - 私のプロセスはPCIメモリホールにマッピングされています、なぜですか?

カーネルを変更し、自分でページテーブルを歩いて、1つのプロセスのコードセクションの物理アドレスを取得しました。(current->mm)->start_codeパラメータとして関数に渡しました。上記の関数のコードを以下に示します。

ただし、非常に頻繁に物理アドレスがPCIメモリホールにあるようです。ユーザーアプリケーションからシステムコールとして関数を呼び出しました。私の関数は次のようにアドレスを出力できることに注意してください。

それから私はによってiomem$ cat /proc/iomemを開きました。

私は見ることができました(一部を表示):

efxxxxxxアドレスが完全にPCIメモリホールにあることがわかります。しかし、それはシステムRAMにあるはずですよね?

これにより、別の属性を持つメモリホールにあるため、そのページのページ属性を予約できなくなりました。とても変です。

私のシステムでは、8GBのメモリを搭載したInteli5Coreマシンで32ビットの12.04Ubuntuカーネルを使用しています。