2009-12-01 3 views
12

私は、カーネルがPCIバスを見て、その初期化を完全に再実行するか、または初期化するように要求する、ドライバ、ユーザランドユーティリティ、またはシステムコールから作ることができるカーネルモード呼び出しを探しています特定のデバイス。具体的には、ブート後にバスに追加されたデバイスを認識し、そのアドレス空間、割り込み、その他の設定パラメータを設定するためのカーネルが必要であり、最後にデバイスを有効にしてドライバをロードできるようにしますドライバの負荷の一部として発生します)。Linuxカーネルに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デバイスを見つけるために、ブートアップ時にそれがないものは何でもするためにカーネルをお願いしたいと思います(私はカーネルの代わりに尋ねると、自分自身でPCIデバイスを見つけるために設定していますBIOSはこの情報を知っている必要はありません(私は願っています)。

私は、のように、プログラムした後、デバイスを表示することができると思っています(scanpci)。 /proc/pciに設定して有効にする方法が必要です。

+2

"姉妹"サイト:http://serverfault.com/に行き、そこに問い合わせてください。これはコーディング関連の問題のためのもので、正確な問題はより多くのシステム管理者に関連しているようですので、より速く/より良いものを手助けすることができます。 – Stan

答えて

2

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

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

3

PCIスキャンを再実行する方法がわからない場合は、kexecを使用して再起動を高速化できます。もしあなたがまだそれをしていなければ、LKMLでこれを尋ねることができます。

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

1

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

もっと良い方法は、新しいカードを設定することです。あなたのカーネルがCardusデバイスをサポートしているならば、それは新しく挿入されたPCIデバイス(これはCardBusと同じものです)の設定方法をすでに知っています。カーネルにそれをさせる方法を理解する必要があります...

カーネルモジュールでこれを行うことは可能です。ホットプラグコードを組み込むことができない場合でも、pci_bus_write_config_dword()とお友達の呼び出しを使用して、pciリソースを設定できる必要があります。 IRQルーティングの設定もあります。

2

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

echo "1" > /sys/class/pci_bus/0000\:00/rescan 
関連する問題