第25章 カーネルモジュールでの作業

Linux カーネルはモジュール式であるため、動的にロードされた カーネルモジュール を使用することでその機能を拡張することができます。カーネルモジュールが提供するのは、以下のとおりです。
  • 新しいハードウェアに対するサポートを強化するデバイスドライバー、または
  • btrfsNFS のようなファイルシステムへのサポート
ほとんどの場合、デフォルトのパラメーターは十分に機能しますが、モジュールはカーネルのように動作をカスタマイズするパラメーターを取ることができます。ユーザースペースツールは、実行中のカーネルに現在ロードされているモジュールを一覧表示することができます。また、利用可能なパラメーターに使用できる全モジュールやモジュール固有の情報をクエリできます。さらには、実行中のカーネルに対してモジュールを動的にロード/アンロード (削除) することも可能です。こうしたユーティリティの多くは、module-init-tools パッケージにより提供され、動作の実行時にモジュールの依存関係を考慮するため、手動による依存関係の追跡が必要になることはほとんどありません。
最近のシステムでは、必要な状況が発生すると様々な仕組みによりカーネルモジュールは自動的にロードされます。ただし、モジュールを手動でロード/アンロードしなければならない場合もあります。例としては、モジュールがオプションの機能を提供する場合に、どちらのモジュールも基本的な機能を提供しながらも、あるモジュールが別のモジュールより好まれる場合、あるいはモジュールが他の状況で不正に動作する場合などです。
本章では、以下について説明します。
  • ユーザースペースの module-init-tools パッケージを使用して、カーネルモジュール及びその依存関係を表示/クエリ/ロード/アンロードする方法
  • コマンドラインで動的かつ永続的にモジュールパラメーターを設定して、カーネルモジュールの動作をカスタマイズする方法
  • ブート時にモジュールをロードする方法

注記

本章で説明するカーネルモジュールのユーティリティを使用するには、最初に root で以下を実行して、ご使用のシステムに module-init-tools パッケージがインストールされていることを確認します:
~]# yum install module-init-tools
Yum を使用したパッケージのインストールについての詳細は、「パッケージのインストール」 を参照して下さい。

25.1. 現在ロード済みモジュールの一覧表示

lsmod コマンドを実行することで、現在カーネルにロード済みの全カーネルモジュールを一覧表示できます:
~]$ lsmod
Module                  Size  Used by
xfs                   803635  1
exportfs                3424  1 xfs
vfat                    8216  1
fat                    43410  1 vfat
tun                    13014  2
fuse                   54749  2
ip6table_filter         2743  0
ip6_tables             16558  1 ip6table_filter
ebtable_nat             1895  0
ebtables               15186  1 ebtable_nat
ipt_MASQUERADE          2208  6
iptable_nat             5420  1
nf_nat                 19059  2 ipt_MASQUERADE,iptable_nat
rfcomm                 65122  4
ipv6                  267017  33
sco                    16204  2
bridge                 45753  0
stp                     1887  1 bridge
llc                     4557  2 bridge,stp
bnep                   15121  2
l2cap                  45185  16 rfcomm,bnep
cpufreq_ondemand        8420  2
acpi_cpufreq            7493  1
freq_table              3851  2 cpufreq_ondemand,acpi_cpufreq
usb_storage            44536  1
sha256_generic         10023  2
aes_x86_64              7654  5
aes_generic            27012  1 aes_x86_64
cbc                     2793  1
dm_crypt               10930  1
kvm_intel              40311  0
kvm                   253162  1 kvm_intel
[出力は省略されています]
lsmod 出力の各行の定義:
  • メモリに現在ロード済みのカーネルモジュールの名前
  • カーネルモジュールが使用するメモリ量
  • モジュールとそれに依存する他のモジュールを使用するプロセスの合計に加えて、ある場合はそれらモジュールの名前が記載された一覧。この一覧を使用すると、アンロードしたいモジュールに依存するすべてのモジュールを最初にアンロードできます。詳細については、「モジュールのアンロード」 を参照して下さい。
最後に注目する点としては、lsmod 出力は /proc/modules 擬似ファイルの内容よりも大まかで、かなり読みやすいことです。