問題タブ [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.
linux-device-driver - PCIe and flow control credits
Is it usually a software, i.e. device driver, responsibility to set up FC credits on PCIe bus? Where could I get familiar with relevant linux API?
linux-kernel - D3スリープ状態からPCIバスをウェイクアップできません
私のボード (x86_64、Android Lollipop、カーネル: 3.14) では、「pci バス」が D3 スリープ状態になり、D0 状態に設定して起動しようとすると、次のメッセージが表示されて失敗します。
エラー ログ: 電源状態の変更が拒否されました。現在 D3 です。
pci アーキテクチャを調べた後、D3hot から初期化された D0 に pci を起動できないことがわかりました。D3hot -> D0Uninitialized -> D0Initialized のようにする必要があります。
しかし、私はそれを行う方法を理解できません。適切な解決策を見つけるのを手伝ってください
さらにデバッグした後、pci デバイス (つまり、D3 から D0) の電源状態の移行は、pci ドライバー (つまり、pcieport) 内で要求されたときに正常に機能していることがわかりましたが、上を向いている iwlwifi ドライバーを介して pci デバイスをウェイクアップしようとしています。 pciチップにウェイクリクエストを書き込むことができないため、言及された問題。
どんな助けや手がかりも大歓迎です。
linux-kernel - cdev とそれに関連するファイル操作はどのように機能しますか?
実際にPCIドライバーに取り組んでいます。同じデバイス ID とベンダー ID を持つ 2 つの PCIe カードがあります。違いを生むために、これら 2 枚のカードに 2 つの異なる MINOR 番号を割り当てます。
私がこれを行っているのは、インターネットで見つけたすべてのドキュメントが、1 つのデバイスに対して 1 つの MINOR 番号を示唆しているためです。
しかし、fops はすべてのデバイスにバンドルされているため、fops_open を実行したときに OS がどのカードがターゲットになっているかを知る方法がわかりません。
あなたの助けが必要です、皆さん、Thx。
PS: fops = ファイル操作
windows - Win32 API を使用した PCI 構成スペースへのアクセス
PCI デバイス (つまり、バス、デバイス、関数) のアドレスが与えられた場合、ユーザー空間で Win32 API 呼び出しを使用して、そのデバイスの構成空間 (ベンダー ID、デバイス ID など) をプログラムで読み取るにはどうすればよいでしょうか?
Linux では、/sys/bus/pci/devices//config ファイルを開き、正しいオフセットから読み取ります。
pci-e - PCIe ピアツーピア通信
ルート コンプレックスが PCIe に関与することなく、2 つの独立したデバイス (エンドポイント) が相互に通信できますか (PCIe 仕様によると、そうですが、どのように) ?
メモリおよび IO トランザクションの場合、1 つのエンドポイントが他のエンドポイントのアドレスをどのように知ることができますか?
パケットは、2 つのダウンストリーム ポート間でスイッチによってどのようにルーティングされますか?
感謝と敬意
hardware - PCI ROM はどのようにシャドーイングされますか?
ROM イメージを RAM の 000C0000h から 000DFFFFh にコピーする必要があります。クラス コードがこれが VGA デバイス ROM であることを示している場合、そのコードをメモリの 000C0000h から始まる場所にコピーする必要があります。
1: ROM が 128KB を超える PCI ハングリー ハングリー カバ カードを使用している場合はどうすればよいですか?
2: ROM が 64KB の通常の PCI デバイスを 4 つ持っている場合はどうなりますか? それらはこのメモリ範囲に順番にロードされますか? もしそうなら(私はそれを疑っていますが)initとbootフェーズの間でコードイメージをどのように保存していますか?
3: BIOS が非準拠になることを決定し、別のメモリ ロケーションを指定した場合はどうなりますか? とにかくこの範囲を使用することが重要なのはなぜですか?
4: 通常のケースは VGA インターフェイスとどう違うのですか? 違いを生むのは限界だけですか?
io - PCI アドレス マッピングについて
私は PC アーキテクチャを勉強していますが、PCI アドレスの基礎を理解していないと感じています。
PCI には、メモリ、入出力ポート、構成の 3 つのアドレス空間があります。CPU がさまざまなコマンドを使用してメモリとポートを区別できることは知っていますが、PCI ではどうなりますか? バスにはいくつかのコマンドがあります (これらのスペースへの読み取り/書き込み、割り込み処理など)。メモリ空間を読み取るときは物理RAMアドレスにアドレス指定すると思いましたが、いくつかのマニュアルを読んだ後、内部デバイスのメモリにアドレス指定しているようです。
- メモリ マッピングを使用する理由 一部のプログラムが一部の PCI デバイスにマップされた RAM アドレスに書き込むと、実際にはデバイス メモリに書き込むということですか? 標準 IO ポート書き込みを使用しないのはなぜですか?
- 必要に応じて実メモリにアクセスする方法は? たとえば、デバイスが RAM にデータを保存したい場合、この要求は「メモリ空間」アクセスとどのように区別されるのでしょうか?
linux - Linux カーネル 4.7 (Arch ARM64) が PCI BAR0 の /sys/bus/pci/devices/*/ に「resource0」ファイルを作成しない
ユーザー空間から PCI BAR0 を介して FPGA メモリにアクセスする必要があるプロジェクトに取り組んでいます。
以前のカーネルで行っていたのは、 /sys/bus/pci/devices/my_device/にあるresource0という名前のファイルを開き、FPGA メモリをユーザー空間に公開するmmap()関数を使用することでした。
残念ながら、カーネル バージョン 4.7 (アーキテクチャ ARM64) では、何らかの理由で resource0 ファイルが作成されていないようです。
lspciを使用すると、システムが FPGA の PCI BAR を認識していることがわかります。さらに、/sys/bus/pci/devices/my_device/ディレクトリを検索すると、 resourceという名前のファイルがあり、特に PCI BAR のアドレスが書き込まれていることがわかります。
似たような状況に詳しい人はいますか?Linuxにresource0ファイルを作成させるにはどうすればよいですか?