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

本章では、以下について説明します。

  • カーネルモジュールの概要
  • kmod ユーティリティーを使用してモジュールとその依存関係を管理する方法
  • モジュールパラメーターを設定してカーネルモジュールの動作を制御する方法
  • 起動時にモジュールを読み込む方法
注記

本章で説明するカーネルモジュールのユーティリティーを使用するには、最初に root で以下を実行して、ご使用のシステムに kmod パッケージがインストールされていることを確認します。

# yum install kmod

2.1. カーネルモジュールの概要

Linux カーネルは、モノリシック型として設計されていますが、各ユースケースで必要とされる追加またはオプションのモジュールでコンパイルされています。つまり、動的に読み込まれる カーネルモジュール を使用してカーネル機能を拡張することができます。カーネルモジュールでは、以下を提供することができます。

  • 新しいハードウェアに対するサポートを強化するデバイスドライバー、または
  • GFS2 または NFS などのファイルシステムのサポート

デフォルトのパラメーターは多くの場合、十分に機能しますが、カーネルと同様にモジュールはパラメーターを指定して動作をカスタマイズすることができます。ユーザー空間ツールは、実行中のカーネルに現在ロードされているモジュールを一覧表示することができます。また、利用可能なパラメーターに使用できる全モジュールやモジュール固有の情報をクエリーできます。さらには、実行中のカーネルに対してモジュールを動的にロード/アンロード (削除) することも可能です。kmod パッケージにより提供される、このようなユーティリティーの多くは、動作の実行時にモジュールの依存関係を考慮するため、手動による依存関係の追跡が必要になることはほぼありません。

最近のシステムでは、必要な状況になると各種メカニズムによって自動的にカーネルモジュールが読み込まれます。しかし、モジュールを手動で読み込み、削除する必要がある状況も時にあります。たとえば、どちらのモジュールも基本的な機能は提供できるものの、どちらかの方が好まれる場合や、モジュールが不正な動作をしている場合などです。

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

lsmod コマンドを実行すると、現在カーネルに読み込み済みの全カーネルモジュールを一覧表示できます。以下に例を示します。

# lsmod
Module                  Size  Used by
tcp_lp                 12663  0
bnep                   19704  2
bluetooth             372662  7 bnep
rfkill                 26536  3 bluetooth
fuse                   87661  3
ebtable_broute         12731  0
bridge                110196  1 ebtable_broute
stp                    12976  1 bridge
llc                    14552  2 stp,bridge
ebtable_filter         12827  0
ebtables               30913  3 ebtable_broute,ebtable_nat,ebtable_filter
ip6table_nat           13015  1
nf_nat_ipv6            13279  1 ip6table_nat
iptable_nat            13011  1
nf_conntrack_ipv4      14862  4
nf_defrag_ipv4         12729  1 nf_conntrack_ipv4
nf_nat_ipv4            13263  1 iptable_nat
nf_nat                 21798  4 nf_nat_ipv4,nf_nat_ipv6,ip6table_nat,iptable_nat
[output truncated]

lsmod 出力では、3 つのコラムを表示します。

  • Module (モジュール)

    • メモリーに現在読み込まれているカーネルモジュールの名前
  • Size (サイズ)

    • カーネルモジュールが使用するメモリー量 (キロバイト単位)
  • Used by (使用フィールド)

    • 依存関係に関する情報 2 項目を含むフィールド

      • Module フィールドにある依存関係の数を表す小数点
      • 依存する Module の名前をコンマ区切りにした文字列。この一覧を使用して、アンロードするモジュールに依存するモジュールをすべて先に、アンロードすることができます。

最後に、lsmod 出力は /proc/modules 擬似ファイルの内容ほど詳細ではないので、はるかに読み取りやすくなっている点に留意してください。

2.3. モジュール情報の表示

カーネルモジュールに関する詳しい情報は、modinfo module_name コマンドを使用して表示できます。

注記

カーネルモジュール名を kmod ユーティリティーのいずれかの引数として指定する場合には、その名前の末尾に拡張子 .ko を付けないでください。カーネルモジュール名には、拡張子を付けません。カーネルモジュールに対応するファイルには拡張子が付きます。

例2.1 lsmod を使用したカーネルモジュール情報の一覧表示

Intel PRO/1000 ネットワークドライバーである e1000e モジュールに関する情報を表示するには、root で以下のコマンドを入力します。

# modinfo e1000e
filename:       /lib/modules/3.10.0-121.el7.x86_64/kernel/drivers/net/ethernet/intel/e1000e/e1000e.ko
version:        2.3.2-k
license:        GPL
description:    Intel(R) PRO/1000 Network Driver
author:         Intel Corporation,