2

Linux システムの PCIe に FPGA カードを接続しています。FPGA を再プログラムするecho 1 > /sys/bus/pci/rescanと、カードが に表示されlspciます。

ただし、BAR リージョンにはメモリが割り当てられていません。

Region 0: Memory at <unassigned> (64-bit, prefetchable) [disabled] [size=32M]
Region 2: Memory at <unassigned> (64-bit, prefetchable) [disabled] [size=64M]

pci=Linux ブート コマンド ラインでさまざまなフラグを試しましたが、あまり効果がありませんでした。

私の疑いでは、BAR 領域が大きすぎるため、ブート時に存在しなかったため、Linux がアドレス空間で適切に整列された範囲を見つけて BAR をマップできないのではないかと考えています。

これは正しい理論ですか?デバイス用にスペースを予約するように Linux に指示することはできますか?

4

3 に答える 3

1

これは Linux でも見られます。http://forums.xilinx.com/t5/PCI-Express/Incorrect-assignment-of-64bit-BAR-addresses/td-p/347577のザイリンクス フォーラムに回答がありますが、メモリ スペースは小さいです。割り当てられるまでサイズを小さくしてみてください。

ほとんどの場合、BIOS はこのような大きなメモリ スペース BAR を許可していません。実際、メモリ空間に 512MB 以上がマッピングされた実際の PCIe デバイスは見たことがありません。なぜこれをしたいのですか?その理由があると思われる場合は、アプリケーションがこの量のメモリを常に同時にアクセスできる必要があるかどうか、またはページング メカニズムでこれを処理できるかどうかをもう一度確認してください。

あなたの疑いは近いですが、領域を割り当てているのは BIOS であり、Linux ではありません。私が見たように、ルートポートにはメモリの固定チャンクが与えられています。そのチャンクで空き容量を超えて要求している場合は、割り当てられていません。

于 2014-09-15T21:23:10.130 に答える
0

Tom Keddie によると、Linux カーネルではなく BIOS がデバイスのアドレス領域を割り当てます。デバイスをマップするために、Linux システムを再起動する必要がある場合があることがわかりました。FPGA の構成方法によっては、再起動時に構成がクリアされないように、FPGA に外部電源を供給する必要がある場合があります。

于 2014-09-22T15:17:26.867 に答える