問題タブ [pci-bus]
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.
drivers - VxWorksでPCI-to-PCIブリッジデバイスを構成するにはどうすればよいですか?
私は、pciAutoConfig()を使用してPCIバスを構成するVxWorksのボードサポートパッケージ(BSP)を使用しています。イーサネットコントローラカードをバスに追加すると、pci表示ルーチンにカードが表示されません。
バスアナライザを使用して、イーサネットアダプタが実際にはPCI-to-PCIブリッジで構成されており、ブリッジの背後に2つのイーサネットコントローラがあることを発見しました。BSPは、イーサネットコントローラに含まれているPCI-to-PCIブリッジを適切に処理していないようです。
私の質問は、PCI-to-PCIブリッジを構成するために、どのライブラリと構成を確認する必要があるかということです。これらの呼び出しは、既存のpciAutoConfig()呼び出しがあるsysHwInit()で行われると思います。
pciAutoCfgCtl()には、バスを構成するためのユーザー定義関数を指すPCI_BRIDGE_PRE_CONFIG_FUNC_SETパラメーターがあります。これが唯一の方法ですか?または、VxWorksライブラリにこれを実行できるものがありますか?
c++ - PCIe バスで使用中の帯域幅を読み取るにはどうすればよいですか?
起動時に大量のデータをグラフィックス カードにプッシュするストリーミング メディア アプリケーションに取り組んでいます。データがプッシュされている時点では、CPU はほとんど動作していません。使用率がほぼ 0% でアイドル状態になります。
お客様のハードウェアの最小推奨仕様に到達できるように、どのマシンが初期データのプッシュに苦労しているか、どのマシンが対応できるかを監視したいと考えています。
PCIe 1.1 x16 スロットを搭載した PC では、グラフィックス カードにプッシュされる初期データに苦労することがわかりました。
私の開発用 PC には PCIe 2.0 x16 スロットがあり、グラフィックス カードに最初にプッシュされる大量のデータに問題なく対処できます。
私の主張を証明 (または反証) するには、数字が必要です。
私が望むのは、次のことを決定できるようにすることです。
グラフィックス カードが搭載されているスロットのタイプはどれですか? そのスロットの速度は?Gfx カード名 Gfx カード ドライバのバージョン
しかし、最も重要なことは、PCIe スロットを介したデータ フローです。たとえば、PCIe バスがデータで限界に達していることを示すことができれば、それをボトルネックとして指摘できます。
システムメモリ速度もここでの要因であることを知っています。たとえば、データはRAMからPCIeバスを介してグラフィックスカードに転送されます。システムメモリ速度も決定する方法はありますか?
最後に、アンマネージ C++ で記述しているため、.NET ライブラリへのアクセスはオプションではありません。
winapi - PCIアダプターの物理的な場所を特定する
複数のPCIアダプターを使用できるWindowsアプリケーションがあります。これらのアダプタはすべて、他のハードウェアまたはケーブルへの外部物理接続を備えています。当社のソフトウェアは、各カードの物理的な接続が何に接続されているかを認識するように構成されています。複数のサウンド入力と出力をサポートするオーディオソフトウェアを想像してみてください。オーディオソフトウェアは、アダプター1のマイクがリードシンガーであり、アダプター2のマイクがギターであることを認識するように構成されています。
たまたま、このソフトウェアは、ExpressCardやPCカードアダプタを搭載したラップトップで実行されることがよくあります。そのため、ユーザーは定期的にアダプターを取り外すことができます。さらに、お客様は1台のラップトップに収まるよりもはるかに多くのアダプターを持っている可能性があります。したがって、誰かがアダプタA(PCカード)とB(ExpressCard)をラップトップにインストールし、ソフトウェアを構成していると想像できます。彼らは現在、歌手のマイクがPCカードアダプターに接続され、ギターのマイクがExpressCardアダプターに接続されていることを期待しています。その後、オフィスに戻り、アダプターを取り出して、他のすべてのアダプターと一緒に山に置きます。翌日、ソフトウェアを使用するときに、アダプターC(PCカード)とD(ExpressCard)を入手します。彼らがこれらのカードをシステムに接続すると、
この機能がないと、ユーザーはカードを変更するたびにソフトウェアを再構成する必要がありますが、これは特にユーザーフレンドリーではありません。
WindowsのハードウェアアダプタのPCIチェーン内の場所を特定する方法はありますか?この目標を達成する他の方法はありますか?
これをWindowsXP以降で動作させたいのですが。ハードウェアドライバを制御するため、必要に応じてそこで変更を加えることができます。
pci-bus - Linux の起動後に接続された PCIe デバイスを見つけて有効にする
PCIe 経由で Linux PC ホストに接続された組み込みシステムを開発しています。現在、実装とデバッグの段階で、デバイスの電源をオフにしてからオンにしたり、別のボードを試したりする必要があることがよくあります。これにより、Intel PC で実行されている Linux (Ubuntu または Debian) で問題が発生します。
通常、テスト対象のデバイスを挿入する必要がある場合、PC は起動されます。予想どおり、Linux はデバイスを検出せず、ソフトウェア アプリはデバイスと通信できません。「lspci -v」を実行すると、デバイスがリストされません。私たちのアプリケーションは libpci (-lpci でビルドされたプログラム) を使用して、デバイスによって公開された単一の BAR にアクセスします。私たちの回避策は、PC を再起動してからデバイスを表示して有効にすることです。
PC を頻繁に (1 日に数十回) 再起動する必要がないソリューションを探しています。デバイスを接続してからコードを実行して、Linux カーネルがデバイスの BAR を検出して有効にすることはできませんか? PCI サポート ライブラリとサンプルの使用に関するドキュメントを見つけたいと思っていましたが、見つけることができませんでした。任意のポインタをいただければ幸いです。おそらく、コードで実行できる pci_enable_device() や pci_find_device() などの呼び出しがありますか? わからないけど。カーネル モジュールとユーザー コードを記述して、これを機能させることができます。つまり、ルート アクセス権を持っているかどうかに制限はありません。
アドバイスとご指摘ありがとうございます、Guraaf
hardware - PCI 構成スペースを使用して PCIe デバイスを識別します
システムにインストールされている PCI デバイスのリストから、PCIe デバイスを特定する必要があります。これまでのところ、機能のリストを反復処理して、デバイスに拡張キャップ構造 (キャップ ID 0x10 に対応) があるかどうかを確認してきました。また、デバイスに拡張キャップ構造がある場合、それは確かに PCIe デバイスです。ただし、この方法では一部のデバイスを識別できないようです。誰かがより良い方法を知っているかどうか疑問に思っていました。
ありがとう。
video-streaming - ビデオカードを非表示にする方法のコード例はありますか?
ビデオカードを非表示にする方法のコード例はありますか?私の理解によると、これはカーネルレベルで実行する必要があります。私がやろうとしているのは次のことです。PCI-Expressx8/x8/ x8/x8を使用する4つの物理GPUがあります。代わりに、x16/x16の構成で2枚の物理カードを持つことができます。私がやりたいのは、プログラムで4枚のカードの構成を2枚のカードに切り替え、x8からx16を使用してx8モードに戻すことです。あなたの助けに大いに感謝します。
ローマ人
pci - バス上のPCIデバイスは他のデバイスデータをリッスンできますか?
スパイデバイス、送信側PCIデバイス、受信側デバイス(PCIからCPUへのブリッジなど)の3つのデバイスを備えたPCIバス(PCI-PCIブリッジなし)がある場合はどうなりますか?
送信者は受信者へのデータ転送を開始します。スパイデバイスの送信機の状態はZ(バスから切断されている)です。スパイデバイスはバスをリッスンし、送信者から送信されたすべてのデータをコピーできますか?
更新:PCIアダプター付きの特別なFPGAを購入してプログラムする準備ができました。
c++ - mmap を使用してユーザーランドで PCI 経由で FPGA と通信する C++ アプリ
まず、私は Linux プログラミングに慣れていないので、これが意味をなさない場合、または間違ったツリーを吠えている場合は謝罪し、正しい方向に向けてください。
ユーザーランドで、pci バスを介して FPGA と通信する cpp アプリを作成しようとしています。
これまでに作成したコードは、ディレクトリを列挙し/sys/bus/pci/devices
てデバイスとベンダー ファイルをチェックし、正しいファイルを見つけます。
デバイスを見つけたら、書き込む必要があるマップされた領域が resource[n] ファイルで何らかの形で表されていることがわかりますが、それらを使用して値を読み書きする方法がわかりません。
PCIデバイスのBAR1と通信したいことがわかっている別のOS用に書かれたコードから、これを行う(試みた)方法はmmapを使用することです(これは正しい方法ですか?)。/sys/bus/pci/devices/[device_addr]/resource1
最初にwithへのファイルハンドルを取得し、次のようO_RDWR
に呼び出します。mmap
fd
open からのファイル記述子はどこにありますか。
私はこれを正しい方法で行っていますか、それともより良い関数/呼び出しを使用していますか? これを行うためのカーネル モジュールを作成できることはわかっていますが、まだカーネル モジュールのプログラミングに取り掛かる必要はありません。
それが役立つ場合は、しばらくの間コードを貼り付けることができますが、コードの批評を実際に行っているわけではなく、それを行うための最良の方法に関するいくつかのポインターです。
不足している詳細がある場合は、お問い合わせください。
ubuntu 11.04(ライブUSBで実行)に基づく2.6 Linuxカーネルを使用しています。ハードウェアはx86ベースです。
ありがとう
更新:コードについてさらにグーグルで試行錯誤した後、私はそれを機能させました。
私が従った手順:
- を使用してデバイスを識別します
/sys/bus/pci/devices/[device]/[vendor|device]
- Parse
/sys/bus/pci/devices/[device]/resource
、各行の最初の列はマップされた領域の開始アドレスで、2 番目の列は終了アドレスです。BAR1
2行目に必要な値が含まれるようにしたかったのです。 open("/dev/mem", O_RDWR)
ファイル記述子 fd を取得する- 上記のように呼び出します
mmap
が、開始アドレスをオフセット (最後の引数) として渡し、開始アドレスと終了アドレスを使用してマップされた領域のサイズを取得します (2 番目の引数)。
pci - PCI デバイスの IO アドレスを変更する
新しい (ページにアラインされた) アドレスを BAR0/1 に書き込むことにより、PCI デバイスの IO アドレスを変更したいと考えています。BIOS機能を使用してそれを行ったとき、新しいアドレスのPCIデバイスにアクセスできませんでした。
それを機能させるために他に何かする必要がありますか?アセンブラをリアルモードで使用しています。
cpu-architecture - メモリバスとアドレスバスの違い
コンピュータアーキテクチャのメモリバスとアドレスバスの違いを簡単に指摘できますか?また、メモリバスとは、データバスを参照していることを意味しますか?