LPIC-2 - 201試験 - 201:Linuxカーネル - 201.4 カスタムカーネルおよびカーネルモジュールのカスタマイズ、構築、インストール

Last Update : September 18 2014 21:34:19

     

a. カーネルモジュール

カーネルモジュールとは、カーネルの機能を拡張するためのバイナリファイルです。
カーネルモジュールの代表的なものとしては、ディスク、ネットワークカード等をLinuxカーネルで使用可能にするためのデバイスドライバがあげられます。このデバイスドライバは、基本的には、各ハードウェアベンダから提供されるもので、これを使用することによって、Linuxカーネルは、多種多様なハードウェアに対応することが可能になっています。
初期のUNIX系OSでは、カーネルの機能を拡張する場合、デバイスドライバなどはすべてカーネルに組み込むという設計になっていました。つまり、新しいハードウェアを使うためには、カーネルの再構築(ソースからの再コンパイル)が必要でした。
しかし、現在のLinuxカーネルはモジュール形式で設計されています。起動時に最小限度の常駐カーネルだけがメモリにロードされ、必要に応じてモジュールのロード・アンロードできるようになっています。ユーザーがカーネルに存在しない機能を要求すると、ドライバ・モジュールが動的にメモリにロードされます。 このため、常に使用するわけではないデバイスのためにメモリを消費することを防ぐことができます。


b. カーネルモジュール関連コマンド

1.モジュールの確認

現在ロードされているモジュールを確認するには、lsmodコマンドを使用します。
ロードされているすべてのモジュールを一覧表示します。
モジュール名・サイズ・参照回数・そのモジュールを使用しているモジュールが表示されます。

# lsmod
Module Size Used by i915 81412 3 md5 3968 1 ipv6 232768 12 i2c_dev 11392 0 i2c_core 22400 1 i2c_dev
  • Module
    ロードされているカーネル・モジュール名
  • Size
    カーネル・モジュールのサイズ
  • Used by
    使用カウント数、参照しているモジュールの一覧

例えば、モジュール名「i2c_core」は、1回使用されており、また、「i2c_dev」というモジュール名から参照されているということが上記の出力結果からわかります。
/proc/modulesファイルからも同様の情報を確認できます。

● lsmod コマンド構文
  lsmod


2.モジュールのロード

モジュールのロードについては、modprobeコマンド、または、insmodコマンドを使用します。

● modprobe コマンド構文
  modprobe [モジュール名]

● modprobe コマンドオプション
 -a すべてのモジュールをロードする
 -c 現在使われている設定を表示する
 -l パターン 指定したパターンにマッチするロード可能なモジュールの一覧を表示する
 -n 何もせず情報を表示する
 -r モジュールをアンロードする
 -t タイプ 特定機能のモジュールのみ扱う
 -C ファイル 設定ファイルを指定する
 --show-depends モジュールの依存関係を表示する

● insmod コマンド構文
  insmod [モジュール名]

● insmod コマンドオプション
 -s 実行結果を標準出力でなくsyslogへ出力する
 -v 詳細な情報を表示する

この2つのコマンドの違いは、modprobeコマンドは、modules.depファイルを参照し、依存関係のあるモジュールがあれば、事前にロードを行います。それに対し、insmodコマンドは、指定されたモジュールのみをロードします。そのため、事前にロードする必要のある依存するモジュールが存在する場合には、エラーとなります。
また、幾つかのデバイス・ドライバ用のモジュールは、システム起動時に読み込まれる、/etc/rc.d/rc.sysinitスクリプト中でmodprobeコマンドによりロードされています。他のモジュールに関しては、カーネルモジュールローダが、ユーザが使用する際に自動的にモジュールをロードします。(ex: loopデバイス)

modprobe コマンドが参照するモジュールの依存関係は、modules.dep ファイルに記述されています。

書式 モジュールのパス:依存するモジュールのパス ・・・

modules.dep ファイルは、/lib/modules/カーネルバージョン/modules.dep です。このファイルを作成するには、depmod コマンドを実行します。

モジュールのロードやアンロード時に前処理や後処理が必要であったり、モジュールをロードするときのオプションなどを指定する場合は、/etc/modprobe.conf (または /etc/modprobe.conf が存在しない場合、 /etc/modprobe.d ディレクトリ以下のすべてのファイル) に記述します。これらのファイルは必要に応じてこれらのオプションを指定するために使われます。 また、便利なようにエイリアス (モジュールの別名) を作成するためにもこれらのファイルは使われます。

● /etc/modprobe.confの書式
 alias モジュールの別名を付ける。
 options モジュールのオプションを指定する
 install 指定されたシェルコマンドを実行する
 remove "modprobe -r" が呼び出されたときにシェルコマンドを実行する


3.モジュールのアンロード

モジュールのアンロード(削除)を行うには、rmmodコマンドを使用します。-r オプションを指定することで、依存するモジュールがあった場合、それらも同時に削除されます。 ただし、モジュールを削除する際に、使用中の場合には、エラーとなり削除することはできません。

# rmmod pcmcia_core ERROR: Module pcmcia_core is in use by yenta_socket

● rmmod コマンド構文
  rmmod [モジュール名]

● rmmod コマンドオプション
 -a 未使用のモジュールを全てアンロードする
 -s 実行結果を標準出力でなくsyslogへ出力する



c. モジュール関連ファイル

1./etc/modprobe.conf

殆どのモジュールについては、システム起動時、あるいは必要に応じてドライバを自動認識し、ロードします。
Linuxでは、SCSIコントローラ、RAIDコントローラの種類に関係なく/dev/sda1などのデバイス・ファイルを使用します。同様にNICの種類に関係なくeth0をネットワークインターフェース名に使用します。
そこで、/etc/modprobe.conf にて別名(alias)を定義した上で、ドライバ・モジュールをロードします。/etc/modprobe.conf ファイルは、このようなドライバの別名(alias)を指定したり、ドライバ・ロード時のオプションなどを指定する設定ファイルになります。

● 例) ネットワークモジュール:eth0、SCSIモジュール:scsi_hostadapterの記述例
alias eth0 e1000 <--- alias: モジュールの別名の指定 alias scsi_hostadapter mptbase alias scsi_hostadapter1 mptscsi options e1000 Speed=1000 Duplex=2 <--- options: モジュールをロードする際のオプション

z. 出題範囲概要

●主要な知識範囲
現在のカーネル構成をカスタマイズする
新しいカーネルおよび適切なカーネルモジュールを構築する
新しいカーネルおよび必要なモジュールをインストールする
ブートマネージャーが新しいカーネルおよび関連付けられたファイルを探せるようにする

/usr/src/linux/
モジュールの構成ファイル
●重要なファイル、用語、ユーティリティ
patch make モジュールツール /usr/src/linux/* /usr/src/linux/.config /lib/modules/kernel-version/* /boot/* makeのターゲット(all、config、menuconfig、xconfig、gconfig oldconfig、modules、install、modules_install、rpm-pkg、binrpm-pkg、deb-pkg)



     

www.it-shikaku.jp