カーネルモジュール覚書

カーネルモジュールはカーネルが動的にロードできるモジュール。ローダブルカーネルモジュール(LKM)ともいう。デバイスドライバなどで使われている。

現在カーネルが読み込んでいるモジュールを表示するにはlsmodまたは/proc/modulesを読めばいい。

[root@centos build]# lsmod
Module Size Used by
autofs4 24517 3
hidp 23105 2
rfcomm 42457 0
l2cap 29633 10 hidp,rfcomm

左から順に、名前、サイズ、いくつのプロセスから使われているか、依存しているモジュールを示す。

モジュールの情報を表示するにはmodinfoを用いる。

[root@centos build]# modinfo hidp
filename: /lib/modules/2.6.18-53.1.14.el5/kernel/net/bluetooth/hidp/hidp.ko
alias: bt-proto-6
license: GPL
version: 1.1
description: Bluetooth HIDP ver 1.1
author: Marcel Holtmann <marcel@holtmann.org>
srcversion: F6110A784FD4060F29C39C7
depends: bluetooth,l2cap
vermagic: 2.6.18-53.1.14.el5 SMP mod_unload 686 REGPARM 4KSTACKS gcc-4.1
module_sig: 883f35047ced1a9eca829d098883c27112e81509d1eb0b292e3db5dedbf5a25709c45da76fbe43e09f7461c3ed59fa8fdfdd1649a3ea28dd2bf43f7de

モジュールをカーネルに組み込むにはinsmodまたはmodprobeを用いる。modprobeはinsmodより賢く依存関係を解決しながら読み込んでくれる。

モジュールをカーネルから開放するにはrmmodまたはmodprobe -rを用いる。上記と同様にmodprobeは賢く開放する。

依存関係は通常/lib/modules/<version>/modules.depに記述してあり、これはdepmodによって作られる。

modprobeは設定ファイル/etc/modprobe.confを参照する。このファイルは1行1命令で記述されていて、以下のような命令がある。

  • alias : モジュールに別名を付ける。ワイルドカードも指定可能。ネストはできない。
  • options :指定されたモジュールがmodprobeコマンドで指定されたとき、追加のオプションを指定する。
  • install : 指定されたモジュールがmodprobeコマンドで指定されたとき実行されるスクリプトを記述する。この命令がある場合、modprobeはデフォルトの動作を行わない。命令には–ignore-installを含んでいることが多い。これをつけるとmodprobe.confのinstall命令を無視する。つまりこれを付けて再帰しないようにしている。
  • remove : 上記と大体同じ。

モジュールは通常/lib/modules/<version>/ ディレクトリに格納されている。現在の動いているカーネルのヴァージョンを知るにはuname -rを用いる。

Leave a Reply

Your email address will not be published. Required fields are marked *

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)