depmod (生成内核、模块、依赖关系列表和关联的映射文件)

瑞兹 发表于 2021-01-10 00:13
浏览次数:
在手机上阅读

在Linux操作系统上,depmod命令生成内核、模块、依赖关系列表和关联的映射文件。

查看英文版

目录

1 depmod 运行系统环境

2 depmod 描述

3 depmod 语法

4 depmod 例子

depmod 运行系统环境

Unix&Linux

depmod 描述

depmod分析您的内核模块(在目录/ lib / modules / kernel-release中)并创建一个依赖项列表(名为modules.dep),以便在使用modprobe添加和删除模块时,没有其他模块的模块就不会存在要求。同时,它创建一个映射,将硬件标识符与处理它们的模块相关联。该映射用于在硬件请求时找到正确的模块。

内核依靠depmodmodprobe将其原始数据传递给其模块,以使其需要加载它们的顺序。

depmod analyzes your kernel modules (in the directory /lib/modules/kernel-release) and creates a list of dependencies (named modules.dep), so that when modules are added and removed with modprobe, no modules are without the other modules they require. At the same time, it creates a map correlating hardware identifiers and the modules that handle them. This mapping is used to find the correct module when a piece of hardware requests it.

The kernel relies on depmod and modprobe to pass it the raw data for its modules, in the order it needs to load them.

查看英文版

查看中文版

depmod 语法

depmod [-b basedir] [-e] [-E Module.symvers] [-F System.map]
       [-n] [-v] [-A] [-P prefix] [-w] [version]
depmod [-e] [-E Module.symvers] [-F System.map] [-m] [-n] [-v] [-P prefix]
       [-w] [version] [filename...]

技术说明

Linux内核模块可以提供供其他模块使用的服务(称为“符号”)(使用代码中的EXPORT_SYMBOL变体之一)。如果第二个模块使用此符号,则该第二个模块显然取决于第一个模块。这些依赖关系可能变得非常复杂。

depmod通过读取/ lib / modules / kernel-release下的每个模块并确定导出的符号和所需的符号来创建模块依赖关系列表。默认情况下,此列表写入同一目录下的modules.dep和二进制 散列版本模块modules.dep.bin中。如果在命令行上给出了文件名,则仅检查那些模块(除非列出了所有模块,否则很少有用)。

depmod还会在名为modules.symbols的文件及其二进制哈希版本modules.symbols.bin中创建模块提供的符号列表。

最后,如果模块提供了特殊的设备名称(devname),则应在启动时通过/ dev等实用程序填充特殊的设备名称(devname),从而depmod将输出一个名为modules.devname的文件。

如果提供了版本,则使用该内核版本的模块目录,而不是当前内核版本(由uname -r返回)。

选件

-a--all

探测所有模块。如果命令行中未提供文件名,则默认情况下启用此选项。

-A--quick

在完成任何工作之前,此选项进行扫描以查看是否有模块比modules.dep文件新:如果没有,则它以静默方式退出而不是重新生成文件。

-b basedir-- basedirbasedir

如果您的模块当前不在(常规)目录/ lib / modules / kernel-version中,但在暂存区域中,则可以指定一个在目录名之前的basedir。从生成的modules.dep文件中删除了此basedir ,因此可以将其移动到正常位置。如果您是分发供应商,需要预先生成元数据文件,而不是稍后再运行depmod,请使用此选项。

-C,-- config file-or-directory

此选项将覆盖/etc/depmod.d/中的默认配置目录。

-e,-- errsyms

当与-F选项结合使用时,它将报告其他模块或内核未提供的模块需要的任何符号。通常,假定模块未提供的任何符号均由内核提供(在理想情况下应该是正确的),但是这种假设可能会破坏,尤其是当未正确安装或未正确构建其他更新的第三方驱动程序时。

-E,--symvers

-e选项结合使用时,它将报告模块提供的任何符号版本,这些版本与内核在其Module.symvers中提供的符号版本不匹配。此选项与-F互不兼容。

-F,-- filesyms System.map

随构建内核时生成的System.map提供,这允许-e选项报告未解析的符号。此选项与-E互不兼容。

-h--help

打印帮助消息并退出。

-n,-- dry-run

这会将生成的modules.dep和各种映射文件发送到标准输出,而不是将它们写入模块目录。

-P

有些体系结构在符号前加上多余的字符。这指定要忽略的前缀字符(例如' _ ')。

-v,-- verbose

详细模式;depmod将把每个模块所依赖的所有符号以及提供该符号的模块文件名打印到标准输出中。

-V,-- version

显示depmod的版本并退出。在旧版内核上运行时的注意事项,请参见下文。

-w

警告重复的依赖项,别名,符号版本等。

depmod [-b basedir] [-e] [-E Module.symvers] [-F System.map]
       [-n] [-v] [-A] [-P prefix] [-w] [version]
depmod [-e] [-E Module.symvers] [-F System.map] [-m] [-n] [-v] [-P prefix]
       [-w] [version] [filename...]

Technical Description

Linux kernel modules can provide services (called "symbols") for other modules to use (using one of the EXPORT_SYMBOL variants in the code). If a second module uses this symbol, that second module clearly depends on the first module. These dependencies can get quite complex.

depmod creates a list of module dependencies by reading each module under /lib/modules/kernel-release and determining what symbols it exports and what symbols it needs. By default, this list is written to modules.dep, and a binary hashed version named modules.dep.bin, in the same directory. If file names are given on the command line, only those modules are examined (which is rarely useful unless all modules are listed).

depmod also creates a list of symbols provided by modules in the file named modules.symbols and its binary hashed version, modules.symbols.bin.

Finally, depmod will output a file named modules.devname if modules supply special device names (devname) that should be populated in /dev on boot (by a utility such as udev).

If a version is provided, then that kernel version's module directory is used rather than the current kernel version (as returned by uname -r).

Options

-a--all

Probe all modules. This option is enabled by default if no file names are given in the command-line.

-A--quick

This option scans to see if any modules are newer than the modules.dep file before any work is done: if not, it silently exits rather than regenerating the files.

-b basedir--basedirbasedir

If your modules are not currently in the (normal) directory /lib/modules/kernel-version, but in a staging area, you can specify a basedir that is prepended to the directory name. This basedir is stripped from the resulting modules.dep file, so it is ready to be moved into the normal location. Use this option if you are a distribution vendor who needs to pre-generate the meta-data files rather than running depmod again later.

-C--config file-or-directory

This option overrides the default configuration directory at /etc/depmod.d/.

-e--errsyms

When combined with the -F option, this reports any symbols which a module needs that are not supplied by other modules or the kernel. Normally, any symbols not provided by modules are assumed to be provided by the kernel (which should be true in a perfect world), but this assumption can break especially when additionally updated third party drivers are not correctly installed or were built incorrectly.

-E--symvers

When combined with the -e option, this reports any symbol versions supplied by modules that do not match with the symbol versions provided by the kernel in its Module.symvers. This option is mutually incompatible with -F.

-F--filesyms System.map

Supplied with the System.map produced when the kernel was built, this allows the -e option to report unresolved symbols. This option is mutually incompatible with -E.

-h--help

Print the help message and exit.

-n--dry-run

This sends the resulting modules.dep and the various map files to standard output rather than writing them into the module directory.

-P

Some architectures prefix symbols with an extraneous character. This specifies a prefix character (for example '_') to ignore.

-v--verbose

Verbose mode; depmod will print to standard output all the symbols each module depends on and the module's file name which provides that symbol.

-V--version

Show depmod's version and exit. See below for caveats when run on older kernels.

-w

Warn on duplicate dependencies, aliases, symbol versions, etc.

查看英文版

查看中文版

depmod 例子

以下一系列命令说明了使用depmod的常用方法。每个命令都以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 depmod. 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.

查看英文版

查看中文版

其他命令行

date | du | dpost | dmesg | dirname | dircmp | dd | deluser | deroff | df | dhclient | diff | dos2unix | dig |

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