Linux / Unixコマンド insmod 実行中のカーネルにロード可能なモジュールをインストールします。insmod カーネルのエクスポートされたシンボルテーブルからすべてのシンボルを解決することによって、実行中のカーネルにモジュールをリンクしようとします。
モジュールファイル名がディレクトリや拡張子なしで指定されている場合、insmod いくつかの一般的なデフォルトディレクトリでモジュールを検索します。環境変数MODPATH このデフォルトを無効にすることができます。モジュール構成ファイル/etc/modules.conf それが定義されているパスをオーバーライドしますMODPATH.
環境変数MODULECONF デフォルトから別の設定ファイルを選択するために使用することもできます/etc/modules.conf (または/etc/conf.modules (廃止予定))。この環境変数は、上のすべての定義を上書きします。
環境変数UNAME_MACHINE が設定されている場合、modutilsはuname()システムコールのマシンフィールドの代わりにその値を使用します。これは主に、32ビットのユーザー空間で64ビットのモジュールをコンパイルする場合、またはその逆の場合に使用します。UNAME_MACHINE モジュールのタイプに変換する。現在のmodutilsはモジュールの完全なクロスビルドモードをサポートしていませんが、ホストアーキテクチャの32ビットと64ビットのバージョンを選択することに制限されています。
オプション
-e persist_name , - ペルシスト= persist_name
このモジュールのインスタンス化がアンロードされたときに、モジュールの永続データが読み込まれてから読み込まれる場所を指定します。モジュールに永続データがない場合、このオプションは暗黙のうちに無視されます。永続的なデータは、insmod このオプションが存在する場合、デフォルトでinsmod 永続データを処理しません。
省略形として、-e "" (空の文字列)は次のように解釈されます。insmod の値としてpersistdir で定義されているmodules.conf、その後に見つかったモジュール検索パスに関連するモジュールのファイル名、後に続く ".gz"、 ".o"または ".mod"を引いたものです。もしmodules.conf "persistdir ="(すなわちpersistdir 空のフィールドです)、この省略形は暗黙のうちに無視されます。 (見るmodules.conf (5).)
-f, - 力
実行中のカーネルのバージョンとモジュールがコンパイルされたカーネルのバージョンが一致しなくても、モジュールをロードしようとします。これは、カーネルのバージョンチェックをオーバーライドするだけであり、シンボル名のチェックには影響しません。モジュール内のシンボル名がカーネルと一致しない場合、強制する方法はありませんinsmod モジュールをロードする。
-h, - 助けて
オプションの要約を表示してすぐに終了します。
-k, --autoclean
モジュールの自動クリーニングフラグを設定します。このフラグは、kerneld(8)を使用して、ある期間(通常1分)に未使用のモジュールを取り除きます。
-L, - ロック
つかいます群れ(2)同一モジュールの同時負荷を防止する。
-m, - 地図
stdoutにロードマップを出力すると、カーネルパニック時にモジュールのデバッグが容易になります。
-n, --noload
ダミーを実行し、モジュールをカーネルにロードする以外はすべて実行します。 〜によって要求された場合-m または-O実行すると、マップまたはBLOBファイルが生成されます。モジュールがロードされていないので、実際のカーネルロードアドレスは不明であるため、マップファイルとBLOBファイルは任意のロードアドレス0x12340000に基づいています。
-o module_name , - 名= module_name
ソースオブジェクトファイルのベース名から名前を派生させるのではなく、モジュールに明示的に名前を付けます。
-O blob_name , --blob= blob_name
バイナリオブジェクトを blob_name 。その結果、バイナリBLOB(ELFヘッダーなし)がセクションの操作と再配置の後にカーネルにロードされるものを正確に示します。オプション-m オブジェクトの地図を取得することをお勧めします。
-p, - プローブ
モジュールが正常にロードされたかどうかを調べます。これには、モジュールパス内のオブジェクトファイルの検索、バージョン番号のチェック、およびシンボルの解決が含まれます。再配置をチェックしたり、マップやBLOBファイルを生成したりしません。
-P プレフィックス , --prefix= プレフィックス
このオプションは、シンボル名に余分な接頭辞が追加されているため、SMPまたはbigmemカーネルのバージョン管理されたモジュールで使用できます。カーネルがシンボルバージョンで構築されている場合insmod "get_module_symbol"または "inter_module_get"の定義から接頭辞を自動的に抽出します。その1つはモジュールをサポートするカーネルに存在しなければなりません。カーネルにシンボルバージョンがないのに、モジュールがシンボルバージョンでビルドされている場合は、ユーザーは、-P.
-q, - 静か
未解決のシンボルのリストは印刷しないでください。バージョンの不一致については不平を言ってはいけません。問題は終了ステータスにのみ反映されます。insmod.
-r, - ルート
一部のユーザーは、非rootユーザーIDの下でモジュールをコンパイルし、rootとしてモジュールをインストールします。このプロセスは、modulesディレクトリがrootによって所有されていても、root以外のユーザIDが所有するモジュールを残すことができます。ルート以外のユーザーIDが侵害された場合、侵入者はそのユーザーIDが所有する既存のモジュールを上書きし、このエクスポージャーを使用してルートアクセスまでブートストラップすることができます。
デフォルトでは、modutilsはrootが所有していないモジュールの使用を拒否します。指定する -r チェックをトグルして、rootが所有していないモジュールをロードできるようにします。
注意: ルートチェックのデフォルト値は、modutilsが設定されているときに変更できます。設定時に-rを使用してルートチェックを無効にするか、またはデフォルトを「no root check」に設定することがセキュリティ上の大きな問題であり、推奨されません。
-s, --syslog
すべてを出力するsyslog(3)を使用してください。
-S, --kallsyms
ロードされたモジュールに強制的にkallsyms たとえカーネルがそれをサポートしていなくても、このオプションは、カーネルがkallsyms データが必要ですが、選択されたモジュールはkallsyms デバッグ用。このオプションはRed Hat Linuxのデフォルトです。
-v, - 詳細
冗長にする。
-V, - バージョン
バージョンを表示するinsmod.
-バツ, - 輸出する; -バツ, --noexport
モジュールの外部シンボルのすべてをエクスポートしたり、エクスポートしたりしないでください。デフォルトでは、シンボルがエクスポートされます。このオプションは、モジュールが独自の制御されたシンボルテーブルを明示的にエクスポートしないので非推奨になる場合にのみ有効です。
-Y, --ksymoops; -y, --noksymoops
実行して追加しないksymoops ksymsへのシンボル。これらのシンボルは、ksymoops このモジュールにOopsがある場合、より良いデバッグを提供します。デフォルトはksymoops定義するシンボル。このオプションは、-バツ/-バツ オプション。
ksymoops シンボルは、ロードされたモジュールあたり約260バイトを追加します。カーネル空間が不足していてksymsを最小サイズに縮小しようとしている場合を除き、デフォルトを採用し、より正確なOopsのデバッグを取得してください。ksymoops 永続的なモジュールデータを保存するにはシンボルが必要です。
-N, - 数値のみ
モジュールバージョンの数値部分をカーネルバージョンと照合するだけです。つまり、モジュールがカーネルに属しているかどうかを判断する際にEXTRAVERSIONを無視してください。このフラグはカーネル2.5以降で自動的に設定されます。以前のカーネルではオプションです。
モジュールのパラメータ
一部のモジュールでは、ロード時パラメータを受け入れて操作をカスタマイズします。これらのパラメータは、マシンごとに異なるI / OポートとIRQ番号であり、ハードウェアからは特定できません。
2.0シリーズカーネル用に構築されたモジュールでは、任意の整数または文字ポインタシンボルをパラメータとして扱い、変更することができます。 2.1シリーズのカーネルからは、シンボルが明示的にパラメータとしてマークされているため、特定の値のみが変更される可能性があります。さらに、ロード時に提供される値をチェックするための型情報が提供されます。
整数の場合、すべての値は、10進数、8進数、16進数のいずれかで、C:17,021または0x11になります。配列要素はコンマで区切って指定したシーケンスです。値を省略すると要素をスキップできます。
2.0シリーズモジュールでは、数値で始まらない値は文字列と見なされます。 2.1から、パラメータの型情報は、値を文字列として解釈するかどうかを示します。値が二重引用符で始まる場合(')、文字列はCのように解釈され、エスケープシーケンスとすべて。シェルのプロンプトから引用符自体をシェルの解釈から保護する必要があるかもしれないことに注意してください。
GPLライセンスモジュールとシンボル
カーネル2.4.10以降、モジュールにはライセンス文字列が必要です。MODULE_LICENSE()。いくつかの文字列はGPL互換であると認識されます。他のライセンス文字列またはライセンスなしとは、モジュールが専有として扱われることを意味します。
カーネルが/ proc / sys / kernel / tainted フラグを立てるinsmod GPLライセンスなしでモジュールをロードするときに汚染されたフラグを '1'でORします。カーネルが汚染をサポートし、モジュールがライセンスなしでロードされている場合、警告が発行されます。警告は、モジュールがあるモジュールに対して常に発行されます。MODULE_LICENSE() これはGPL互換ではなく、汚染をサポートしていない古いカーネルでさえもそうです。これにより、古いカーネルで新しいmodutilsが使用されたときの警告が最小限に抑えられます。
insmod -f (強制)モードは、汚染をサポートするカーネルで汚染されたフラグを '2'に置き換えます。常に警告を出します。
いくつかのカーネル開発者は、コードによってエクスポートされたシンボルは、GPL互換のライセンスを持つモジュールによってのみ使用される必要があります。これらのシンボルは、EXPORT_SYMBOL_GPL 通常の代わりにEXPORT_SYMBOL。カーネルおよび他のモジュールによってエクスポートされたGPL専用シンボルは、GPL互換のライセンスを持つモジュールでのみ表示されます。/ proc / ksyms 接頭辞は 'GPLONLY_'. insmod は無視するGPLONLY_ プレフィックスを付けずにGPLライセンスモジュールを読み込むので、モジュールは単にプレフィックスのない通常のシンボル名を参照するだけです。 GPL互換のライセンスなしでは、GPLのみのシンボルはモジュールで使用できません。これには、ライセンスのないモジュールも含まれます。
Ksymoopsアシスタンス
モジュールを使用しているときにカーネルのoopsのデバッグを支援するために、insmod デフォルトでは、ksymsにいくつかのシンボルが追加されます。-Y オプション。これらのシンボルは__insmod_ modulename_ 。ザ モジュール名 シンボルをユニークにする必要があります。異なるモジュール名で同じオブジェクトを複数回読み込むことは正当です。現在定義されているシンボルは次のとおりです。
__insmod_ モジュール名 _ オブジェクトファイル _ Mmtime _ Vversion
オブジェクトファイル オブジェクトがロードされたファイルの名前です。これにより、ksymoopsがコードを正しいオブジェクトに一致させることができます。 mtime そのファイルの最後に変更されたタイムスタンプで、statが失敗した場合はゼロです。 バージョン モジュールがコンパイルされたカーネルバージョンです。バージョンがない場合は-1です。ザ_O シンボルは、モジュールヘッダと同じ開始アドレスを持ちます。
__insmod_ モジュール名 _ セクション名 _ 長さ
このシンボルは、選択されたELFセクションの先頭に現在表示されています。現在は.text、.rodata、.data、.bssおよび.sbssです。セクションのサイズがゼロでない場合にのみ表示されます。 セクション名 ELFセクションの名前です。 長さ セクションの長さを10進数で表したものです。これらのシンボルは、シンボルが利用できない場合にksymoopsがアドレスをセクションにマップするのに役立ちます。
__insmod_ モジュール名 _Ppersistent_ ファイル名
作成者のみinsmod モジュールに永続データとしてマークされた1つ以上のパラメータと、永続データを保存するためのファイル名がある場合(see section-e、上記)が利用可能です。
モジュール内でカーネルのOopsをデバッグする際のもう一つの問題は、/ proc / ksymsの内容 そして / proc / modulesは、Oopsとログファイルを処理するときに変更することができます。この問題を解決するために、ディレクトリ/ var / log / ksymoopsが存在する場合insmod そしてrmmod 自動的に/ proc / ksymsと/ proc / modulesを `date +%Y%m%d%H%M%S`という接頭辞を付けて/ var / log / ksymoopsにコピーします。システム管理者は、Oopsのデバッグ時に使用するスナップショットファイルをksymoopsに伝えることができます。この自動コピーを無効にするスイッチはありません。それが発生しないようにするには、/ var / log / ksymoopsを作成しないでください。そのディレクトリが存在する場合は、ルートが所有し、644または600のモードである必要があります。毎日このスクリプトを実行する必要があります。以下のスクリプトは、insmod_ksymoops_cleanとしてインストールされています。
#!/ bin / sh #保存されたksymsと2日以内にアクセスされなかったモジュールを削除する -d / var / log / ksymoopsを指定すると、 次に セット-e #常に少なくとも1つのバージョンがあることを確認する d = `日付+%Y%m%d%H%M%S ' cp -a / proc / ksyms /var/log/ksymoops/${d}.ksyms cp -a / proc / modules /var/log/ksymoops/${d}.modules / var / log / ksymoops -type f -atime +2 -exec rm {} を見つける。 fi 名 insmod - ロード可能なカーネルモジュールをインストールする シノプシス insmod -fhkLmnpqrsSvVxXyYN -e persist_name -o module_name -O blob_name -P プレフィックス モジュール シンボル= 値 … 知るべき基本情報




