LPIC level2 v4.5 あずき本 2.2 カーネルモジュールの管理

LPICLinux勉強メモ

出典: 

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

カーネルモジュール

  • カーネルを構成する機能を分離してモジュール化したもの
  • 主にデバイスドライバ

    • 多種多様な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...]
...       
  • カーネル機能の一部
  • 必要なモジュールを自動的にロードする仕組み