13

ドライバー、ユーザーランドユーティリティ、またはカーネルに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、構成し、有効にする方法が必要です。

4

4 に答える 4

4

以下のコマンドは、ユーザーが完全なルート ハブを再スキャンするのに役立ちます。

echo "1" > /sys/class/pci_bus/0000\:00/rescan
于 2017-04-04T17:19:30.780 に答える
3

PCIスキャンをやり直す方法がわからない場合は、kexecを使用して再起動を高速化できます。まだ行っていない場合は、LKML でこれを尋ねることができます。

モジュールのアンロード/リロードは役に立ちませんよね?

于 2009-12-05T19:40:09.867 に答える
2

http://www.linuxjournal.com/article/5633は、 を使用して 2.4 カーネルで実行できるはずであることを示唆していますpcihpfs

それが機能しない場合、ドライバーがホットプラグをサポートしていない可能性がありますか?

于 2009-12-01T17:29:39.853 に答える
1

使用中に他の PCI デバイスのアドレスを再構成すると、システムがクラッシュする可能性があります。

より良い方法は、新しいカードを構成することです。カーネルが Cardus デバイスをサポートしている場合、カーネルは新しく挿入された PCI デバイス (Cardbus とは) を構成する方法を既に認識しています。カーネルにそれをさせる方法を理解する必要があるだけです...

カーネルモジュールがこれを行うことができるはずです。pci_bus_write_config_dword()組み込みの hotplug コードを取得できない場合でも、やフレンドへの呼び出しを使用して pci リソースを設定できるはずです。おそらくIRQルーティングの設定も必要です。

于 2009-12-10T15:02:24.773 に答える