0

デバイスを接続せずにLinuxデバイスドライバーをインストールする方法はありますか?

ドライバーコードに完全にアクセスできます。Linuxカーネル2.6.35を使用しています。

私はinsmodとmodprobeを試しましたが無駄になりました。私はカスタムドライバーに取り組んでいます(私はそれを書きませんでした)が、ドキュメントはありません。

4

2 に答える 2

2

デバイスのインスタンスがシステムに存在しない場合、適切に作成されたデバイス ドライバーはインストールされません (ホットプラグ可能なデバイスは例外である可能性があります)。Unix の一部のバージョンでは、ドライバーのprobe()関数がデバイスが存在するかどうかをチェックします。Linux では、プローブ機能が _init() ルーチンに組み込まれることがよくあります。ハードウェアが検出されない場合、ドライバーはそれ自体を登録せず、モジュールの場合はアンロードされる状態を返す必要があります。

ドライバー コードをメモリに格納する必要がある場合は、それをロード可能なモジュールとしてビルドするのではなく、Linux ドライバーをメモリ常駐カーネルの一部として選択します。ドライバをローダブル モジュールとしてビルドするには、menuconfigプログラムで「M」を入力します。ドライバをカーネルに組み込むには、スペース バーを使用してドライバを選択します。この違いを示すために 、選択には*ではなくアスタリスクが付けられます。M

(このmenuconfigダイアログのテキストはKconfigファイルから取得されます。この構成ダイアログの生成物は、オブジェクト ファイルのコンパイルを制御するために s.configで使用される構成シンボルを含むMakefileファイルです。前の例では、このドライバーが Linux カーネルに組み込まれていることを前提としています。ソース コード ツリー. ソース コード ファイルしかない場合は、このドライバがソース ツリーのどこに収まるかを決定する必要があります. その後、手動で a を編集しMakefileて、その適切なサブディレクトリでドライバを無条件にコンパイルできる場合がありますまたは、このドライバーの構成変数を使用してKconfigおよびファイルをカスタマイズします)。Makefile

ドライバーのすべてのコードを常駐させるには、いくつかの小さなコード変更を行う必要があります。通常、初期化コードとデータは、「通常の」テキストとデータとは別のテキストとデータ セクションに配置され、カーネルの起動が完了すると、このメモリ セクションは解放されます。ドライバー コードとデータが解放されないようにするには、宣言内 のセクション指定子__initとセクション指定子を削除します。__exit

もちろん、このデバイス ドライバーを組み込むには、新しいカーネル バイナリをビルドする必要があります。.configドライバーを追加する前に、以前のビルドのファイルを使用するようにしてください。

于 2012-10-05T21:12:15.897 に答える