問題タブ [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.
linux - LinuxカーネルにPCI初期化コードを再実行するように依頼する方法はありますか?
ドライバー、ユーザーランドユーティリティ、またはカーネルにPCIバスを調べて初期化を完全に再実行するか、特定のシステムコールを初期化するように要求するシステムコールのいずれかを探しています。端末。具体的には、起動後にバスに追加されたデバイスをカーネルが認識し、そのアドレススペース、割り込み、およびその他の構成パラメーターを構成し、最後にデバイスを有効にして、そのドライバーをロードできるようにする必要があります(これがすべての場合を除く)ドライバロードの一部として発生します)。
私はこのために2.4.xシリーズのカーネルに固執しており、現在2.4.20で作業していますが、問題があれば2.4.37に移行する予定です。ディストリビューションは、RAMディスクで実行されているRed Hat 7.3を取り除いたものですが、これを機能させるために必要なツールを追加できます(2.4シリーズでうまく機能する限り)。
何らかの背景が私がやろうとしていることを明確にするのに役立つ場合:コールドブートから、Linuxで一度GPIOを使用してFPGAをプログラムします。FPGAの一部は、プログラムされると、単純なPCIデバイスを実装します。現在、FPGAをプログラミングした後、システムを再起動すると、Linuxは起動後にデバイスを認識し、そのドライバーをロードします。
再起動が必要になる代わりに、起動時にPCIデバイスを見つけるためにカーネルに何でもするように依頼したいと思います(BIOSにその情報を要求する代わりに、カーネルがPCIデバイスを独自に検索するように構成されています。したがって、BIOSはこのデバイスについて知る必要はありません(私は願っています))。
Linuxは、プログラムされた後、再起動する前にデバイスを認識できると思います。scanpci
これは、プログラムした後、デバイスが表示されるためlspci -H 1
です。私はそれを取得し/proc/pci
、構成し、有効にする方法が必要です。
linux-kernel - Linux デバイス ドライバーは、DMA が device_remove() 関数で終了するのを待つことができますか?
PCI デバイス用の Linux デバイス ドライバーを作成しました。このデバイスは DMA 操作を実行します。DMA 操作の実行中にプログラムがクラッシュすると、問題が発生します。
実際、クラッシュすると、device_remove()
関数はシステムによって呼び出されます (呼び出されたかのようclose()
に)。この関数は、PCI デバイスが使用するメモリ領域をクリーンアップし、割り当てられたメモリを正しく解放します。つまり、通常の状況では正しく機能します。
ただし、DMA が実行されている場合、実際に終了すると、解放されたデバイス データにアクセスできなくなるため、DMA のクリーンアップを実行できなくなります。簡単な解決策は、close() 関数で待機することです。(これは私の理解ですが、DMA関数の最後の部分が実行されることはありませんか?)
DMA がデバイス ドライバのdevice_remove()
(別名) 関数で実際に終了するのを嘆くのは良い考えですか? close()
この問題に対処する他の手段はありますか?
linux - ユーザー空間プログラムからの PCI デバイスへのアクセス
pcie を介してプロセッサとのインターフェイスとなるデバイスがあります。既存の pci ファイル操作を使用してドライバーを作成しました。
今私の問題は、ユーザー空間プログラムからどのようにアクセスするのですか? PCI ファイル操作には IOCTL サポートがないため、他の char デバイスとは異なり、ioctl 呼び出しを行うことができません。pci_config_read_byte などの関数は、カーネル空間 (linux/pci.h に含まれる) 用であるため使用できません。
pci - どの PCI トポロジーでも同じバス上に 2 つの同一のデバイスが存在できますか?
PCI 規格に従って、デバイスはベンダー ID、デバイス ID、およびバス番号に基づいて識別されます。同じタイプのデバイスはすべて、同一のベンダー ID とデバイス ID を持っています。このようなデバイスを 2 つ同じバス (バス 0 など) に配置した場合、PCI ソフトウェア サブシステムは 2 つをどのように区別しますか?
PCI ではそのようなケースが不可能である場合、PCI Express Switch を介してそのようなことが可能になるのでしょうか?
sockets - ソケット コードと Linux PCI ドライバーとのインターフェイス
PCI に接続された 2 つのデバイスがあります。また、汎用ソケット コードを使用する両方のデバイスのコードもあります。(デバイスは元々 MII/Ethernet で接続されていました。)
ここで、2 つのデバイス間でパケットをやり取りするための PCI デバイス ドライバーを作成する必要があります。
ソケット コードによって開かれたファイル記述子にアクセスするにはどうすればよいですか? これは、キャラクターデバイスファイルにアクセスすることと同じですか?
PCI ドライバーは、何らかの方法でコード内の read() および write() からパケットをキャプチャする必要があります。
ありがとう!
linux-kernel - LinuxでPCIスロットを完全に無効にすることはできますか?
多くの皆さんと同じように、私はたまにゲームをするのが好きです。私は日常業務(プログラミング、論文の執筆、ブラウジングなど)にLinuxを使用しているため、ゲーム中にWindowsのグラフィックカード機能を利用するだけです。
最近、エネルギー料金が非常に高くなっていることに気づきました。コンピューターのエネルギー消費量を減らしたいと思います。私のグラフィックカードは110ワットのアイドルを使用しますが、ローエンドのRadeonHD5xxxは5ワットしか使用しません。私のコンピューターは週に40時間電源が入っていると思いますが、そのうち3時間しかゲームをしていません。これは、私が年間202 kWhを浪費することを意味します(!)。
DVIスプリッターとローエンドのRadeonカードを購入するだけで、LinuxでハイエンドカードのPCIスロットを無効にできると思いました。少しグーグルで検索しましたが、どの検索語を使うべきかわからないので、役に立つものは何も見つかりませんでした。
長すぎて読まなかった:Linuxを使用してPCIスロットの電力を削減することは可能ですか?
x86 - FPGAデバイスへのリンクが失われます
PCIeFPGAデバイスのデバイスドライバーでやや奇妙な問題をデバッグしようとしています。デバイスドライバーとFPGAイメージの両方が社内で開発されています。
ターゲットシステムはx86で、OSはfedora 9です。PCIeカードがあり、FPGAが唯一のPCIeスロットに接続されています。FPGAイメージは、EEPROMからの起動後にロードされます。
ドライバは、/ sys / bus / pci / devices / 0000:02:00.0 /リソースファイル(0000:02:00.0はFPGAを含むカードのPCIスロット)を使用して構成するように記述されています。 FPGA。
システムが起動すると(または休止状態から復帰すると)、FPGAリンクの継ぎ目が失われ、リソースファイルが失われます。FPGAが正しく起動すると、すべてが正常に動作します(リソースファイルがあります)。システムが休止状態に入ると、FPGAの電源がオフになります。休止状態から戻ると、ドライバの初期化を開始する前にFPGAの電源がオンになります。
私は次のことを疑っています:
- ファームウェアのバグ-PCIプラグインに関連するもの?
- カーネルのバグ-他のPCIカードが正常に認識されるため、最も可能性は低いです。
このPCIカードだけが問題を引き起こします
そして質問は:
- 誰かが同様の問題を抱えていましたか?
- 他に何が間違っている可能性がありますか?
- この問題をデバッグする方法に関する提案はありますか?
編集
私はこのバグを見つけました。これは私が見ている問題と非常によく似ています。
cuda - PCIインターフェースを備えたGPU上のnVidiaCUDA
(PCIeではなく)PCIインターフェースを使用する有効なGPUでCUDAを使用した経験はありますか?それは機能しますか?
hardware - PC での initrd の後に Linux ブートがハングアップする原因となるカスタム ハードウェア
PCIe 2.0 を使用するカスタム ハードウェアを作成しました。このハードウェアは、CentOS Linux 5.4 を搭載した HP DL360 G7 サーバーで動作します。そのため、HP サーバーでは、Linux は正常にコールド ブートし、カードを認識し、ドライバーとインターフェイスすることができます。ただし、カードを通常の Dell T3500 PC に接続しようとすると、Linux を起動できません。クラッシュ、デバッグ、またはエラー メッセージなしで initrd の後にハングします。私の質問は、この問題のデバッグに役立つツールや設定は何ですか? ブート プロセスが initrd を通過できない理由を知りたいです。
vxworks - VxWorks 653のPCIデバイスでメモリを読み取る/書き込むにはどうすればよいですか?
私はVxWorks653を使用しており、ターゲットはwrSbc7457PowerPCです。
wrSbc7457にメザニンカードがあり、そのメザニンカードのメモリを読み書きしようとしています。
VxWorksに精通している方のためusrAppInit()
に、ModuleOSの機能には次のものがあります。
OSブートイメージがロードされると、ターゲットは次のように出力します。
私の質問は、メザニンカードのメモリをホストのアドレス空間にマッピングする方法と、そのメザニンカードのメモリを書き込む/読み取る方法です。