Mik*_*kov 11 linux kernel kernel-modules linux-kernel
我只是想了解modinfo
描述内核模块的输出。例如,在 module 的情况下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)
[...]
Run Code Online (Sandbox Code Playgroud)
我能够理解一些领域,但我不知道以下是什么意思:
firmware
alias
intree
vermagic
有谁知道如何解释它们?
cha*_*aos 14
固件:
firmware: i915/skl_dmc_ver1.bin
Run Code Online (Sandbox Code Playgroud)
许多设备需要两件事才能正常运行。一个驱动程序和一个固件。驱动程序从文件系统请求固件/lib/firmware
。这是硬件需要的特殊文件,它不是二进制文件。然后,潜水员执行将固件加载到设备所需的操作。固件对设备内部的硬件进行编程。
别名:
alias: pci:v00008086d00005A84sv*sd*bc03sc*i*
Run Code Online (Sandbox Code Playgroud)
这可以在字符后面的部分拆分:
v00008086
:v
代表供应商 id,它标识硬件制造商。该列表由PCI 特别兴趣小组维护。您的号码0x8086代表“英特尔公司”。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: Y
Run Code Online (Sandbox Code Playgroud)
所有内核模块都以out-of-tree
. 一旦一个模块被接受被包含,它就成为一个in-tree
模块。没有该标志(设置为N
)的模块可能会污染内核。
维魔术:
vermagic: 4.2.0-1-amd64 SMP mod_unload modversions
Run Code Online (Sandbox Code Playgroud)
加载模块时,vermagic
会检查值中的字符串是否匹配。如果它们不匹配,您将收到错误消息并且内核拒绝加载模块。您可以通过使用克服--force
的标志modprobe
。当然,这些检查是为了保护您,因此使用此选项是危险的。