カーネルモジュールを説明するmodinfo
出力を理解しようとしています。たとえば、モジュールi915
、出力は次のようになります。
$ modinfo i915
filename: /lib/modules/4.2.0-1-AMD64/kernel/drivers/gpu/drm/i915/i915.ko
license: GPL and additional rights
description: Intel Graphics
author: Intel Corporation
[...]
firmware: i915/skl_dmc_ver1.bin
alias: pci:v00008086d00005A84sv*sd*bc03sc*i*
[...]
depends: drm_kms_helper,drm,video,button,i2c-algo-bit
intree: Y
vermagic: 4.2.0-1-AMD64 SMP mod_unload modversions
parm: modeset:Use kernel modesetting [KMS] (0=DRM_I915_KMS from .config, 1=on, -1=force vga console preference [default]) (int)
[...]
一部の分野は理解できましたが、以下の意味がわかりません。
firmware
alias
intree
vermagic
誰かがそれらを解釈する方法を知っていますか?
ファームウェア:
firmware: i915/skl_dmc_ver1.bin
多くのデバイスが適切に動作するには2つのものが必要です。ドライバーとファームウェア。ドライバは、/lib/firmware
のファイルシステムにファームウェアを要求します。これは、ハードウェアに必要な特別なファイルであり、バイナリではありません。次に、ダイバーはファームウェアをデバイスにロードするために必要なことを行います。ファームウェアはデバイス内のハードウェアをプログラミングします。
エイリアス:
alias: pci:v00008086d00005A84sv*sd*bc03sc*i*
これは、文字の後の部分で分割できます。
v00008086
:v
はベンダーIDを表し、ハードウェアの製造元を識別します。そのリストは PCI Special Interest Group によって管理されています。あなたの番号 x8086 は「Intel Corporation」を表します。d00005A84
:d
は、メーカーが選択したデバイスIDを表します。このIDは通常、ベンダーIDと組み合わせて、ハードウェアデバイスの一意の32ビット識別子を作成します。正式なリストはなく、その番号を検索するIntelデバイスIDリストを見つけることができませんでした。sv*
、sd*
:サブシステムベンダーバージョンおよびサブシステムデバイスバージョンは、デバイス(*
は、すべてに一致することを示します)bc03
:基本クラス。それはそれがどんな種類のデバイスであるかを定義します。 IDE interface
、Ethernet controller
、USB Controller
、... bc03
はDisplay controller
を表します。 lspci
は数値をデバイスクラスにマップするため、lspci
の出力からそれらに気付く場合があります。sc*
:基本クラスへのサブクラス。i*
:インターフェースintree:
intree: Y
すべてのカーネルモジュールは、out-of-tree
として開発を開始します。モジュールが含まれることが受け入れられると、そのモジュールはin-tree
モジュールになります。そのフラグのないモジュール(N
に設定)は カーネルを保持する になります。
vermagic:
vermagic: 4.2.0-1-AMD64 SMP mod_unload modversions
モジュールをロードするとき、vermagic
値の文字列が一致するかどうかがチェックされます。それらが一致しない場合、エラーが発生し、カーネルはモジュールのロードを拒否します。 modprobe
の--force
フラグを使用することで、これを克服できます。もちろん、これらのチェックは保護のために存在するため、このオプションの使用は危険です。