実行中のLinuxカーネルモジュール内で、そのファイルの完全なファイル名を簡単に判別する方法はありますか? .ko
ファイル(すなわち: /lib/modules/$(uname -r)/kernel/drivers/mymodule.ko
)を使用して、 procfsをトラバースすることなく代わりに、カーネルスペースコードで利用可能な内部構造/リストに頼っているだけですか?
回答:
回答№1の場合は3いいえ。
まず、あなたのモジュールがカーネルにコンパイルされている可能性があります。したがって、ファイルパスはありません。
2番目:ファイルからのカーネルモジュールのロードはユーザー空間で行われます。カーネルはモジュールをデータバッファとして渡し、 init_module
システムコール - 理論的には可能ですこのデータはファイルから全くロードされませんでした。 (例えば、ネットワークから、または圧縮されたアーカイブからモジュールをロードするモジュールローダーを想像することができます)。
回答№2については4
君は できない モジュールファイルへのパスを取得する カーネル内:カーネルはそれを保存しません。さらにカーネルはそのパスを知っていません。
カーネルモジュールをロードするための2つのsyscallがあります: init_module
そして finit_module
(どちらも kernel/module.c
)。 最初のものは、モジュールイメージが存在するユーザ空間領域へのポインタを受け取ります(ユーザ空間はモジュールファイルをその領域に読み込まなければなりません)。 2番目のモジュールはモジュールのファイルへの記述子を受け入れますが、この記述子はファイルの読み込みコンテンツにのみ使用され、格納されません。