Linux カーネルを車のコアエンジンだと考えてみてください。エンジン自体を変更することなく、ルーフラックや新しいサウンドシステムのようなアクセサリーを追加できます。これらのアクセサリーは必要に応じて追加または削除できます。Linux カーネルもカーネルモジュールで同様の概念を使用しています。
カーネルモジュールとは何か
では、カーネルモジュールとは何でしょうか。これらは、必要に応じてカーネルにロードおよびアンロードできるコードの断片です。コアカーネルを再コンパイルしたりシステムを再起動したりすることなく、カーネルの機能を拡張します。このモジュール式のアプローチにより、新しいハードウェア(新しい Wi-Fi カードなど)や新しいソフトウェア機能(新しいファイルシステムなど)を動的に追加できるようになります。これにより、コアカーネルをスリムに保ちながら、計り知れない柔軟性を得ることができます。
ロードされているモジュールのリスト表示
現在メモリにロードされているすべてのカーネルモジュールのリストを確認するには、lsmodコマンドを使用できます。これにより、アクティブなモジュールとその依存関係のスナップショットが得られます。
lsmod
カーネルモジュールのロード
カーネルモジュールをロードするには、modprobeコマンドを使用します。たとえば、bluetoothモジュールをロードするには、次のように実行します。
sudo modprobe bluetooth
modprobeコマンドはインテリジェントです。標準ディレクトリ(/lib/modules/$(uname -r)/)でモジュールを検索し、ターゲットモジュールが依存する他のモジュールもロードします。
カーネルモジュールのアンロード
モジュールが不要になった場合は、アンロードしてシステムリソースを解放できます。モジュールを削除するには、modprobeで-rフラグを使用します。
sudo modprobe -r bluetooth
起動時のモジュールの管理
modprobeでロードされたモジュールは一時的なものであり、再起動すると消えます。モジュールの設定を永続化するには、/etc/modprobe.d/ディレクトリに設定ファイルを作成できます。
起動時に特定のオプションでモジュールを自動的にロードするには、.confファイルを作成します。たとえば、peanut_butterという仮説のモジュールがあり、そのtypeパラメータをalmondに設定したい場合、ファイルは次のようになります。
# /etc/modprobe.d/peanutbutter.conf
options peanut_butter type=almond
逆に、起動時にモジュールがロードされないようにする(ブラックリスト化と呼ばれるプロセス)には、設定ファイルでblacklistキーワードを使用できます。
# /etc/modprobe.d/peanutbutter.conf
blacklist peanut_butter
これらの設定ファイルにより、システム起動時にどのモジュールが利用可能になるかを細かく制御できます。