2

PCIe 拡張スロットを介してマシンに接続された FPGA ボード用のドライバーを開発していますが、PC の前にボードの電源が入っていれば、すべてがうまく機能します。ただし、最初にコンピューターを予約してから FPGA ボードを予約すると、デバイスが認識されてモジュールがロードされるというかなり異常な動作が発生します (syslog で呼び出された「init」関数が表示されます)。呼び出されることはありません。

これは無効な BAR0 が原因だと思います。dmesgボードの電源を入れたときの出力:

[   71.287587] pci 0000:3b:00.0: [0ae5:0001] type 00 class 0x000000
[   71.287613] pci 0000:3b:00.0: reg 0x10: [mem 0x00000000-0x0000ffff]
[   71.287821] pci 0000:3b:00.0: System wakeup disabled by ACPI
[   71.328537] my_driver:
[   71.328537] ****************************************************************
[   71.328542] my_driver: init debug=2

その最初の reg は 0xb4000000-0xb400ffff のようなものである必要がありますが、代わりに 0 になっています。

このブロックを割り当てるために必要な追加の手順はありますか? または、これを行う必要があることをカーネルに示すにはどうすればよいですか?

4

3 に答える 3

2

pci_assign_resource解決策は、 ( http://lxr.free-electrons.com/source/drivers/pci/setup-res.c#L283 )への手動呼び出しでした。

これを直前に呼び出すpci_enable_deviceと、BIOS ではなく OS が必要な BAR を割り当て、すべてが機能するようになりました。

PCI バスの再スキャンを手動でトリガーする必要があります ( echo 1 > /sys/bus/pci/rescan)。

于 2014-09-06T02:28:32.110 に答える