「カーネルモジュール」の版間の差分
(ページの作成:「Category:カーネル Category:ハードウェア検出とトラブルシューティング Category:ブートプロセス en:Kernel modules es:Kernel m...」) |
|||
7行目: | 7行目: | ||
[[it:Kernel modules]] |
[[it:Kernel modules]] |
||
[[zh-CN:Kernel modules]] |
[[zh-CN:Kernel modules]] |
||
− | {{Related articles start |
+ | {{Related articles start}} |
{{Related3|Boot debugging|ブートデバッグ}} |
{{Related3|Boot debugging|ブートデバッグ}} |
||
{{Related|カーネル}} |
{{Related|カーネル}} |
||
51行目: | 51行目: | ||
== 設定 == |
== 設定 == |
||
− | 今日、必要なモジュールのロードは全て [[udev |
+ | 今日、必要なモジュールのロードは全て [[udev|udev]] によって自動的に処理されているので、カーネルに含まれていないモジュールを使用する必要がないのならば、起動時にロードするモジュールを設定ファイルに記述する必要はありません。ただし、ブートプロセスで追加のモジュールをロードしたり、コンピューターを正しく機能させるために他のモジュールをブラックリストに入れるなどの場合は考えられます。 |
=== ロード === |
=== ロード === |
||
70行目: | 70行目: | ||
==== /etc/modprobe.d/ 内のファイルを使う ==== |
==== /etc/modprobe.d/ 内のファイルを使う ==== |
||
− | システムブート中、{{ic|modprobe}} を使ってモジュールを管理する [[udev |
+ | システムブート中、{{ic|modprobe}} を使ってモジュールを管理する [[udev|udev]] にモジュールの設定をわたすために {{ic|/etc/modprobe.d/}} ディレクトリ内のファイルが使われます。このディレクトリ内のファイルには {{ic|.conf}} 拡張子で終わる名前を付けます。構文は: |
{{hc|/etc/modprobe.d/myfilename.conf|2= |
{{hc|/etc/modprobe.d/myfilename.conf|2= |
||
82行目: | 82行目: | ||
options thinkpad_acpi fan_control=1}} |
options thinkpad_acpi fan_control=1}} |
||
− | {{Note|影響を受けるモジュールが init ramdisk からロードされる場合、適切な {{ic|.conf}} ファイルを [[mkinitcpio |
+ | {{Note|影響を受けるモジュールが init ramdisk からロードされる場合、適切な {{ic|.conf}} ファイルを [[mkinitcpio|mkinitcpio.conf]] の FILES に追加するか {{ic|modconf}} [[mkinitcpio#HOOKS|hook]] を使うかして、ramdisk に含まれるようにする必要があります。}} |
==== カーネルコマンドラインを使う ==== |
==== カーネルコマンドラインを使う ==== |
||
94行目: | 94行目: | ||
thinkpad_acpi.fan_control=1 |
thinkpad_acpi.fan_control=1 |
||
− | [[ |
+ | [[カーネルパラメータ]]のページで説明されているようにして、あなたのブートローダのカーネルラインにこれを追加するだけです。 |
=== エイリアス === |
=== エイリアス === |
||
114行目: | 114行目: | ||
カーネルモジュールで、ブラックリストとはカーネルモジュールをロードしないようにすることを指します。ブラックリストが役にたつのは、例えば、関連するハードウェアが必要ない場合や、モジュールをロードすると問題が発生する場合: 2つのカーネルモジュールが同じハードウェアをコントロールしようとして、互いにコンフリクトを生じる場合などです。 |
カーネルモジュールで、ブラックリストとはカーネルモジュールをロードしないようにすることを指します。ブラックリストが役にたつのは、例えば、関連するハードウェアが必要ない場合や、モジュールをロードすると問題が発生する場合: 2つのカーネルモジュールが同じハードウェアをコントロールしようとして、互いにコンフリクトを生じる場合などです。 |
||
− | いくつかのモジュールは [[mkinitcpio |
+ | いくつかのモジュールは [[mkinitcpio|initramfs]] の一部としてロードされます。{{ic|mkinitcpio -M}} ですべての自動検出したモジュールを表示します: initramfs のモジュールのロードを止めるには、モジュールを {{ic|/etc/modprobe.d/modprobe.conf}} でブラックリスト入りさせてください。{{ic|mkinitcpio -v}} を実行することで様々なフック(例: ファイルシステムフック、SCSI フックなど)によって使われている全てのモジュールを一覧できます。モジュールをブラックリスト入りさせたら、{{ic|/etc/mkinitcpio.conf}} の FILES セクションに使った {{ic|.conf}} ファイルを忘れずに追加して initramfs を再生成し、それから再起動してください。 |
==== /etc/modprobe.d/ 内のファイルを使う ==== |
==== /etc/modprobe.d/ 内のファイルを使う ==== |
||
142行目: | 142行目: | ||
ブートローダでモジュールをブラックリスト入りさせることもできます。 |
ブートローダでモジュールをブラックリスト入りさせることもできます。 |
||
− | [[Kernel parameters |
+ | [[Kernel parameters|カーネルパラメータ]]のページで説明されているようにして、あなたのブートローダのカーネルラインに {{ic|1=modprobe.blacklist=modname1,modname2,modname3}} を追加するだけです。 |
{{Note|複数のモジュールをブラックリスト入りさせるときは、カンマで分割することを覚えておいて下さい。スペースなどを使うとシンタックスを破壊してしまうおそれがあります。}} |
{{Note|複数のモジュールをブラックリスト入りさせるときは、カンマで分割することを覚えておいて下さい。スペースなどを使うとシンタックスを破壊してしまうおそれがあります。}} |
2015年1月14日 (水) 14:07時点における版
カーネルモジュールは小さなコードの集まりであり、必要に応じてカーネルにロード・アンロードすることができます。カーネルモジュールはシステムを再起動する必要なくカーネルの機能を拡張します。
目次
概要
カーネルモジュールを作るには、このガイド を読んで下さい。モジュールはビルトインすることもローダブルにすることもできます。動的にモジュールをロード・リムーブするには、カーネル設定でローダブルモジュールとして設定する必要があります (モジュールに関係する行には M
が表示されます)。
モジュールは /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 によって自動的に処理されているので、カーネルに含まれていないモジュールを使用する必要がないのならば、起動時にロードするモジュールを設定ファイルに記述する必要はありません。ただし、ブートプロセスで追加のモジュールをロードしたり、コンピューターを正しく機能させるために他のモジュールをブラックリストに入れるなどの場合は考えられます。
ロード
起動時にロードする追加のカーネルモジュールは /etc/modules-load.d/
下のファイルにリストとして設定します。それぞれの設定ファイルの名前の形式は /etc/modules-load.d/<program>.conf
です。設定ファイルにはロードするカーネルモジュールの名前の(行で区切られた)リストだけを記述します。空行や、最初の空白以外の文字が #
や ;
の行は無視されます。
/etc/modules-load.d/virtio-net.conf
#起動時に virtio-net.ko をロード virtio-net
詳しくは modules-load.d(5)
を見て下さい。
モジュールオプションを設定する
カーネルモジュールにパラメータを指定するために、modprobe の conf ファイルやカーネルコマンドラインを使うことができます。
/etc/modprobe.d/ 内のファイルを使う
システムブート中、modprobe
を使ってモジュールを管理する udev にモジュールの設定をわたすために /etc/modprobe.d/
ディレクトリ内のファイルが使われます。このディレクトリ内のファイルには .conf
拡張子で終わる名前を付けます。構文は:
/etc/modprobe.d/myfilename.conf
options modname parametername=parametervalue
例:
/etc/modprobe.d/thinkfan.conf
# On Thinkpads, this lets the 'thinkfan' daemon control fan speed 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/modprobe.conf
でブラックリスト入りさせてください。mkinitcpio -v
を実行することで様々なフック(例: ファイルシステムフック、SCSI フックなど)によって使われている全てのモジュールを一覧できます。モジュールをブラックリスト入りさせたら、/etc/mkinitcpio.conf
の FILES セクションに使った .conf
ファイルを忘れずに追加して initramfs を再生成し、それから再起動してください。
/etc/modprobe.d/ 内のファイルを使う
/etc/modprobe.d/
内に .conf
ファイルを作成し、blacklist
キーワードを使って一行ずつブラックリスト入りさせたいモジュールを追加します。例えば pcspkr
モジュールをロードさせたくない場合:
/etc/modprobe.d/nobeep.conf
# Do not load the 'pcspkr' module on boot blacklist pcspkr
カーネルコマンドラインを使う
ブートローダでモジュールをブラックリスト入りさせることもできます。
カーネルパラメータのページで説明されているようにして、あなたのブートローダのカーネルラインに modprobe.blacklist=modname1,modname2,modname3
を追加するだけです。
手動でモジュールを扱う
カーネルモジュールは kmod パッケージによって提供されるツールを使って管理します。これらのツールは手動で使用できます。
モジュールをロードするには:
# modprobe module_name
モジュールをアンロードするには:
# modprobe -r module_name
もしくは:
# rmmod module_name
設定ファイルをリロードするには:
# systemctl restart systemd-modules-load.service
Tips and tricks
モジュールパラメータを一覧する Bash 関数
root 権限で実行することで、現在のパラメータ値を含む、現在ロードされているモジュールと全てのパラメータの一覧を表示する関数です。/proc/modules
を使って現在ロードされているモジュールの一覧を取得して、モジュールファイルに modinfo で直接アクセスしてモジュールや(可能ならば)パラメータの説明を引き出し、最後に sysfs ファイルシステムにアクセスして実際のパラメータ名と現在の値を取得しています。
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 }
アウトプットのサンプル:
# aa_mod_parameters
>>> 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)