GNU/Linux >> Linux の 問題 >  >> Cent OS

Linux でのカーネル モジュール構成の初心者向けガイド

Linux カーネルは、ブート ローダーによってメモリにロードされます。カーネル モジュールは、オンデマンドで動的にロードおよびアンロードされます。これらは、カーネルが新しいハードウェアにアクセスできるようにするデバイス ドライバーを提供し、さまざまなファイル システム タイプをサポートし、一般的にカーネルの機能を拡張します。

ロードされたカーネル モジュールの一覧表示

現在カーネルにロードされているカーネル モジュールを一覧表示するには、lsmod を使用します。 指図。このコマンドは、/proc/modules を読み取って出力を生成します。 ファイル。例:

# lsmod
Module                  Size  Used by
ip_tables              27115  5 iptable_security,iptable_filter,iptable_mangle,iptable_nat,iptable_raw
xfs                   985426  2 
libcrc32c              12644  1 xfs
...

使用者 列には、モジュールとそれが依存する他のモジュールを使用しているプロセスの総数が示され、その後にそれらの依存モジュールのリストが続きます。

kmod パッケージ

lsmod コマンドと、modinfo、modprobe、depmod、insmod、rmmod などのその他のカーネル モジュール ファイルとユーティリティ kmod パッケージで提供されます:

# rpm -qf /sbin/lsmod 
kmod-20-9.el7.x86_64

kmod パッケージによって提供されるすべてのファイルを一覧表示するには、次のように入力します。

# rpm -ql kmod
/etc/depmod.d
/etc/depmod.d/dist.conf
/etc/modprobe.d
/usr/bin/kmod
/usr/lib/modprobe.d
/usr/sbin/depmod
/usr/sbin/insmod
/usr/sbin/lsmod
/usr/sbin/modinfo
/usr/sbin/modprobe
/usr/sbin/rmmod
/usr/sbin/weak-modules
/usr/share/bash-completion/completions/kmod
/usr/share/doc/kmod-20
/usr/share/doc/kmod-20/COPYING
/usr/share/doc/kmod-20/NEWS
/usr/share/doc/kmod-20/README
/usr/share/doc/kmod-20/TODO
/usr/share/man/man5/depmod.d.5.gz
/usr/share/man/man5/modprobe.conf.5.gz
/usr/share/man/man5/modprobe.d.5.gz
/usr/share/man/man5/modules.dep.5.gz
/usr/share/man/man5/modules.dep.bin.5.gz
/usr/share/man/man8/depmod.8.gz
/usr/share/man/man8/insmod.8.gz
/usr/share/man/man8/kmod.8.gz
/usr/share/man/man8/lsmod.8.gz
/usr/share/man/man8/modinfo.8.gz
/usr/share/man/man8/modprobe.8.gz
/usr/share/man/man8/rmmod.8.gz

モジュールの詳細の一覧表示

modinfo コマンドは、特定のカーネル モジュールに関する詳細情報を表示します。たとえば、iptables カーネル モジュールに関する情報を表示するには、次のように入力します。

# modinfo ip_tables
filename:       /lib/modules/3.10.0-514.el7.x86_64/kernel/net/ipv4/netfilter/ip_tables.ko
description:    IPv4 packet filter
author:         Netfilter Core Team [[email protected]]
license:        GPL
rhelversion:    7.3
srcversion:     EDBAB32FC38D6942C83A4B1
depends:        
intree:         Y
vermagic:       3.10.0-514.el7.x86_64 SMP mod_unload modversions 
signer:         CentOS Linux kernel signing key
sig_key:        D4:88:63:A7:C1:6F:CC:27:41:23:E6:29:8F:74:F0:57:AF:19:FC:54
sig_hashalgo:   sha256

ここでは、
ファイル名 :カーネル オブジェクト ファイルの絶対パス
説明 :モジュールの簡単な説明
エイリアス :モジュールの内部エイリアス名 (存在する場合)
依存 :このモジュールが依存するモジュールのコンマ区切りリスト (存在する場合)
parm :パラメータ名と簡単な説明

モジュールは /lib/modules/[kernel_version]/kernel からロードされます ディレクトリ。たとえば、ip_tables カーネル オブジェクト ファイルの絶対パスを表示するには、次のようにします。

# modinfo -n ip_tables
/lib/modules/3.10.0-514.el7.x86_64/kernel/net/ipv4/netfilter/ip_tables.ko

カーネル モジュールのロードとアンロード

モジュールのロード
カーネル モジュールは、modprobe コマンドを使用してロードされます。 Linux カーネルのデバイス マネージャーである udev は、modprobe を使用して、自動的に検出されたハードウェアのドライバーを読み込みます。たとえば、カーネル モジュール ip_tables をロードするには:

# modprobe ip_tables

モジュールがロードされたことを確認するには:

# lsmod | grep ip_tables
ip_tables              27115  5 iptable_security,iptable_filter,iptable_mangle,iptable_nat,iptable_raw

依存モジュールが最初にロードされます。 modprobe –v を使用 (詳細) カーネルモジュールをロードするときの依存関係の解決を表示します。例:

# modprobe -v nfs
insmod /lib/modules/3.10.0-514.el7.x86_64/kernel/fs/fscache/fscache.ko 
insmod /lib/modules/3.10.0-514.el7.x86_64/kernel/fs/nfs/nfs.ko
注意 :modprobe は insmod コマンドを使用してモジュールをカーネルにロードします。ただし、このコマンドは依存関係を解決しないため、insmod は使用しないでください。

モジュールのアンロード
modprobe –r を使用してカーネル モジュールをアンロードします 指図。詳細オプションを使用することもできます。たとえば、nfs カーネル モジュールをアンロードするには、次のように入力します。

# modprobe -rv nfs
rmmod nfs
rmmod fscache
注意 :modprobe –r コマンドは、rmmod を使用してモジュールをアンロードします。ただし、insmod と同様に、rmmod を直接使用してカーネル モジュールをアンロードすることはお勧めしません。

モジュールは逆の順序でアンロードされます。最初に nfs.ko カーネル モジュールがアンロードされ、その後に依存していたモジュールが続きます。プロセスによって使用されているモジュール、または他のロード済みモジュールが必要とするモジュールはアンロードされません。

カーネル モジュール パラメータ

カーネルが起動時のパラメーターを受け入れてカーネルの動作を変更できるように、カーネル モジュールもパラメーターを受け入れて動作を変更できます。 modprobe を使用してパラメーターをカーネル モジュールに渡す構文は次のとおりです。

# modprobe [module_name] [parameter=value]

ペアをスペースで区切ることにより、複数の parameter=value ペアを渡すことができます。 modprobe はモジュールをリロードしないため、モジュールが以前にロードされていないことを確認してください。

modprobe の構成ディレクトリ

modprobe の設定ディレクトリは /etc/modprobe.d です。 /etc/modprobe.d に *.conf ファイルを作成して、次のことを行います。
– オプションを指定します
– エイリアスを作成します
– 通常の modprobe の動作をオーバーライドします
– カーネル モジュールをブラックリストに登録します

これらの .conf ファイルの形式は、1 行に 1 つのコマンドです。これらのファイルで使用できる有効なコマンドは次のとおりです:

alias, options, install, remove, blacklist

エイリアス

構文 alias alias_name module_name を使用して、カーネル モジュールの代替名を作成します。エイリアス名にシェル ワイルドカードを使用することもできます。例:

alias usbdevfs usbcore

オプション

オプションを module_name に追加するには、構文 options module_name option(s) を使用します。例:

options b43 nohwcrypt=1 qos=0

インストール

構文 install module_name command(s) を使用して、カーネルにモジュールを挿入するのではなく、シェル コマンドを実行するように modprobe に指示します。例:

install net-pf-6 /bin/true

削除

これは install コマンドに似ていますが、「modprobe –r」の実行時に呼び出される点が異なります。構文 remove module_name command(s) を使用して、カーネルからモジュールをアンロードするのではなく、シェル コマンドを実行するように「modprobe –r」に指示します。

ブラックリスト

モジュールの内部エイリアスを無視するように modprobe に指示するには、構文 blacklist module_name を使用します。内部エイリアスは、modinfo [module_name] コマンドを使用したときに表示されるものです。 blacklist キーワードは通常、関連付けられたハードウェアが不要な場合、または 2 つ以上のモジュールが同じデバイスをサポートしている場合、またはモジュールがデバイスをサポートしていると主張するのが無効な場合に使用されます。

詳細については、modprobe.d の man ページを参照してください。

# man modprobe.d


Cent OS
  1. Linuxブートアップ構成

  2. Linux LKM ローダブル カーネル モジュールを作成、コンパイル、ロードする方法

  3. Linux での Udev の初心者向けガイド

  1. なしでは生きていけないLinuxカーネルモジュール

  2. Linux カーネル タイマーの変更

  3. Linux の汚染されたカーネルとは何ですか?

  1. Linux – Linuxの汚染されたカーネル?

  2. Samba 初心者向けガイド (インストールと構成)

  3. Linux でのスワップ領域管理の初心者向けガイド