「カーネルモジュール」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
 
(→‎参照: update.)
 
(7人の利用者による、間の24版が非表示)
2行目: 2行目:
 
[[Category:ハードウェア検出とトラブルシューティング]]
 
[[Category:ハードウェア検出とトラブルシューティング]]
 
[[Category:ブートプロセス]]
 
[[Category:ブートプロセス]]
[[en:Kernel modules]]
+
[[bs:Kernel module]]
[[es:Kernel modules]]
+
[[de:Kernelmodule]]
  +
[[en:Kernel module]]
  +
[[es:Kernel module]]
 
[[fr:Kernel modules]]
 
[[fr:Kernel modules]]
[[it:Kernel modules]]
+
[[it:Kernel module]]
[[zh-CN:Kernel modules]]
+
[[pt:Kernel module]]
  +
[[ru:Kernel module]]
{{Related articles start (日本語)}}
 
  +
[[zh-hans:Kernel module]]
{{Related3|Boot debugging|ブートデバッグ}}
 
  +
{{Related articles start}}
  +
{{Related|ブートデバッグ}}
 
{{Related|カーネル}}
 
{{Related|カーネル}}
 
{{Related|カーネルパラメータ}}
 
{{Related|カーネルパラメータ}}
  +
{{Related|カーネルモジュールのコンパイル}}
 
{{Related articles end}}
 
{{Related articles end}}
   
[[Wikipedia:ja:ローダブル・カーネル・モジュール|カーネルモジュール]]は小さなコードの集まりであり要に応じてカーネルにロードアンロードことがきます。カーネルモジュールはシステムを再起動する必要なくカーネルの機能を拡張ます。
+
[[Wikipedia:Loadable_kernel_module|カーネルモジュール]] は、要に応じてカーネルにロードおよびアンロードできコードの一部です。これにより、システムを再起動する必要なくカーネルの機能を拡張することができます。
   
  +
カーネルモジュールを作成するには、[https://sysprog21.github.io/lkmpg/ The Linux Kernel Module Programming Guide] を参照してください。モジュールは、ビルトインまたはロード可能として設定できます。モジュールを動的にロードまたは削除するには、カーネルの設定でそのモジュールをロード可能なモジュールとして設定する必要があります(そのモジュールに関連する行には {{ic|M}} という文字が表示されます)。
== 概要 ==
 
   
  +
新しいカーネルがインストールされるときにカーネルモジュールを自動的に再構築するには、[[Dynamic Kernel Module Support]] (DKMS) を参照してください。
カーネルモジュールを作るには、[http://tldp.org/LDP/lkmpg/2.6/html/index.html このガイド] を読んで下さい。モジュールはビルトインすることもローダブルにすることもできます。動的にモジュールをロード・リムーブするには、カーネル設定でローダブルモジュールとして設定する必要があります (モジュールに関係する行には {{ic|M}} が表示されます)。
 
  +
  +
== 情報を取得 ==
   
 
モジュールは {{ic|/usr/lib/modules/''kernel_release''}} に保存されます。{{ic|uname -r}} コマンドを使うことで現在のカーネルのリリースバージョンを表示できます。
 
モジュールは {{ic|/usr/lib/modules/''kernel_release''}} に保存されます。{{ic|uname -r}} コマンドを使うことで現在のカーネルのリリースバージョンを表示できます。
   
 
{{Note|モジュール名にはよくアンダーバー ({{ic|_}}) やダッシュ ({{ic|-}}) が使われますが、{{ic|modprobe}} コマンドと {{ic|/etc/modprobe.d/}} の設定ファイルではこの2つの記号は相互に置き換え可能です。}}
 
{{Note|モジュール名にはよくアンダーバー ({{ic|_}}) やダッシュ ({{ic|-}}) が使われますが、{{ic|modprobe}} コマンドと {{ic|/etc/modprobe.d/}} の設定ファイルではこの2つの記号は相互に置き換え可能です。}}
 
== 情報を取得 ==
 
   
 
現在ロードされているカーネルモジュールを表示する:
 
現在ロードされているカーネルモジュールを表示する:
49行目: 54行目:
 
$ modprobe --show-depends ''module_name''
 
$ modprobe --show-depends ''module_name''
   
  +
== モジュールの自動ロード ==
== 設定 ==
 
   
今日、必要なモジュールのロードはて [[udev (日本語)|udev]] によって自動的に処理されているで、カーネルに含まれていないモジュールを使用する必要がないのならば起動時にロードするモジュールを設定ファイルに記述する必要はありません。ただし、ブートプロセスで追加のモジュールをロードしたり、コンピューターを正しく機能させるために他のモジュールをブラックリストに入れるなどの場合は考えられます。
+
今日、必要なモジュールのロードはすべて [[udev]] によって自動的に処理されます。したがっ、ツリー外のカーネルモジュールを使用する必要がない場合はブート時にロードする必要のあるモジュールを設定ファイルに記述する必要はありません。ただし、ブートプロセスで追加のモジュールをロードしたり、コンピューターを正しく機能させるために他のモジュールをブラックリストに入れるなどのケースが考えられます。
   
=== ロード ===
+
=== systemd ===
  +
カーネルモジュールを {{ic|/etc/modules-load.d/}} 配下のファイルに明示的にリストアップして、systemd が起動時にロードできるようにすることができます。各設定ファイルの名前の形式は {{ic|/etc/modules-load.d/''program''.conf}} です。設定ファイルにはロードするカーネルモジュール名のリストが改行で区切られて含まれています。空行と最初の非空白文字が {{ic|#}} または {{ic|;}} である行は無視されます。
 
起動時にロードする追加のカーネルモジュールは {{ic|/etc/modules-load.d/}} 下のファイルにリストとして設定します。それぞれの設定ファイルの名前の形式は {{ic|/etc/modules-load.d/<program>.conf}} です。設定ファイルにはロードするカーネルモジュールの名前の(行で区切られた)リストだけを記述します。空行や、最初の空白以外の文字が {{ic|#}} や {{ic|;}} の行は無視されます。
 
   
 
{{hc|/etc/modules-load.d/virtio-net.conf|
 
{{hc|/etc/modules-load.d/virtio-net.conf|
#起動時に virtio-net.ko をロード
+
# 起動時に virtio_net.ko をロード
  +
virtio_net}}
   
  +
詳しくは {{man|5|modules-load.d}} を参照してください。
virtio-net}}
 
   
  +
=== モジュールの早期ロード ===
詳しくは {{ic|modules-load.d(5)}} を見て下さい。
 
   
  +
[[initramfs]] イメージには、 {{ic|/etc/modules-load.d/}} で要求されたカーネルモジュールが含まれていない場合があります。また、そのフォルダに設定されているファイルが不足している場合もあります。モジュールの早期ロードは使用する initramfs ジェネレータに依存します。
=== モジュールオプションを設定する ===
 
  +
*{{pkg|mkinitcpio}}: [[Mkinitcpio#MODULES]] を参照してください。
  +
*{{pkg|dracut}}: [[Dracut#カーネルモジュールの早期ロード]] を参照してください。
  +
*{{pkg|booster}}: [[Booster#モジュールの早期ロード]] を参照してください。
   
  +
== 手動でモジュールを扱う ==
カーネルモジュールにパラメータを指定するために、modprobe の conf ファイルやカーネルコマンドラインを使うことができます。
 
   
  +
カーネルモジュールは {{Pkg|kmod}} パッケージによって提供されるツールを使って管理します。これらのツールは手動で使用できます。
==== /etc/modprobe.d/ 内のファイルを使う ====
 
  +
  +
{{Note|カーネルをアップグレードしたがまだ再起動していない場合、''modprobe'' はエラーメッセージなしで失敗し、コード 1 で終了します、これはパス {{ic|/usr/lib/modules/$(uname -r)/}} がもう存在しないためです。''modprobe'' が失敗したときにこのパスが存在するかどうか手動で確認してください。}}
  +
  +
モジュールをロードするには:
  +
  +
# modprobe ''module_name''
  +
  +
ファイル名でモジュールをロードするには(つまり、{{ic|/usr/lib/modules/$(uname -r)/}} にインストールされていないモジュール):
  +
  +
# insmod filename [args]
  +
  +
モジュールをアンロードするには:
  +
  +
# modprobe -r ''module_name''
  +
  +
もしくは:
  +
  +
# rmmod ''module_name''
  +
  +
== モジュールオプションを設定する ==
  +
  +
カーネル モジュールにパラメータを渡すには、modprobe を使用してパラメータを手動で渡すか、modprobe 設定ファイルまたはカーネルコマンド ラインを使用して特定のパラメータが常に適用されるようにすることができます。モジュールがカーネルに組み込まれている場合は、カーネル コマンド ラインを使用する必要があり、他の方法は機能しません。
  +
  +
=== ロード時に modprobe を使って手動で行う ===
  +
  +
モジュールにパラメータを渡す基本的な方法は、''modprobe'' コマンドを使用することです。パラメータはコマンドラインで単純な {{ic|1=''key=value''}} の代入で指定します。
  +
  +
# modprobe ''module_name parameter_name=parameter_value''
  +
  +
=== /etc/modprobe.d/ 内のファイルを使用する ===
  +
  +
{{ic|/etc/modprobe.d/}} ディレクトリ内のファイルは、[[udev]] にモジュール設定を渡すために使用できます。これにより、システムの起動時に {{ic|modprobe}} を使用してモジュールのロードを管理します。このディレクトリ内の設定ファイルは、''.conf'' 拡張子で終わる任意の名前を持つことができます。構文は次のとおりです:
  +
  +
{{hc|/etc/modprobe.d/myfilename.conf|2=
  +
options ''module_name parameter_name=parameter_value''
  +
}}
   
  +
複数のモジュールパラメータはスペースで区切られ、パラメータにはカンマで区切られた値のリストを指定できます:
システムブート中、{{ic|modprobe}} を使ってモジュールを管理する [[udev (日本語)|udev]] にモジュールの設定をわたすために {{ic|/etc/modprobe.d/}} ディレクトリ内のファイルが使われます。このディレクトリ内のファイルには {{ic|.conf}} 拡張子で終わる名前を付けます。構文は:
 
   
 
{{hc|/etc/modprobe.d/myfilename.conf|2=
 
{{hc|/etc/modprobe.d/myfilename.conf|2=
  +
options ''module_name param1=value1 param2=value2a,value2b …''
options modname parametername=parametervalue}}
 
  +
}}
   
 
例:
 
例:
   
 
{{hc|/etc/modprobe.d/thinkfan.conf|2=
 
{{hc|/etc/modprobe.d/thinkfan.conf|2=
  +
# ThinkPad では、'thinkfan' デーモンがファンの速度を制御できるようにします
# On Thinkpads, this lets the 'thinkfan' daemon control fan speed
 
  +
options thinkpad_acpi fan_control=1
  +
}}
   
  +
{{Note|影響を受けるモジュールが initramfs からロードされている場合、適切な ''.conf'' ファイルを [[mkinitcpio.conf]] の {{ic|FILES}} に追加するか、{{ic|modconf}} [[Mkinitcpio.conf#HOOKS|フック]] を使用してから、''.conf'' ファイルを含めるために [[initramfs の再生成]] を行う必要があります。デフォルトの initramfs の内容を確認するには、[[mkinitcpio#イメージの抽出|lsinitcpio]] を使用してください。}}
options thinkpad_acpi fan_control=1}}
 
   
  +
=== カーネルコマンドラインを使う ===
{{Note|影響を受けるモジュールが init ramdisk からロードされる場合、適切な {{ic|.conf}} ファイルを [[mkinitcpio (日本語)|mkinitcpio.conf]] の FILES に追加するか {{ic|modconf}} [[mkinitcpio (日本語)#HOOKS|hook]] を使うかして、ramdisk に含まれるようにする必要があります。}}
 
 
==== カーネルコマンドラインを使う ====
 
   
 
モジュールがカーネルに組み込まれている場合、モジュールにオプションを設定するのにカーネルコマンドラインを使うこともできます。一般的なブートローダでは次の構文を使って下さい:
 
モジュールがカーネルに組み込まれている場合、モジュールにオプションを設定するのにカーネルコマンドラインを使うこともできます。一般的なブートローダでは次の構文を使って下さい:
94行目: 139行目:
 
thinkpad_acpi.fan_control=1
 
thinkpad_acpi.fan_control=1
   
[[Kernel parameters (日本語)|カーネルパラメータ]]のページで説明されているようにして、あなたのブートローダのカーネルラインにこれを追加するだけです。
+
[[カーネルパラメータ]]のページで説明されているようにして、あなたのブートローダのカーネルラインにこれを追加するだけです。
   
=== エイリアス ===
+
== エイリアス ==
   
 
エイリアスによってモジュールに代わりの名前を付けることができます。例: {{ic|alias my-mod really_long_modulename}} で {{ic|modprobe really_long_modulename}} の代わりに {{ic|modprobe my-mod}} を使うことができるようになります。シェルのようにワイルドカードを使うこともできます。{{ic|alias my-mod* really_long_modulename}} で {{ic|modprobe my-mod-something}} が {{ic|modprobe really_long_modulename}} と同じ意味になります。エイリアスを作るには:
 
エイリアスによってモジュールに代わりの名前を付けることができます。例: {{ic|alias my-mod really_long_modulename}} で {{ic|modprobe really_long_modulename}} の代わりに {{ic|modprobe my-mod}} を使うことができるようになります。シェルのようにワイルドカードを使うこともできます。{{ic|alias my-mod* really_long_modulename}} で {{ic|modprobe my-mod-something}} が {{ic|modprobe really_long_modulename}} と同じ意味になります。エイリアスを作るには:
110行目: 155行目:
 
alias net-pf-31 off}}
 
alias net-pf-31 off}}
   
=== ブラックリスト ===
+
== ブラックリスト ==
   
 
カーネルモジュールで、ブラックリストとはカーネルモジュールをロードしないようにすることを指します。ブラックリストが役にたつのは、例えば、関連するハードウェアが必要ない場合や、モジュールをロードすると問題が発生する場合: 2つのカーネルモジュールが同じハードウェアをコントロールしようとして、互いにコンフリクトを生じる場合などです。
 
カーネルモジュールで、ブラックリストとはカーネルモジュールをロードしないようにすることを指します。ブラックリストが役にたつのは、例えば、関連するハードウェアが必要ない場合や、モジュールをロードすると問題が発生する場合: 2つのカーネルモジュールが同じハードウェアをコントロールしようとして、互いにコンフリクトを生じる場合などです。
   
いくつかのモジュールは [[mkinitcpio (日本語)|initramfs]] の一部としてロードされます。{{ic|mkinitcpio -M}} ですべての自動検出したモジュールを表示します: initramfs のモジュールのロードを止めるには、モジュールを {{ic|/etc/modprobe.d/modprobe.conf}} ブラックリスト入りさせてください。{{ic|mkinitcpio -v}} を実行することで様々なフック(例: ファイルシステムフック、SCSI フックなど)によって使われている全てのモジュールを一覧できます。モジュールをブラックリスト入りさせたら、{{ic|/etc/mkinitcpio.conf}} の FILES セクションに使った {{ic|.conf}} ファルを忘れずに追加して initramfs 生成し、それから再起動してください。
+
いくつかのモジュールは [[mkinitcpio|initramfs]] の一部としてロードされます。{{ic|mkinitcpio -M}} ですべての自動検出したモジュールを表示します: initramfs のモジュールのロードを止めるには、{{ic|/etc/modprobe.d/}} 中に {{ic|.conf}} ファイルを作成してモジュールをブラックリストに登録します。{{ic|mkinitcpio -v}} を実行することで様々なフック(例: ファイルシステムフック、SCSI フックなど)によって使われている全てのモジュールを一覧できます。モジュールをブラックリスト入りさせたら、[[mkinitcpio#イメージ作成とアティベーション|イメージを生成]]し、それから再起動してください。
   
  +
{{Note|{{ic|modconf}} [[mkinitcpio#HOOKS|フック]] が有効になっていない場合は、{{ic|/etc/mkinitcpio.conf}} の FILES セクションに使った {{ic|.conf}} ファイルを追加する必要があります。}}
==== /etc/modprobe.d/ 内のファイルを使う ====
 
  +
  +
=== /etc/modprobe.d/ 内のファイルを使う ===
   
 
{{ic|/etc/modprobe.d/}} 内に {{ic|.conf}} ファイルを作成し、{{ic|blacklist}} キーワードを使って一行ずつブラックリスト入りさせたいモジュールを追加します。例えば {{ic|pcspkr}} モジュールをロードさせたくない場合:
 
{{ic|/etc/modprobe.d/}} 内に {{ic|.conf}} ファイルを作成し、{{ic|blacklist}} キーワードを使って一行ずつブラックリスト入りさせたいモジュールを追加します。例えば {{ic|pcspkr}} モジュールをロードさせたくない場合:
122行目: 169行目:
 
{{hc|/etc/modprobe.d/nobeep.conf|
 
{{hc|/etc/modprobe.d/nobeep.conf|
 
# Do not load the 'pcspkr' module on boot
 
# Do not load the 'pcspkr' module on boot
 
 
blacklist pcspkr}}
 
blacklist pcspkr}}
   
131行目: 177行目:
 
{{hc|/etc/modprobe.d/blacklist.conf|
 
{{hc|/etc/modprobe.d/blacklist.conf|
 
...
 
...
install ''module_name'' /bin/false
+
install ''module_name'' /bin/true
 
...}}
 
...}}
   
 
事実上の、モジュールとそれが必要な他のモジュールのブラックリスト化になります。}}
 
事実上の、モジュールとそれが必要な他のモジュールのブラックリスト化になります。}}
   
  +
{{Note|複数のモジュールをブラックリスト入りさせるときは、カンマで分割することを覚えておいて下さい。スペースなどを使うとシンタックスを破壊してしまうおそれがあります。}}
==== カーネルコマンドラインを使う ====
 
  +
  +
=== カーネルコマンドラインを使う ===
   
 
{{Tip|問題のあるモジュールによってシステムが起動できない場合、この方法が役に立つでしょう。}}
 
{{Tip|問題のあるモジュールによってシステムが起動できない場合、この方法が役に立つでしょう。}}
142行目: 190行目:
 
ブートローダでモジュールをブラックリスト入りさせることもできます。
 
ブートローダでモジュールをブラックリスト入りさせることもできます。
   
[[Kernel parameters (日本語)|カーネルパラメータ]]のページで説明されているようにして、あなたのブートローダのカーネルラインに {{ic|1=modprobe.blacklist=modname1,modname2,modname3}} を追加するだけです。
+
[[カーネルパラメータ]]のページで説明されているようにして、あなたのブートローダのカーネルラインに {{ic|1=module_blacklist=modname1,modname2,modname3}} を追加するだけです。
   
  +
{{Note|
{{Note|複数のモジュールをブラックリスト入りさせるときは、カンマで分割することを覚えておいて下さい。スペースなどを使うとシンタックスを破壊してしまうおそれがあります。}}
 
  +
* 複数のモジュールをブラックリスト入りさせるときは、カンマで分割することを覚えておいて下さい。スペースなどを使うとシンタックスを破壊してしまうおそれがあります。
  +
* {{ic|module_blacklist}} を使用すると、カーネルはそのモジュールのロードを完全に拒否します。暗黙のロードを防ぎたいだけで、後で手動でモジュールをロードする可能性がある場合は、正しいパラメータは {{ic|1=modprobe.blacklist=modname1,modname2,modname3}} です。ただし、これでは、たとえば[[#systemd|systemd]] や他のモジュールによる起動中の明示的なロードを防ぐことはできません。
  +
}}
   
== 手動でモジュールを扱う ==
+
== トラブルシューティング ==
   
  +
=== モジュールがロードされない ===
カーネルモジュールは {{Pkg|kmod}} パッケージによって提供されるツールを使って管理します。これらのツールは手動で使用できます。
 
   
  +
特定のモジュールがロードされない場合、起動ログ ({{ic|journalctl -b}} で見れます) にモジュールがブラックリストに入っていると書かれているのに {{ic|/etc/modprobe.d/}} ディレクトリには該当するエントリが存在しないとき、{{ic|/usr/lib/modprobe.d/}} にある他の modprobe ソースファイルにブラックリストのエントリがないか確認してください。
モジュールをロードするには:
 
   
  +
カーネルモジュールに含まれている "vermagic" 文字列が、現在実行中のカーネルの値と一致しない場合もモジュールはロードされません。カーネルとモジュールの互換性に問題がないという確証があるときは {{ic|modprobe --force-vermagic}} で "vermagic" のチェックを無視させることができます。
# modprobe ''module_name''
 
   
  +
{{warning|カーネルモジュールのバージョンチェックを無視するとカーネルがクラッシュしたり、システムが予期しない挙動を見せる可能性があります。{{ic|--force-vermagic}} を使うときは細心の注意を払ってください。}}
モジュールをアンロードするには:
 
 
# modprobe -r ''module_name''
 
 
もしくは:
 
 
# rmmod ''module_name''
 
 
設定ファイルをリロードするには:
 
 
# systemctl restart systemd-modules-load.service
 
 
== Tips and tricks ==
 
 
=== モジュールパラメータを一覧する Bash 関数 ===
 
 
root 権限で実行することで、現在のパラメータ値を含む、現在ロードされているモジュールと全てのパラメータの一覧を表示する関数です。{{ic|/proc/modules}} を使って現在ロードされているモジュールの一覧を取得して、モジュールファイルに modinfo で直接アクセスしてモジュールや(可能ならば)パラメータの説明を引き出し、最後に sysfs ファイルシステムにアクセスして実際のパラメータ名と現在の値を取得しています。
 
 
{{bc|<nowiki>
 
function aa_mod_parameters ()
 
{
 
N=/dev/null;
 
C=`tput op` O=$(echo -en "\n`tput setaf 2`>>> `tput op`");
 
for mod in $(cat /proc/modules|cut -d" " -f1);
 
do
 
md=/sys/module/$mod/parameters;
 
[[ ! -d $md ]] && continue;
 
m=$mod;
 
d=`modinfo -d $m 2>$N | tr "\n" "\t"`;
 
echo -en "$O$m$C";
 
[[ ${#d} -gt 0 ]] && echo -n " - $d";
 
echo;
 
for mc in $(cd $md; echo *);
 
do
 
de=`modinfo -p $mod 2>$N | grep ^$mc 2>$N|sed "s/^$mc=//" 2>$N`;
 
echo -en "\t$mc=`cat $md/$mc 2>$N`";
 
[[ ${#de} -gt 1 ]] && echo -en " - $de";
 
echo;
 
done;
 
done
 
}</nowiki>}}
 
 
アウトプットのサンプル:
 
 
{{hc|# aa_mod_parameters|2=
 
>>> ehci_hcd - USB 2.0 'Enhanced' Host Controller (EHCI) Driver
 
hird=0 - hird:host initiated resume duration, +1 for each 75us (int)
 
ignore_oc=N - ignore_oc:ignore bogus hardware overcurrent indications (bool)
 
log2_irq_thresh=0 - log2_irq_thresh:log2 IRQ latency, 1-64 microframes (int)
 
park=0 - park:park setting; 1-3 back-to-back async packets (uint)
 
 
>>> processor - ACPI Processor Driver
 
ignore_ppc=-1 - ignore_ppc:If the frequency of your machine gets wronglylimited by BIOS, this should help (int)
 
ignore_tpc=0 - ignore_tpc:Disable broken BIOS _TPC throttling support (int)
 
latency_factor=2 - latency_factor: (uint)
 
 
>>> usb_storage - USB Mass Storage driver for Linux
 
delay_use=1 - delay_use:seconds to delay before using a new device (uint)
 
option_zero_cd=1 - option_zero_cd:ZeroCD mode (1=Force Modem (default), 2=Allow CD-Rom (uint)
 
quirks= - quirks:supplemental list of device IDs and their quirks (string)
 
swi_tru_install=1 - swi_tru_install:TRU-Install mode (1=Full Logic (def), 2=Force CD-Rom, 3=Force Modem) (uint)
 
 
>>> video - ACPI Video Driver
 
allow_duplicates=N - allow_duplicates: (bool)
 
brightness_switch_enabled=Y - brightness_switch_enabled: (bool)
 
use_bios_initial_backlight=Y - use_bios_initial_backlight: (bool)}}
 
   
 
== 参照 ==
 
== 参照 ==
   
* [http://linuxmanpages.com/man5/modprobe.conf.5.php modprobe man ページ]
 
 
* [[PC スピーカーのビープ音の無効化]]
 
* [[PC スピーカーのビープ音の無効化]]
  +
* [https://lwn.net/Articles/391230/ Writing a WMI driver] - an LWM introduction
  +
  +
{{TranslationStatus|Kernel module|2024-08-23|803682}}

2024年8月23日 (金) 18:50時点における最新版

関連記事

カーネルモジュール は、要求に応じてカーネルにロードおよびアンロードできるコードの一部です。これにより、システムを再起動する必要なく、カーネルの機能を拡張することができます。

カーネルモジュールを作成するには、The Linux Kernel Module Programming Guide を参照してください。モジュールは、ビルトインまたはロード可能として設定できます。モジュールを動的にロードまたは削除するには、カーネルの設定でそのモジュールをロード可能なモジュールとして設定する必要があります(そのモジュールに関連する行には M という文字が表示されます)。

新しいカーネルがインストールされるときにカーネルモジュールを自動的に再構築するには、Dynamic Kernel Module Support (DKMS) を参照してください。

情報を取得

モジュールは /usr/lib/modules/kernel_release に保存されます。uname -r コマンドを使うことで現在のカーネルのリリースバージョンを表示できます。

ノート: モジュール名にはよくアンダーバー (_) やダッシュ (-) が使われますが、modprobe コマンドと /etc/modprobe.d/ の設定ファイルではこの2つの記号は相互に置き換え可能です。

現在ロードされているカーネルモジュールを表示する:

$ lsmod

モジュールについての情報を表示する:

$ modinfo module_name

ロードされたモジュールに設定されたオプションを一覧する:

$ systool -v -m module_name

全てのモジュールの全ての設定を表示する:

$ modprobe -c | less

特定のモジュールの設定を表示する:

$ modprobe -c | grep module_name

モジュール自身を含む、モジュール(やエイリアス)の依存関係を一覧する:

$ modprobe --show-depends module_name

モジュールの自動ロード

今日、必要なモジュールのロードはすべて udev によって自動的に処理されます。したがって、ツリー外のカーネルモジュールを使用する必要がない場合は、ブート時にロードする必要のあるモジュールを設定ファイルに記述する必要はありません。ただし、ブートプロセスで追加のモジュールをロードしたり、コンピューターを正しく機能させるために他のモジュールをブラックリストに入れるなどのケースが考えられます。

systemd

カーネルモジュールを /etc/modules-load.d/ 配下のファイルに明示的にリストアップして、systemd が起動時にロードできるようにすることができます。各設定ファイルの名前の形式は /etc/modules-load.d/program.conf です。設定ファイルにはロードするカーネルモジュール名のリストが改行で区切られて含まれています。空行と最初の非空白文字が # または ; である行は無視されます。

/etc/modules-load.d/virtio-net.conf
# 起動時に virtio_net.ko をロード
virtio_net

詳しくは modules-load.d(5) を参照してください。

モジュールの早期ロード

initramfs イメージには、 /etc/modules-load.d/ で要求されたカーネルモジュールが含まれていない場合があります。また、そのフォルダに設定されているファイルが不足している場合もあります。モジュールの早期ロードは使用する initramfs ジェネレータに依存します。

手動でモジュールを扱う

カーネルモジュールは kmod パッケージによって提供されるツールを使って管理します。これらのツールは手動で使用できます。

ノート: カーネルをアップグレードしたがまだ再起動していない場合、modprobe はエラーメッセージなしで失敗し、コード 1 で終了します、これはパス /usr/lib/modules/$(uname -r)/ がもう存在しないためです。modprobe が失敗したときにこのパスが存在するかどうか手動で確認してください。

モジュールをロードするには:

# modprobe module_name

ファイル名でモジュールをロードするには(つまり、/usr/lib/modules/$(uname -r)/ にインストールされていないモジュール):

# insmod filename [args]

モジュールをアンロードするには:

# modprobe -r module_name

もしくは:

# rmmod module_name

モジュールオプションを設定する

カーネル モジュールにパラメータを渡すには、modprobe を使用してパラメータを手動で渡すか、modprobe 設定ファイルまたはカーネルコマンド ラインを使用して特定のパラメータが常に適用されるようにすることができます。モジュールがカーネルに組み込まれている場合は、カーネル コマンド ラインを使用する必要があり、他の方法は機能しません。

ロード時に modprobe を使って手動で行う

モジュールにパラメータを渡す基本的な方法は、modprobe コマンドを使用することです。パラメータはコマンドラインで単純な key=value の代入で指定します。

# modprobe module_name parameter_name=parameter_value

/etc/modprobe.d/ 内のファイルを使用する

/etc/modprobe.d/ ディレクトリ内のファイルは、udev にモジュール設定を渡すために使用できます。これにより、システムの起動時に modprobe を使用してモジュールのロードを管理します。このディレクトリ内の設定ファイルは、.conf 拡張子で終わる任意の名前を持つことができます。構文は次のとおりです:

/etc/modprobe.d/myfilename.conf
options module_name parameter_name=parameter_value

複数のモジュールパラメータはスペースで区切られ、パラメータにはカンマで区切られた値のリストを指定できます:

/etc/modprobe.d/myfilename.conf
options module_name param1=value1 param2=value2a,value2b …

例:

/etc/modprobe.d/thinkfan.conf
# ThinkPad では、'thinkfan' デーモンがファンの速度を制御できるようにします
options thinkpad_acpi fan_control=1
ノート: 影響を受けるモジュールが initramfs からロードされている場合、適切な .conf ファイルを mkinitcpio.confFILES に追加するか、modconf フック を使用してから、.conf ファイルを含めるために initramfs の再生成 を行う必要があります。デフォルトの initramfs の内容を確認するには、lsinitcpio を使用してください。

カーネルコマンドラインを使う

モジュールがカーネルに組み込まれている場合、モジュールにオプションを設定するのにカーネルコマンドラインを使うこともできます。一般的なブートローダでは次の構文を使って下さい:

modname.parametername=parametercontents

例:

thinkpad_acpi.fan_control=1

カーネルパラメータのページで説明されているようにして、あなたのブートローダのカーネルラインにこれを追加するだけです。

エイリアス

エイリアスによってモジュールに代わりの名前を付けることができます。例: alias my-mod really_long_modulenamemodprobe really_long_modulename の代わりに modprobe my-mod を使うことができるようになります。シェルのようにワイルドカードを使うこともできます。alias my-mod* really_long_modulenamemodprobe my-mod-somethingmodprobe really_long_modulename と同じ意味になります。エイリアスを作るには:

/etc/modprobe.d/myalias.conf
alias mymod really_long_module_name

モジュールによっては、アプリケーションがモジュールを必要としたときに自動でロードするためにエイリアスが設定されているものもあります。こういったエイリアスを無効化すると自動ロードも止まります。ただし手動でモジュールをロードすることはできます。

/etc/modprobe.d/modprobe.conf
# Prevent Bluetooth autoload

alias net-pf-31 off

ブラックリスト

カーネルモジュールで、ブラックリストとはカーネルモジュールをロードしないようにすることを指します。ブラックリストが役にたつのは、例えば、関連するハードウェアが必要ない場合や、モジュールをロードすると問題が発生する場合: 2つのカーネルモジュールが同じハードウェアをコントロールしようとして、互いにコンフリクトを生じる場合などです。

いくつかのモジュールは initramfs の一部としてロードされます。mkinitcpio -M ですべての自動検出したモジュールを表示します: initramfs のモジュールのロードを止めるには、/etc/modprobe.d/ 中に .conf ファイルを作成してモジュールをブラックリストに登録します。mkinitcpio -v を実行することで様々なフック(例: ファイルシステムフック、SCSI フックなど)によって使われている全てのモジュールを一覧できます。モジュールをブラックリスト入りさせたら、イメージを生成し、それから再起動してください。

ノート: modconf フック が有効になっていない場合は、/etc/mkinitcpio.conf の FILES セクションに使った .conf ファイルを追加する必要があります。

/etc/modprobe.d/ 内のファイルを使う

/etc/modprobe.d/ 内に .conf ファイルを作成し、blacklist キーワードを使って一行ずつブラックリスト入りさせたいモジュールを追加します。例えば pcspkr モジュールをロードさせたくない場合:

/etc/modprobe.d/nobeep.conf
# Do not load the 'pcspkr' module on boot
blacklist pcspkr
ノート: blacklist コマンドはモジュールをブラックリスト入りさせて自動でロードしないようにしますが、他のブラックリスト入りしてないモジュールによって必要になった場合、モジュールがロードされることがあります。また、手動でモジュールをロードすることも可能です。

しかしながら、この挙動を変えることが可能です; install コマンドを使って、modprobe に通常通りカーネルでモジュールを挿入する代わりにカスタムコマンドを実行させることで、いつでもモジュールのロードが失敗するように強制することができます:

/etc/modprobe.d/blacklist.conf
...
install module_name /bin/true
...
事実上の、モジュールとそれが必要な他のモジュールのブラックリスト化になります。
ノート: 複数のモジュールをブラックリスト入りさせるときは、カンマで分割することを覚えておいて下さい。スペースなどを使うとシンタックスを破壊してしまうおそれがあります。

カーネルコマンドラインを使う

ヒント: 問題のあるモジュールによってシステムが起動できない場合、この方法が役に立つでしょう。

ブートローダでモジュールをブラックリスト入りさせることもできます。

カーネルパラメータのページで説明されているようにして、あなたのブートローダのカーネルラインに module_blacklist=modname1,modname2,modname3 を追加するだけです。

ノート:
  • 複数のモジュールをブラックリスト入りさせるときは、カンマで分割することを覚えておいて下さい。スペースなどを使うとシンタックスを破壊してしまうおそれがあります。
  • module_blacklist を使用すると、カーネルはそのモジュールのロードを完全に拒否します。暗黙のロードを防ぎたいだけで、後で手動でモジュールをロードする可能性がある場合は、正しいパラメータは modprobe.blacklist=modname1,modname2,modname3 です。ただし、これでは、たとえばsystemd や他のモジュールによる起動中の明示的なロードを防ぐことはできません。

トラブルシューティング

モジュールがロードされない

特定のモジュールがロードされない場合、起動ログ (journalctl -b で見れます) にモジュールがブラックリストに入っていると書かれているのに /etc/modprobe.d/ ディレクトリには該当するエントリが存在しないとき、/usr/lib/modprobe.d/ にある他の modprobe ソースファイルにブラックリストのエントリがないか確認してください。

カーネルモジュールに含まれている "vermagic" 文字列が、現在実行中のカーネルの値と一致しない場合もモジュールはロードされません。カーネルとモジュールの互換性に問題がないという確証があるときは modprobe --force-vermagic で "vermagic" のチェックを無視させることができます。

警告: カーネルモジュールのバージョンチェックを無視するとカーネルがクラッシュしたり、システムが予期しない挙動を見せる可能性があります。--force-vermagic を使うときは細心の注意を払ってください。

参照

翻訳ステータス: このページは en:Kernel module の翻訳バージョンです。最後の翻訳日は 2024-08-23 です。もし英語版に 変更 があれば、翻訳の同期を手伝うことができます。