24

Linux カーネル 2.6

Linux を実行している開発ボードに接続された GPIO 経由でロードされる fpga があります。fpga は、pci-express バスを介してデータを送受信します。ただし、これは起動時に列挙されるため、リンクは検出されません (起動時に fpga がロードされないため)。

Linux で PCI-E バスの再列挙を強制するにはどうすればよいですか? 簡単なコマンドはありますか、それともカーネルを変更する必要がありますか? pcie デバイスをホットプラグする機能が必要です。

4

3 に答える 3

26

root として、次のコマンドを試してください。

echo "1" > /sys/bus/pci/rescan

詳細については、次のリンクを参照してください: http://www.kernel.org/doc/Documentation/ABI/testing/sysfs-bus-pci

于 2012-09-14T11:38:01.410 に答える
11

どのプラットフォームを使用しているのだろうか: x86 システムで機能するこれに対する回避策 (別名ハック) は、基本的に、FPGA が通常着陸するバス、デバイス、機能に PCI デバイスを静的に構成する BIOS を持たせることです。デバイスを列挙し、そのために PCI スペースを予約します (デバイスが実際には存在しない場合でも)。次に、デバイス ドライバーで、fpga がプログラムされた後に BAR と int ラインを手動でセットアップするなど、いくつかの追加作業を行う必要があります。もちろん、これには BIOS の変更が必要です。BIOS ベンダーと協力している場合は、BIOS ベンダーと契約してこの変更を行うことができますが、BIOS ベンダーと協力していない場合は、はるかに困難になります... また、覚えておいてください私は x86 で VxWorks に取り組んでおり、AMI にボード用のカスタム BIOS を作成してもらいました...

BIOS を持っていない場合は、ブートローダーでプログラミングすることを検討してください。すでにディスクから読み取る機能があり、GPIO 機能を追加することはおそらくそれほど難しくありません (jtag と GPIO を使用していると仮定しますか?)。実際、使用するブートローダーによっては、すでに GPIO を実行できる可能性があります。

これを行うためにカーネルを変更する際の問題は、PCI列挙の前にビットファイルを読み取ることができるスイートスポットを見つける必要があることです...たとえば、ディスクデバイスドライバーがPCI後に初期化される場合、明らかにいくつかのことを行う必要がありますPCI列挙の前にビットファイルを読み取るためだけにカーネルを根本的に変更すると、他の厄介な問題が発生する可能性があります...

すでに発見されている可能性があり、実際には開発時にのみ使用できるもう 1 つのオプション: システムの電源を入れ、fpga ボードをプログラムし、リセットを行います (たとえば、電源を入れ直さずに、今すぐ sudo を再起動します)。その構成を保持し、Linuxはそれを列挙する必要があります...

于 2012-09-14T10:38:03.773 に答える