Linuxカーネルはどのようにモジュールを動的に使用しますか?

Linuxカーネルはどのようにモジュールを動的に使用しますか?

Linuxカーネルを理解する

カーネルは、モジュールを管理するときに2つの主要なタスクを実行する必要があります。最初の作業は、カーネルの残りの部分が主要機能のエントリポイントなどのモジュールのグローバルシンボルに到達できるようにすることです。モジュールはカーネルや他のモジュールのシンボルアドレスも知っている必要があります。したがって、モジュールを接続すると、参照は一度解決されます。第2の動作は、他のモジュールまたはカーネルの他の部分がモジュールを使用している間にモジュールがアンロードされないように、モジュールの使用を追跡することからなる。簡単な参照数で各モジュールの使用量を追跡できます。

すべての共有ライブラリは動的にリンクされ(を使用してLD_LIBRARY_PATH)、動的にロードできます(dlopen()dlsym()およびを介してdlclose())。これは正しいですか?

モジュールはLinuxカーネルの共有ライブラリですか?

Linuxカーネルはどのようにモジュールを動的に使用しますか?動的接続(使用)を介して、またはLD_LIBRARY_PATH動的ローディング(dlopen()dlsym()および経由dlclose())を介してですか?

答え1

すべての共有ライブラリは動的にリンクされ(を使用してLD_LIBRARY_PATH)、動的にロードできます(dlopen()dlsym()およびを介してdlclose())。これは正しいですか?

はい。違いは、ダイナミックリンカがダイナミックリンカによって駆動され、プログラムが起動すると(プログラムの作成者の観点から)、ライブラリがすでにリンクされており、すべてのシンボルが確認され、これらの操作がすべて手動で実行されることです。

モジュールはLinuxカーネルの共有ライブラリですか?

多少のローディング機構が異なります。動的リンカーとはlibdlカーネルではなくユーザー空間でのみ使用されます。

Linuxカーネルはどのようにモジュールを動的に使用しますか?動的接続(使用)を介して、またはLD_LIBRARY_PATH動的ローディング(dlopen()dlsym()および経由dlclose())を介してですか?

カーネルは以下を使用してモジュールをロードします。load_module、ELFオブジェクトのロード、必要なセグメントマッピング、すべての再配置の実行など、すべての操作を独自に実行します。また、ライセンスの確認、接続sysfs、初期化関数の呼び出しなど、モジュール固有の操作も実行します。

load_moduleユーザー空間からのアクセスinit_moduleまたはシステムfinit_moduleコール

関連情報