「カーネルモジュール」の版間の差分
Kusanaginoturugi (トーク | 投稿記録) (→参照: update.) |
|||
(7人の利用者による、間の23版が非表示) | |||
2行目: | 2行目: | ||
[[Category:ハードウェア検出とトラブルシューティング]] |
[[Category:ハードウェア検出とトラブルシューティング]] |
||
[[Category:ブートプロセス]] |
[[Category:ブートプロセス]] |
||
− | [[ |
+ | [[bs:Kernel module]] |
− | [[ |
+ | [[de:Kernelmodule]] |
+ | [[en:Kernel module]] |
||
+ | [[es:Kernel module]] |
||
[[fr:Kernel modules]] |
[[fr:Kernel modules]] |
||
− | [[it:Kernel |
+ | [[it:Kernel module]] |
− | [[ |
+ | [[pt:Kernel module]] |
+ | [[ru:Kernel module]] |
||
+ | [[zh-hans:Kernel module]] |
||
{{Related articles start}} |
{{Related articles start}} |
||
− | {{ |
+ | {{Related|ブートデバッグ}} |
{{Related|カーネル}} |
{{Related|カーネル}} |
||
{{Related|カーネルパラメータ}} |
{{Related|カーネルパラメータ}} |
||
+ | {{Related|カーネルモジュールのコンパイル}} |
||
{{Related articles end}} |
{{Related articles end}} |
||
− | [[Wikipedia: |
+ | [[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]] によって自動的に処理されます。したがって、ツリー外のカーネルモジュールを使用する必要がない場合は、ブート時にロードする必要のあるモジュールを設定ファイルに記述する必要はありません。ただし、ブートプロセスで追加のモジュールをロードしたり、コンピューターを正しく機能させるために他のモジュールをブラックリストに入れるなどのケースが考えられます。 |
− | === |
+ | === 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}} |
||
+ | 詳しくは {{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'' が失敗したときにこのパスが存在するかどうか手動で確認してください。}} |
||
− | システムブート中、{{ic|modprobe}} を使ってモジュールを管理する [[udev|udev]] にモジュールの設定をわたすために {{ic|/etc/modprobe.d/}} ディレクトリ内のファイルが使われます。このディレクトリ内のファイルには {{ic|.conf}} 拡張子で終わる名前を付けます。構文は: |
||
+ | |||
+ | モジュールをロードするには: |
||
+ | |||
+ | # 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= |
{{hc|/etc/modprobe.d/myfilename.conf|2= |
||
+ | options ''module_name parameter_name=parameter_value'' |
||
− | options modname parametername=parametervalue}} |
||
+ | }} |
||
+ | |||
+ | 複数のモジュールパラメータはスペースで区切られ、パラメータにはカンマで区切られた値のリストを指定できます: |
||
+ | |||
+ | {{hc|/etc/modprobe.d/myfilename.conf|2= |
||
+ | options ''module_name param1=value1 param2=value2a,value2b …'' |
||
+ | }} |
||
例: |
例: |
||
{{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 |
||
− | |||
+ | }} |
||
− | options thinkpad_acpi fan_control=1}} |
||
− | {{Note|影響を受けるモジュールが |
+ | {{Note|影響を受けるモジュールが initramfs からロードされている場合、適切な ''.conf'' ファイルを [[mkinitcpio.conf]] の {{ic|FILES}} に追加するか、{{ic|modconf}} [[Mkinitcpio.conf#HOOKS|フック]] を使用してから、''.conf'' ファイルを含めるために [[initramfs の再生成]] を行う必要があります。デフォルトの initramfs の内容を確認するには、[[mkinitcpio#イメージの抽出|lsinitcpio]] を使用してください。}} |
− | + | === カーネルコマンドラインを使う === |
|
モジュールがカーネルに組み込まれている場合、モジュールにオプションを設定するのにカーネルコマンドラインを使うこともできます。一般的なブートローダでは次の構文を使って下さい: |
モジュールがカーネルに組み込まれている場合、モジュールにオプションを設定するのにカーネルコマンドラインを使うこともできます。一般的なブートローダでは次の構文を使って下さい: |
||
96行目: | 141行目: | ||
[[カーネルパラメータ]]のページで説明されているようにして、あなたのブートローダのカーネルラインにこれを追加するだけです。 |
[[カーネルパラメータ]]のページで説明されているようにして、あなたのブートローダのカーネルラインにこれを追加するだけです。 |
||
− | + | == エイリアス == |
|
エイリアスによってモジュールに代わりの名前を付けることができます。例: {{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 のモジュールのロードを止めるには、 |
+ | いくつかのモジュールは [[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/ |
+ | install ''module_name'' /bin/true |
...}} |
...}} |
||
事実上の、モジュールとそれが必要な他のモジュールのブラックリスト化になります。}} |
事実上の、モジュールとそれが必要な他のモジュールのブラックリスト化になります。}} |
||
+ | {{Note|複数のモジュールをブラックリスト入りさせるときは、カンマで分割することを覚えておいて下さい。スペースなどを使うとシンタックスを破壊してしまうおそれがあります。}} |
||
− | ==== カーネルコマンドラインを使う ==== |
||
+ | |||
+ | === カーネルコマンドラインを使う === |
||
{{Tip|問題のあるモジュールによってシステムが起動できない場合、この方法が役に立つでしょう。}} |
{{Tip|問題のあるモジュールによってシステムが起動できない場合、この方法が役に立つでしょう。}} |
||
142行目: | 190行目: | ||
ブートローダでモジュールをブラックリスト入りさせることもできます。 |
ブートローダでモジュールをブラックリスト入りさせることもできます。 |
||
− | [[ |
+ | [[カーネルパラメータ]]のページで説明されているようにして、あなたのブートローダのカーネルラインに {{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
コマンドを使うことで現在のカーネルのリリースバージョンを表示できます。
現在ロードされているカーネルモジュールを表示する:
$ 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 ジェネレータに依存します。
- mkinitcpio: Mkinitcpio#MODULES を参照してください。
- dracut: Dracut#カーネルモジュールの早期ロード を参照してください。
- booster: Booster#モジュールの早期ロード を参照してください。
手動でモジュールを扱う
カーネルモジュールは kmod パッケージによって提供されるツールを使って管理します。これらのツールは手動で使用できます。
モジュールをロードするには:
# 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
カーネルコマンドラインを使う
モジュールがカーネルに組み込まれている場合、モジュールにオプションを設定するのにカーネルコマンドラインを使うこともできます。一般的なブートローダでは次の構文を使って下さい:
modname.parametername=parametercontents
例:
thinkpad_acpi.fan_control=1
カーネルパラメータのページで説明されているようにして、あなたのブートローダのカーネルラインにこれを追加するだけです。
エイリアス
エイリアスによってモジュールに代わりの名前を付けることができます。例: alias my-mod really_long_modulename
で modprobe really_long_modulename
の代わりに modprobe my-mod
を使うことができるようになります。シェルのようにワイルドカードを使うこともできます。alias my-mod* really_long_modulename
で modprobe my-mod-something
が modprobe 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 フックなど)によって使われている全てのモジュールを一覧できます。モジュールをブラックリスト入りさせたら、イメージを生成し、それから再起動してください。
/etc/modprobe.d/ 内のファイルを使う
/etc/modprobe.d/
内に .conf
ファイルを作成し、blacklist
キーワードを使って一行ずつブラックリスト入りさせたいモジュールを追加します。例えば pcspkr
モジュールをロードさせたくない場合:
/etc/modprobe.d/nobeep.conf
# Do not load the 'pcspkr' module on boot blacklist pcspkr
カーネルコマンドラインを使う
ブートローダでモジュールをブラックリスト入りさせることもできます。
カーネルパラメータのページで説明されているようにして、あなたのブートローダのカーネルラインに module_blacklist=modname1,modname2,modname3
を追加するだけです。
トラブルシューティング
モジュールがロードされない
特定のモジュールがロードされない場合、起動ログ (journalctl -b
で見れます) にモジュールがブラックリストに入っていると書かれているのに /etc/modprobe.d/
ディレクトリには該当するエントリが存在しないとき、/usr/lib/modprobe.d/
にある他の modprobe ソースファイルにブラックリストのエントリがないか確認してください。
カーネルモジュールに含まれている "vermagic" 文字列が、現在実行中のカーネルの値と一致しない場合もモジュールはロードされません。カーネルとモジュールの互換性に問題がないという確証があるときは modprobe --force-vermagic
で "vermagic" のチェックを無視させることができます。
参照
- PC スピーカーのビープ音の無効化
- Writing a WMI driver - an LWM introduction