本文へ トップページ第5章 システム>5.5節 カーネルとモジュール
前のページへ 次のページへ
 

5.5 カーネルとモジュール



カーネル

OS としての Linux はさまざまなツールがまとめられてディストリビューションとして 配布されています。また 1 章で説明したようにディストリビューションにはたくさんの 種類があり、使い勝手も異なっています。
本来は Linux とは カーネル と呼ばれる中心となるプログラムのことを意味 します。 このカーネルが核となってハードウェアやソフトウェアの管理を行うようになっています。しかし、このカーネルだけでは一般的に利用するための OS としての機能を果たすことができません。 一般的には Linux カーネルを基にして構成されたディストリビューションのことも 一般には Linux と呼んでいます。

モジュール

 カーネルが中心となってハードウェアなどの管理をしていますが、利用するコンピュータによって様々な設定が変わります。 しかしあらかじめカーネルが全ての利用環境をサポートすることは不可能です。そこで モジュール とよばれるプログラムを利用できるようになっています。これはカーネルが起動した後に必要に応じていつでも追加(ロード)したり削除できます。

 現在システムにロードされているモジュールを確認するには lsmod コマンドを使います。

ターミナルウィンドウでの実行例始まり

命令始まり[user]$ /sbin/lsmod改行
   表の開始
      
Module Size Used by改行
autofs 11904 1 (autoclean)改行
3c59x 25568 1 (autoclean)改行
iptable_filter 2288 0 (autoclean) (unused)改行
md 59008 0 (unused)改行
usb-uhci 20912 0 (unused)改行
usbcore 53200 1 [usb-uhci]改行
表の終了 [user]$命令終わり
ターミナルウィンドウでの実行例終わり

個々のモジュールの情報を確認するには modinfo コマンドを使います。

ターミナルウィンドウでの実行例始まり

命令始まり[student]$ /sbin/modinfo usb-uhci改行
filename:    /lib/modules/2.4.4-18k/kernel/drivers/usb/usb-uhci.o改行
description: "USB Universal Host Controller Interface driver"改行
author:      "Georg Acher, Deti Fliegl, Thomas Sailer, Roman Weissgaerber"命令終わり
ターミナルウィンドウでの実行例終わり

オプションとしてモジュールの説明の表示(命令始まり-d命令終わり) と作者の表示(命令始まり-a命令終わり) があります。

モジュールの追加と削除

 モジュールを追加するためには insmod コマンドを使います。ただし、モジュールには依存関係があり利用したいモジュールが他のモジュールを必要とする場合がありますので、その依存関係を満たすようにロードしなければいけません。
 先程の lsmod コマンドの実行結果から 命令始まりusbcore命令終わり というモジュールは 命令始まりusb-uhci命令終わり というモジュールで利用されていることが分かります。 またこれらの依存関係は "命令始まり/lib/modules/kernel_version/modules.dep命令終わり" に記述されています。
 また 命令始まりmsdos命令終わり というモジュールをロードするには 命令始まりfat命令終わり というモジュールが必要なので次のようにロードします。

ターミナルウィンドウでの実行例始まり

命令始まり[root]# insmod fat改行
Using /lib/modules/2.4.4-18k/kernel/fs/fat/fat.o改行
[root@oversoul /root]# lsmod改行

   表の開始
      
Module Size Used by改行
fat 33600 0 (unused)改行
autofs 11904 1 (autoclean)改行
3c59x 25568 1 (autoclean)改行
iptable_filter 2288 0 (autoclean) (unused)改行
md 59008 0 (unused)改行
usb-uhci 20912 0 (unused)改行
usbcore 53200 1 [usb-uhci]改行
表の終了 [root]# insmod msdos改行 Using /lib/modules/2.4.4-18k/kernel/fs/msdos/msdos.o改行 [root]# lsmod改行    表の開始
Module Size Used by改行
msdos 5456 0 (unused)改行
fat 33600 0 [msdos] 改行
autofs 11904 1 (autoclean)
3c59x 25568 1 (autoclean)改行
iptable_filter 2288 0 (autoclean) (unused)改行
md 59008 0 (unused)改行
usb-uhci 20912 0 (unused)改行
usbcore 53200 1 [usb-uhci]改行
表の終了 [root]#命令終わり
ターミナルウィンドウでの実行例終わり

 モジュールを削除するためには rmmod コマンドを使います。削除するときにもカーネルの依存関係がありますので他のモジュールに依存されていないものしか削除できません。 命令始まりmsdos命令終わり モジュールをロードした状態で 命令始まりfat命令終わり モジュールを削除することはできません。

ターミナルウィンドウでの実行例始まり
命令始まり[root]# rmmod fat改行
fat: Device or resource busy改行
[root]#命令終わり		
ターミナルウィンドウでの実行例終わり

そこで先程ロードしたときと逆の順番で削除します。

ターミナルウィンドウでの実行例始まり
命令始まり[root]# rmmod msdos改行
[root]# rmmod fat改行
[root]# lsmod改行

   表の開始
      
Module Size Used by改行
autofs 11904 1 (autoclean)改行
3c59x 25568 1 (autoclean)改行
iptable_filter 2288 0 (autoclean) (unused)改行
md 59008 0 (unused)改行
usb-uhci 20912 0 (unused)改行
usbcore 53200 1 [usb-uhci]改行
表の終了 [root]#命令終わり
ターミナルウィンドウでの実行例終わり

 一方、modprobe コマンドはロードするモジュールの依存関係を満たすように依存するモジュールを自動的にロードしてくれます。

 命令始まり  modprobe msdos  命令終わり
 とすると自動的に依存している 命令始まりfat命令終わり モジュールもロードします。
 また 命令始まり-r命令終わり オプションで削除するモジュールが依存しているモジュールも含めて全て削除してくれます。
 命令始まり modprobe -r msdos  命令終わり
 とすると 命令始まりmsdosfat命令終わり モジュールが削除されます。

 また最近では 命令始まりkudzu命令終わり というハードウェアを自動認識して必要なモジュールをロードしてくれるためのツールによってある程度のデバイスは認識してくれるようになっています。

カーネルの再構築

 モジュールによって後から機能を追加することもできましたが、あらかじめカーネルに機能を設定したり、利用する環境に必要でない機能は削除してカーネル自体の動作の負担を減らすことができます。これらはカーネルを再構築することで設定できます。
 またカーネルを再構築することによってより新しいカーネルに変更し、 新しい機能が利用できたり、 バグが修正されたカーネルを利用できます。

 しかし、カーネルの再構築にはある程度の知識が必要になりますのでここではその方法には触れません。





本文先頭へ トップページ第5章 システム>5.5節 カーネルとモジュール
前のページへ 次のページへ