カーネルモジュールの管理
カーネルモジュール
- カーネルを構成する機能を分離してモジュール化したもの
-
主にデバイスドライバ
- 多種多様なH/Wに対応
-
カーネル本体のサイズを小さく
- 必要読み
- 起動に要する時間の短縮
- カーネルが利用するメモリの節約
-
ホットプラグ対応デバイスの取り付け・取り外し対応
- USBとか
- 頻繁に使用するデバイスドライバはカーネルに組み込むと良い
ls /lib/modules
4.15.0-45-generic 4.15.0-46-generic 4.15.0-47-generic
lsmod
コマンド
LSMOD(8) lsmod LSMOD(8)
NAME
lsmod - Show the status of modules in the Linux Kernel
SYNOPSIS
lsmod
DESCRIPTION
lsmod is a trivial program which nicely formats the contents of the
/proc/modules, showing what kernel modules are currently loaded.
COPYRIGHT
This manual page originally Copyright 2002, Rusty Russell, IBM
Corporation. Maintained by Jon Masters and others.
SEE ALSO
insmod(8), modprobe(8), modinfo(8)
AUTHORS
Jon Masters <jcm@jonmasters.org>
Developer
Lucas De Marchi <lucas.de.marchi@gmail.com>
Developer
kmod 11/12/2018 LSMOD(8)
- 現在ロードされているカーネルモジュールをリスト表示する
lsmod
Module Size Used by
ipt_MASQUERADE 16384 9
nf_nat_masquerade_ipv4 16384 1 ipt_MASQUERADE
nf_conntrack_netlink 40960 0
nfnetlink 16384 2 nf_conntrack_netlink
xfrm_user 32768 1
...
項目 | 説明 |
---|---|
Module | モジュール名 |
Size | サイズ |
Used | 参照回数 |
by | 被依存モジュール名 |
-
/proc/modules
ファイルの情報を参照している- root権限でないとアドレスが0になっちゃう
sudo cat /proc/modules
ipt_MASQUERADE 16384 9 - Live 0xffffffffc0dfd000
nf_nat_masquerade_ipv4 16384 1 ipt_MASQUERADE, Live 0xffffffffc0ddc000
nf_conntrack_netlink 40960 0 - Live 0xffffffffc0dcb000
nfnetlink 16384 2 nf_conntrack_netlink, Live 0xffffffffc0d92000
xfrm_user 32768 1 - Live 0xffffffffc0dc2000
...
modinfo
コマンド
- モジュールの情報表示
MODINFO(8) modinfo MODINFO(8)
NAME
modinfo - Show information about a Linux Kernel module
SYNOPSIS
modinfo [-0] [-F field] [-k kernel] [modulename|filename...]
modinfo -V
modinfo -h
...
-a --author, -d --description, -l --license, -p --parameters, -n
--filename
These are shortcuts for the --field flag's author, description,
license, parm and filename arguments, to ease the transition from
the old modutils modinfo.
...
- ファイルシステム
modinfo aufs
filename: /lib/modules/4.15.0-47-generic/kernel/fs/aufs/aufs.ko
alias: fs-aufs
version: 4.15-20180219
description: aufs -- Advanced multi layered unification filesystem
author: Junjiro R. Okajima <aufs-users@lists.sourceforge.net>
license: GPL
srcversion: 9C7732CB810A119C03C59CE
depends:
retpoline: Y
intree: Y
name: aufs
vermagic: 4.15.0-47-generic SMP mod_unload
signat: PKCS#7
signer:
sig_key:
sig_hashalgo: md4
parm: brs:use <sysfs>/fs/aufs/si_*/brN (int)
parm: allow_userns:allow unprivileged to mount under userns (bool)
- author
modinfo aufs -a
# modinfo aufs --author
Junjiro R. Okajima <aufs-users@lists.sourceforge.net>
- description
modinfo aufs -d
# modinfo aufs --description
aufs -- Advanced multi layered unification filesystem
- license
modinfo aufs -l
# modinfo aufs --license
GPL
- filename
modinfo aufs -n
# modinfo aufs --filename
/lib/modules/4.15.0-47-generic/kernel/fs/aufs/aufs.ko
- Kernelのモジュール(Object file)
insmod
コマンド
- モジュールロード
INSMOD(8) insmod INSMOD(8)
NAME
insmod - Simple program to insert a module into the Linux Kernel
SYNOPSIS
insmod [filename] [module options...]
DESCRIPTION
insmod is a trivial program to insert a module into the kernel. Most
users will want to use modprobe(8) instead, which is more clever and
can handle module dependencies.
...
- 依存関係に対する配慮を自分で行う必要がある
-
modprobe
使え- 自動でロードしてくれる
rmmod
コマンド
RMMOD(8) rmmod RMMOD(8)
NAME
rmmod - Simple program to remove a module from the Linux Kernel
SYNOPSIS
rmmod [-f] [-s] [-v] [modulename]
DESCRIPTION
rmmod is a trivial program to remove a module (when module unloading
support is provided) from the kernel. Most users will want to use
modprobe(8) with the -r option instead.
...
-s, --syslog
Send errors to syslog instead of standard error.
...
-
主要なオプション
-
-s
- シスログに出力
-
-v
- verbose
-
modprobe -r
使え
...
-r, --remove
This option causes modprobe to remove rather than insert a module.
If the modules it depends on are also unused, modprobe will try to
remove them too. Unlike insertion, more than one module can be
specified on the command line (it does not make sense to specify
module parameters when removing modules).
There is usually no reason to remove modules, but some buggy
modules require it. Your distribution kernel may not have been
built to support removal of modules at all.
...
modprobe
コマンド
- ins/rmの上位互換
-
依存を調べて自動的にロードしてくれる
modules.dep
ファイル
MODPROBE(8) modprobe MODPROBE(8)
NAME
modprobe - Add and remove modules from the Linux Kernel
SYNOPSIS
modprobe [-v] [-V] [-C config-file] [-n] [-i] [-q] [-b] [modulename]
[module parameters...]
modprobe [-r] [-v] [-n] [-i] [modulename...]
modprobe [-c]
modprobe [--dump-modversions] [filename]
...
-
現在の設定表示
- めっちゃいっぱい出る
modprobe -c | head -n 10
# modprobe --showconfig | head -n 10
blacklist microcode
blacklist ath_pci
blacklist ohci1394
blacklist sbp2
blacklist dv1394
blacklist raw1394
blacklist video1394
blacklist aty128fb
blacklist atyfb
blacklist bochs_drm
...
- dryrun
-n, --dry-run, --show
This option does everything but actually insert or delete the
modules (or run the install or remove commands). Combined with -v,
it is useful for debugging problems. For historical reasons both
--dry-run and --show actually mean the same thing and are
interchangeable.
- はずす
modprobe -r -n bluetooth
- 怒られた
modprobe: FATAL: Module bluetooth is in use.
- 依存を考慮してロード
modprobe -n bluetooth
- verbose
modprobe -n -v bluetooth
- 設定ファイル設定する
modprobe -C <ファイル>
# modprobe --config <ファイル>
設定ファイル
man 5 modprobe.d
MODPROBE.D(5) modprobe.d MODPROBE.D(5)
NAME
modprobe.d - Configuration directory for modprobe
SYNOPSIS
/lib/modprobe.d/*.conf
/etc/modprobe.d/*.conf
/run/modprobe.d/*.conf
- 教科書的には
/etc/modprobe.conf
があることになっている - 手元のUbuntuでは
/etc/modprobe.d/
以下*.conf
ファイルで設定
ls /etc/modprobe.d
alsa-base.conf blacklist-oss.conf
amd64-microcode-blacklist.conf blacklist-rare-network.conf
blacklist-ath_pci.conf blacklist.conf
blacklist-firewire.conf intel-microcode-blacklist.conf
blacklist-framebuffer.conf iwlwifi.conf
blacklist-modem.conf
- 書式
コマンド | 意味 |
---|---|
alias | モジュールのエイリアス名 (ext4に対するfs-ext4とか) |
options | モジュールのオプション指定 |
install | 指定されたシェルコマンド実行 |
remove | modprobe -r が実行されたときに実行されるシェルコマンド |
依存性を定義するファイル
man 5 modules.dep
MODULES.DEP(5) modules.dep MODULES.DEP(5)
NAME
modules.dep, modules.dep.bin - Module dependency information
SYNOPSIS
/lib/modules/modules.dep
/lib/modules/modules.dep.bin
...
-
みてみる
- めっちゃいっぱいある
cat /lib/modules/4.15.0-47-generic/modules.dep
kernel/arch/x86/events/intel/intel-rapl-perf.ko:
kernel/arch/x86/events/intel/intel-cstate.ko:
kernel/arch/x86/kernel/cpu/mcheck/mce-inject.ko:
kernel/arch/x86/kernel/msr.ko:
kernel/arch/x86/kernel/cpuid.ko:
...
kernel/zfs/icp/icp.ko: kernel/zfs/spl/spl.ko
kernel/zfs/avl/zavl.ko:
kernel/zfs/zfs/zfs.ko: kernel/zfs/unicode/zunicode.ko kernel/zfs/avl/zavl.ko kernel/zfs/icp/icp.ko kernel/zfs/zcommon/zcommon.ko kernel/zfs/nvpair/znvpair.ko kernel/zfs/spl/spl.ko
kernel/zfs/splat/splat.ko: kernel/zfs/spl/spl.ko
- 書式
<依存元>:[ <依存先>[ <依存先2>[ ...]]]
depmod
コマンド
DEPMOD(8) depmod DEPMOD(8)
NAME
depmod - Generate modules.dep and map files.
...
-
modules.dep
ファイル作成-
/etc/modprobe.conf
等の設定を加味- モジュールのロードの前処理(install)
- モジュールのアンロードの後処理(remove)
- モジュールのパラメータ指定(options)
-
kmod
コマンド
KMOD(8) kmod KMOD(8)
NAME
kmod - Program to manage Linux Kernel modules
SYNOPSIS
kmod [OPTIONS...] [COMMAND] [COMMAND_OPTIONS...]
...
- カーネル機能の一部
- 必要なモジュールを自動的にロードする仕組み