4

ラップトップの PCIe 拡張スロットを介して接続された PCI デバイス用の Linux デバイス ドライバーの開発を始めています。

起動時には、すべてが美しく機能します。ただし、基本的な Hotplug サポートをオンラインで取得しようとしています。カードを取り出すと、( でdmesg) 適切な remove stuff が呼び出されていることがわかります。ただし、カードを再挿入しても何も起こりません。モジュールを手動で取り外してからカードを挿入すると (または起動後にカードを挿入すると)、モジュールinitが呼び出されていることがわかりますが、probe. lspciまた、デバイスは出力に表示されません。

ただし、出力にecho 1 > /sys/bus/pci/rescanは表示されlspciますが、モジュールはエラーでロードに失敗します ( pci_enable_device failed with code -22)。

これを診断し始める場所はありますか?実行に失敗したこと.probeは、私を本当に困惑させていることです。

これはここに接続されている FPGA ボードであるため、デバイス自体に問題がある可能性がありますが、それでもプローブが実行され、後で奇妙なエラーで失敗すると予想されます。

4

1 に答える 1

3

デバイスが lspci に表示されない場合、カーネル デバイス ツリーにリストされるため、ドライバーの .probe 関数が呼び出される可能性はありません。

pci バスの再スキャンを実行して lspci で認識された場合、それはデバイスがアクセス可能であることを意味しません。実際、 (ここで、BB:DD は lspci によって報告されたデバイス バス ID とデバイス ID です。多くのレジスタ (特に BAR) で 0xFF を取得することを期待しています。これが失敗lspci -vv -s BB:DDの理由になると思います)。pci_enable_device.

実行中にビットファイルをリロードすると、FPGA デバイスで同様の問題が発生します。問題の考えられる原因の 1 つは、コンフィギュレーション スペース レジスタがリセットされていることです。ボードを (root として) 削除する前に、構成スペースを節約することを試みることができます。

cp /sys/bus/pci/devices/0000\:BB\:DD.0/config ~/config.save

それを復元するには:

cp ~/config.save /sys/bus/pci/devices/0000\:BB\:DD.0/config

この方法は一部のハードウェアでは機能しましたが、他の (新しいハードウェア) では機能しませんでした。

于 2014-06-04T08:10:57.480 に答える