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

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

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

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

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

> 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/5.3.18-57-default/kernel/arch/x86/kvm/kvm.ko.xz
license:        GPL
author:         Qumranet
suserelease:    SLE15-SP3
srcversion:     3D8FBA9060D4537359A06FC
depends:        irqbypass
supported:      yes
retpoline:      Y
intree:         Y
name:           kvm
vermagic:       5.3.18-57-default SMP mod_unload modversions

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

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

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

> sudo modprobe acpi

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

> sudo modprobe -r acpi

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

カーネルモジュールを手動でロードする代わりに、systemd-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/に追加する必要はありません。

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

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

モジュールをブラックリストに登録するには、次の内容を含むファイル/etc/modprobe.d/60-blacklist-MODULE_NAME.confを作成します。

blacklist MODULE_NAME

rootとしてdracutコマンドを実行して新しいinitrdイメージを生成し、マシンを再起動します(NAMEを現在のinitrdの名前に置き換え、KERNELVERSIONを現在実行中のカーネルに置き換えます)。

> su
echo "blacklist nouveau" >> /etc/modprobe.d/60-blacklist-nouveau.conf
/usr/bin/dracut --logfile /var/log/YaST2/mkinitrd.log --force /boot/$initrd-NAME $KERNELVERSION
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コマンドを実行して、変更を有効にします。