modprobe (可从Linux内核中添加和删​​除模块)

瑞兹 发表于 2021-02-04 09:08
浏览次数:
在手机上阅读

在Linux操作系统上,modprobe命令可从Linux内核中添加和删​​除模块。

查看英文版

目录

1 modprobe 运行系统环境

2 modprobe 描述

3 modprobe 语法

4 modprobe 例子

modprobe 运行系统环境

Unix&Linux

modprobe 描述

模块是一段代码,可扩展操作系统内核的功能,而无需重新启动。加载后,模块驻留在内存中,并且可以实例化多次;可以将它们视为类似于设备驱动程序。

modprobe使用depmod生成的依赖关系列表和硬件映射来将模块智能地加载或卸载到内核中。它分别使用较低级的程序insmodrmmod进行实际的插入和删除。

虽然可以手动调用insmodrmmod,但建议使用depmod加载和卸载模块,以确保在进行更改之前考虑任何模块间的依赖关系。

技术说明

modprobe搜索模块目录,

/ lib / modules /`uname -r`

/etc/modprobe.d目录中的可选配置文件外,所有模块和其他文件均适用。modprobe还将使用内核命令行上指定的模块选项,格式为:

.

...以及以下形式的黑名单:

modprobe.blacklist =

现代版本的Linux modprobe(内核版本2.4.x)不会自行修改模块。解析符号和理解参数的工作在内核内部完成。因此,模块故障有时会伴随着内核消息-有关查看它们的更多信息,请参见dmesg

modprobe需要由depmod实用程序生成的最新的modules.dep.bin文件(或备用人类可读modules.dep文件)。该文件列出了每个模块还需要哪些其他模块(如果有),并且modprobe使用它来自动添加或删除这些依赖项。

如果在modulename之后给出了任何参数,它们将被传递给内核(除了配置文件中列出的所有选项之外)。

Modules are pieces of code which extend the functionality of the operating system kernel without the need to reboot. Once loaded, modules reside in memory, and can be instantiated multiple times; they can be thought of as analogous to a device driver.

modprobe uses the dependency lists and hardware maps generated by depmod to intelligently load or unload modules into the kernel. It performs the actual insertion and removal using the lower-level programs insmod and rmmod, respectively.

While it's possible to call insmod and rmmod manually, it's recommended to load and unload modules using depmod to ensure that any inter-module dependencies are considered before changes are made.

Technical Description

modprobe searches the module directory,

/lib/modules/`uname -r`

for all the modules and other files, except for the optional configuration files in the /etc/modprobe.d directory. modprobe will also use module options specified on the kernel command line in the form of:

.

...and blacklists in the form of:

modprobe.blacklist=

Modern versions of Linux modprobe (post-kernel version 2.4.x) do not modify modules themselves. The work of resolving symbols and understanding parameters is done inside the kernel. Module failure is therefore sometimes accompanied by a kernel message — see dmesg for more information about viewing them.

modprobe expects an up-to-date modules.dep.bin file (or fallback human readable modules.dep file), as generated by the depmod utility. This file lists what other modules each module needs (if any), and modprobe uses this to add or remove these dependencies automatically.

If any arguments are given after the modulename, they are passed to the kernel (in addition to any options listed in the configuration file).

查看英文版

查看中文版

modprobe 语法

modprobe [-v] [-V] [-C config-file] [-n] [-i] [-q] [-b] [modulename] 
         [module parameters...]
modprobe [-r] [-v] [-n] [-i] [modulename...]
modprobe [-c]
modprobe [--dump-modversions] [filename]

选件

-a--all 在命令行上插入所有模块名称。
-b,-- use-blacklist 此选项使modprobe也将配置文件(如果有)中的黑名单命令应用于模块名称。(任何已列入黑名单的模块都不会自动加载。)
-C,-- config 此选项将覆盖默认配置目录(/etc/modprobe.d)。

此选项通过install或remove命令传递给MODPROBE_OPTIONS环境变量中的其他modprobe命令。
-c,-- showconfig 从config目录中转储有效的配置并退出。
--dump-modversions 打印出模块所需的模块版本信息列表。发行版通常使用此选项来使用模块版本控制部门打包Linux内核模块。
-d,--dirname 可以找到模块的目录(默认为/ lib / modules /`uname -r`)。
--first-time 通常,如果被告知插入一个已经存在的模块或删除一个不存在的模块,modprobe将成功(不执行任何操作)。这是简单脚本的理想选择。但是,更复杂的脚本通常想知道modprobe是否确实做了某些事情:此选项会使modprobe在实际上不做任何事情的情况下失败。
--force-vermagic 每个模块都包含一个包含重要信息的小字符串,例如内核和编译器版本。如果模块无法加载,并且内核抱怨“版本魔术”不匹配,则可以使用此选项将其删除。这适用于插入的任何模块:命令行上的模块(或别名)及其依赖的任何模块。

进行此检查是为了保护您的安全,因此除非您知道自己在做什么,否则使用此选项很危险。

--force-modversion 使用CONFIG_MODVERSIONS设置编译模块时,将创建一个部分,详细说明该模块使用(或提供)的每个接口的版本。如果模块无法加载,并且内核抱怨模块不同意某个接口的版本,则可以使用--force-modversion完全删除版本信息。这适用于插入的所有模块:命令行上的模块(或别名)及其依赖的任何模块。

进行此检查是为了保护您,因此除非您知道自己在做什么,否则使用此选项很危险。
-f--force 尝试从模块中剥离所有版本信息,否则可能会阻止其加载:这与同时使用--force-vermagic--force-modversion相同。这适用于插入的任何模块:命令行上的模块(或别名)以及它所依赖的任何模块。

这些检查用于保护您,因此除非您知道自己在做什么,否则使用此选项很危险。
-i,-- ignore-install,-- ignore-remove 此选项使modprobe忽略在命令行中指定的模块的配置文件(如果有)中的安装删除命令(任何从属模块仍受配置文件中为其设置的命令的约束)。使用此选项时,无论是否仅使用--ignore-install--ignore-remove中的一个或另一个(而不是全部)发出请求,当前都将忽略安装和删除命令。
-n,--dry-run,--show 除了实际插入或删除模块(或运行安装删除命令)以外,该选项可以执行所有操作。与-v结合使用,对于调试非常有用。由于历史原因,-- dry-run--show实际上都表示同一件事,并且可以互换。
-q,--quiet 使用此标志,如果尝试删除或插入找不到的模块(并且不是别名或install / remove命令),则modprobe不会显示错误消息。但是,它仍将以非零退出状态返回。内核使用它来机会性地探查使用request_module可能存在的模块。
-R,-- resolve-alias 打印所有与别名匹配的模块名称。这对于调试模块别名问题很有用。
-r--remove 此选项导致modprobe删除而不是插入模块。如果它依赖的模块也没有使用,modprobe也会尝试删除它们。与插入不同,可以在命令行上指定多个模块(删除模块时指定模块参数没有意义)。

通常没有理由删除模块,但是某些故障模块需要这样做。您的发行内核可能根本不支持删除模块。
-S,-- set-version 设置内核版本,而不是使用uname来确定内核版本(这决定了在哪里找到模块)。
--show-depends 列出模块(或别名)的依赖关系,包括模块本身。这将产生一组(可能为空)模块文件名,每行一个,每个文件名以“ insmod”开头,通常由发行版使用以确定在生成initrd / initramfs映像时要包括的模块。适用的安装命令以“ install”为前缀显示。它不运行任何安装命令。请注意,modinfo可用于从模块本身提取模块的依赖项,但不了解别名或安装命令。
-s,-- syslog 此选项使所有错误消息都通过syslog机制(如级别为LOG_NOTICE的LOG_DAEMON)而不是标准错误。当stderr不可用时,也会自动启用它。此选项通过安装或删除命令传递给MODPROBE_OPTIONS环境变量中的其他modprobe命令。

-V,-- version 显示modprobe的版本信息并退出。
-v,-- verbose 详细模式;打印有关程序正在执行的消息。通常,modprobe仅在出现问题时才打印消息。

此选项通过install或remove命令传递给MODPROBE_OPTIONS环境变量中的其他modprobe命令。
modprobe [-v] [-V] [-C config-file] [-n] [-i] [-q] [-b] [modulename] 
         [module parameters...]
modprobe [-r] [-v] [-n] [-i] [modulename...]
modprobe [-c]
modprobe [--dump-modversions] [filename]

Options

-a--all Insert all module names on the command line.
-b--use-blacklist This option causes modprobe to apply the blacklist commands in the configuration files (if any) to module names as well. (Any module which has been blacklisted will not be automatically loaded.)
-C--config This option overrides the default configuration directory (/etc/modprobe.d).

This option is passed through install or remove commands to other modprobe commands in the MODPROBE_OPTIONS environment variable.
-c--showconfig Dump out the effective configuration from the config directory and exit.
--dump-modversions Print out a list of module versioning information required by a module. This option is commonly used by distributions to package up a Linux kernel module using module versioning deps.
-d--dirname Directory where modules can be found (/lib/modules/`uname -r` by default).
--first-time Normally, modprobe will succeed (and do nothing) if told to insert a module that is already present or to remove a module which isn't present. This is ideal for simple scripts; however, more complicated scripts often want to know whether modprobe really did something: this option makes modprobe fail in the case that it actually didn't do anything.
--force-vermagic Every module contains a small string containing important information, such as the kernel and compiler versions. If a module fails to load and the kernel complains that the "version magic" doesn't match, you can use this option to remove it. This applies to any modules inserted: both the module (or alias) on the command line and any modules on which it depends.

This check is there for your protection, so this using option is dangerous unless you know what you're doing.

--force-modversion When modules are compiled with CONFIG_MODVERSIONS set, a section detailing the versions of every interfaced used by (or supplied by) the module is created. If a module fails to load and the kernel complains that the module disagrees about a version of some interface, you can use --force-modversion to remove the version information altogether. This applies any modules inserted: both the module (or alias) on the command line and any modules on which it depends.

This check is there for your protection, so using this option is dangerous unless you know what you're doing.
-f--force Try to strip any versioning information from the module which might otherwise stop it from loading: this is the same as using both --force-vermagic and --force-modversion. This applies to any modules inserted: both the module (or alias) on the command line and any modules it on which it depends.

These checks are there for your protection, so using this option is dangerous unless you know what you are doing.
-i--ignore-install--ignore-remove This option causes modprobe to ignore install and remove commands in the configuration file (if any) for the module specified on the command line (any dependent modules are still subject to commands set for them in the configuration file). Both install and remove commands will currently be ignored when this option is used regardless of whether the request was more specifically made with only one or other (and not both) of --ignore-install or --ignore-remove.
-n--dry-run--show This option does everything but actually insert or delete the modules (or run the install or remove commands). Combined with -v, it is useful for debugging. For historical reasons both --dry-run and --show actually mean the same thing and are interchangeable.
-q--quiet With this flag, modprobe won't print an error message if you try to remove or insert a module it can't find (and isn't an alias or install/remove command). However, it will still return with a non-zero exit status. The kernel uses this to opportunistically probe for modules which might exist using request_module.
-R--resolve-alias Print all module names matching an alias. This can be useful for debugging module alias problems.
-r --remove This option causes modprobe to remove rather than insert a module. If the modules it depends on are also unused, modprobe will try to remove them too. Unlike insertion, more than one module can be specified on the command line (it does not make sense to specify module parameters when removing modules).

There is usually no reason to remove modules, but some buggy modules require it. Your distribution kernel may not have been built to support removal of modules at all.
-S--set-version Set the kernel version, rather than using uname to decide on the kernel version (which dictates where to find the modules).
--show-depends List the dependencies of a module (or alias), including the module itself. This produces a (possibly empty) set of module file names, one per line, each starting with "insmod" and is typically used by distributions to determine which modules to include when generating initrd/initramfs images. Install commands which apply are shown prefixed by "install". It does not run any of the install commands. Note that modinfo can be used to extract dependencies of a module from the module itself, but knows nothing of aliases or install commands.
-s--syslog This option causes any error messages to go through the syslog mechanism (as LOG_DAEMON with level LOG_NOTICE) rather than to standard error. This is also automatically enabled when stderr is unavailable.

This option is passed through install or remove commands to other modprobe commands in the MODPROBE_OPTIONS environment variable.
-V--version Show modprobe's version information and exit.
-v--verbose Verbose mode; print messages about what the program is doing. Usually modprobe only prints messages if something goes wrong.

This option is passed through install or remove commands to other modprobe commands in the MODPROBE_OPTIONS environment variable.

查看英文版

查看中文版

modprobe 例子

以下一系列命令说明了使用modprobe的常用方法。每个命令都以sudo为前缀,因为它们需要root权限:

sudo ln -s /path/to/your-kernel-module.ko /lib/modules/`uname -r`
sudo depmod -a
sudo modprobe your-kernel-module

这些命令执行以下操作:

  1. 在第一个命令中,我们使用ln在目录/ lib / modules / kernel-release中创建一个指向我们模块文件的符号链接。由外壳程序执行的命令uname -r(用反引号引起来)由外壳程序执行,并转换为代表我们的内核发行版的适当字符串。
  2. 在第二个命令中,由depmod -a生成更新的依赖项列表,以确保我们正在安装的模块知道所有现有模块和依赖项。在第三条命令中安装模块时,modprobe将使用此依赖项列表。
  3. modprobe将安装内核模块。

The following series of commands illustrate a common way to use modprobe. Each command is prefixed with sudo, since they require root permissions:

sudo ln -s /path/to/your-kernel-module.ko /lib/modules/`uname -r`
sudo depmod -a
sudo modprobe your-kernel-module

These commands perform the following operations:

  1. In the first command, we use ln to create a symbolic link to our module file in the directory /lib/modules/kernel-release. The command uname -r, enclosed in back quotes, is executed by the shell and translates to the appropriate string representing our kernel release version.
  2. In the second command, an updated dependency list is generated by depmod -a to make sure that the module we're installing is aware of all existing modules and dependencies. This dependency list will be used by modprobe when installing the module in the third command.
  3. modprobe installs the kernel module.

查看英文版

查看中文版

其他命令行

mail | mailcompat | merge | mesg | mii-tool | mkdir | mv | mkfs | mkswap | modinfo | more | mt | mach |

如此好文,分享给朋友
发表评论
验证码:
评论列表
共0条