目次にジャンプページナビゲーションにジャンプ: 前のページ[アクセスキーp]/次のページ[アクセスキーn]
documentation.suse.com / SUSE Linux Enterprise Serverマニュアル / 管理ガイド / システム / カーネルモジュールの管理
適用項目 SUSE Linux Enterprise Server 12 SP5

20 カーネルモジュールの管理

Linuxはモノリシックカーネルですが、カーネルモジュールを使用して拡張することができます。カーネルモジュールは、オンデマンドでカーネルに挿入したり、カーネルから削除したりできる特別なオブジェクトです。実際面では、カーネルモジュール自体に含まれないドライバやインタフェースを追加および削除できます。Linuxは、カーネルモジュールを管理するためのコマンドをいくつか備えています。

20.1 lsmodおよびmodinfoによるロード済みモジュールの一覧作成

lsmodコマンドを使用すると、現在ロードされているカーネルモジュールを表示できます。コマンドの出力は次のようになります。

tux > lsmod
Module                  Size  Used by
snd_usb_audio         188416  2
snd_usbmidi_lib        36864  1 snd_usb_audio
hid_plantronics        16384  0
snd_rawmidi            36864  1 snd_usbmidi_lib
snd_seq_device         16384  1 snd_rawmidi
fuse                  106496  3
nfsv3                  45056  1
nfs_acl                16384  1 nfsv3

出力は3つの列に分かれています。Module列には、ロード済みモジュールの名前が一覧にされ、Size列には各モジュールのサイズが表示されます。Used by列には、参照モジュールの数と名前が表示されます。このリストは完全ではない場合があるので注意してください。

特定のカーネルモジュールに関する詳細情報を表示するには、modinfo MODULE_NAMEコマンドを使用します。MODULE_NAMEには、目的のカーネルモジュールの名前を指定します。modinfoバイナリは、ユーザのPATH環境変数に存在しない/sbinディレクトリにあるので注意してください。つまり、modinfoコマンドを標準ユーザとして実行する場合、バイナリのフルパスを指定する必要があります。

$ /sbin/modinfo kvm
filename:       /lib/modules/4.12.14-94.37-default/kernel/arch/x86/kvm/kvm.ko
license:        GPL
author:         Qumranet
srcversion:     BDFD8098BEEA517CB75959B
depends:        irqbypass
intree:         Y
vermagic:       4.4.57-18.3-default SMP mod_unload modversions
signer:         openSUSE Secure Boot Signkey
sig_key:        03:32:FA:9C:BF:0D:88:BF:21:92:4B:0D:E8:2A:09:A5:4D:5D:EF:C8
sig_hashalgo:   sha256
parm:           ignore_msrs:bool
parm:           min_timer_period_us:uint
parm:           kvmclock_periodic_sync:bool
parm:           tsc_tolerance_ppm:uint
parm:           lapic_timer_advance_ns:uint
parm:           halt_poll_ns:uint
parm:           halt_poll_ns_grow:int
parm:           halt_poll_ns_shrink:int

20.2 カーネルモジュールの追加と削除

insmodrmmodを使用してカーネルモジュールを追加および削除できますが、これらの代わりにmodprobeツールを使用することをお勧めします。modprobeには、依存関係の自動解決やブラックリスト化など、重要な利点がいくつかあります。

パラメータを指定せずに使用すると、modprobeコマンドは、指定したカーネルモジュールをインストールします。modprobeはルート特権で実行する必要があります。

tux > sudo modprobe acpi

カーネルモジュールを削除するには、-rパラメータを使用します。

sudo modprobe -r acpi

20.2.1 ブート時のカーネルモジュールの自動ロード

カーネルモジュールを手動でロードする代わりに、system-modules-load.serviceサービスを使用してブートプロセス中に自動的にロードできます。カーネルモジュールを有効にするには、.confファイルを/etc/modules-load.d/ディレクトリに追加します。次の例のように、設定ファイルにモジュールと同じ名前を付けることをお勧めします。

/etc/modules-load.d/rt2800usb.conf

設定ファイルには目的のカーネルモジュールの名前を記述する必要があります(例: rt2800usb)。

ここで説明する方法を使用すると、パラメータなしでカーネルモジュールをロードできます。特定のオプションを指定してカーネルモジュールをロードする必要がある場合は、代わりに/etc/modprobe.d/ディレクトリに設定ファイルを追加します。ファイルには拡張子.confを付ける必要があります。ファイルの名前は、priority-modulename.confという命名規則に従う必要があります。たとえば、50-thinkfan.confのようにします。設定ファイルには、カーネルモジュールの名前と目的のパラメータを記述する必要があります。次のコマンド例を使用すると、カーネルモジュールの名前とそのパラメータが記述された設定ファイルを作成できます。

echo "options thinkpad_acpi fan_control=1" | sudo tee /etc/modprobe.d/thinkfan.conf
注記
注記: カーネルモジュールのロード

ほとんどのカーネルモジュールは、デバイスが検出されたときか、ユーザ空間によって特定の機能が要求されたときに、システムによって自動的にロードされます。したがって、ほとんどの場合、モジュールを手動で/etc/modules-load.d/に追加する必要はありません。

20.2.2 modprobeによるカーネルモジュールのブラックリスト化

カーネルモジュールをブラックリスト化すると、そのカーネルモジュールはブートプロセス中にロードされなくなります。これは、システムで問題を引き起こす疑いがあるモジュールを無効にする場合に便利です。なお、カーネルモジュールをブラックリスト化しても、insmodツールまたはmodprobeツールを使用してそのカーネルモジュールを手動でロードできます。

モジュールをブラックリスト化するには、blacklist MODULE_NAMEという行を/etc/modprobe.d/50-blacklist.confファイルに追加します。次に例を示します。

blacklist nouveau

mkinitrdコマンドをrootとして実行して、新しいinitrdイメージを作成し、マシンを再起動します。これらの手順は次のコマンドを使用して実行できます。

su
echo "blacklist nouveau" >> /etc/modprobe.d/50-blacklist.conf && mkinitrd && reboot

カーネルモジュールを一時的にのみ無効にするには、ブート時にオンザフライでブラックリスト化します。そのためには、ブート画面が表示されたらEキーを押します。最小限のエディタが表示され、そこでブートパラメータを変更できます。次のような行を見つけます。

linux /boot/vmlinuz...splash= silent quiet showopts

行の最後にmodprobe.blacklist=MODULE_NAMEコマンドを追加します。次に例を示します。

linux /boot/vmlinuz...splash= silent quiet showopts modprobe.blacklist=nouveau

F10キーまたはCtrlXキーを押し、指定した設定でブートします。

GRUBを使用してカーネルモジュールを完全にブラックリスト化するには、/etc/default/grubファイルを編集用に開き、GRUB_CMD_LINUXコマンドにmodprobe.blacklist=MODULE_NAMEオプションを追加します。次にsudo grub2-mkconfig -o /boot/grub2/grub.cfgコマンドを実行して、変更を有効にします。