📜  Linux 中的 depmod 命令示例

📅  最后修改于: 2022-05-13 01:57:29.044000             🧑  作者: Mango

Linux 中的 depmod 命令示例

depmod电泳(DEP endency国防部ULES)命令用于生成内核模块的依赖关系的描述和其相关联的地图的文件的列表。这会分析目录/lib/modules/kernel-release 中的内核模块,并根据模块集中存在的符号创建一个名为modules.dep的类似“ Makefile”的依赖文件。这些模块一般取自配置文件中指定的目录或命令行中提到的目录。然后,当使用 modprobe 自动添加和删除模块堆栈时,没有模块没有它们需要的其他相关模块。同时,它创建一个关联的映射,将硬件标识符和处理它们的相应模块关联起来,以供热插拔基础设施使用。当硬件单元请求正确的模块时,此特定关联的映射用于搜索和找到正确的模块。

Linux 内核依赖 depmod 和 modprobe 为其模块发送原始数据,以正确的顺序加载它们。 depmodmodprobe命令实用程序为所有最终用户、分发维护工程师、网络和系统管理员提供了可管理的 Linux 模块化内核。

句法:

depmod [ -a ] [ -b basedir ] [ -e ] [ -F System.map ] [ -n ] [ -v ] [ version ] [ -A ]
       [-n] [-v] [-A] [-P prefix] [-w] [version]

depmod [-e] [-E Module.symvers] [-F System.map] [-m] [-n] [-v] [-P prefix]
       [-w] [version] [filename...]*** QuickLaTeX cannot compile formula:
 

*** Error message:
Error: Nothing to show, formula is empty
Linux kernel modules would provide unique services called “symbols” for other modules to make use of its utilities. This could be done by using one of the EXPORT_SYMBOL variants in the code. Eventually when a second module uses this symbol, then the second module solely depends on the attributes and functions of the first module. These modular dependencies tend to look complex. The main objective of the depmod command is to creates a list of module dependencies by revoking each module under /lib/modules/kernel-release and finds what export symbols are used to quantify its needs. By default, this list is written to modules.dep, and also made available in binary hashed version named modules.dep.bin, in the same specific directory.  
  • depmod 命令还会在名为modules.symbols的文件中创建由模块提供的符号列表。
  • depmod 命令通过其二进制散列版本modules.symbols.bin创建模块中的符号列表。
  • 如果模块提供唯一的设备名称(devname),depmod 将保存名为modules.devname的文件的输出,该名称应在启动时由特定实用程序(例如 udev)填充到 /dev 中。

选项:

  • -a,-all:彻底探测和检查内核中的所有模块。默认情况下,如果命令行中没有给出文件名,则启用此选项。
  • -A, –quick:此选项会在完成任何工作之前扫描并查找是否有任何模块比modules.dep文件中的模块新:如果没有找到,它会顺利退出而不是再次重新生成文件。
  • -b basedir, –basedir, basedir:如果模块当前不在默认目录/lib/modules/kernel-version中,而是在其他一些暂存区,我们可以指定一个登陆目录名称的basedir。这个basedir 是从生成的modules.dep文件中剥离出来的,因此它随时可以移动到默认位置/lib/modules/kernel-version。需要预先生成元数据文件而不是稍后再次运行 depmod 的分发供应商会发现此选项非常有用。
  • -C, –config file-or-directory:此特定选项覆盖/etc/depmod.d/处的默认配置目录。
  • -e, –errsyms:当与 -F 选项结合使用时,它会报告模块特别需要的任何特定符号,这些符号不是由其他模块或内核绝对提供的。默认情况下,模块未提供的任何符号都假定由内核提供,但是当额外更新的第三方驱动程序未正确安装或构建时出错时,此假定可能无效。
  • -E, –symvers: depmod 与 -e 选项结合使用时,报告模块提供的任何符号版本与内核在其 Module.symvers 中提供的符号版本不匹配。此选项与 -F 选项互不兼容。
  • -F, –filesyms System.map:与构建内核时生成的System.map一起提供,这允许 -e 选项报告未解析和未识别的符号。此选项与 -E 互不兼容。
  • -h,-help:此选项倾向于打印帮助消息并退出。
  • -n, –show:此选项在标准输出上而不是在 /lib/modules 树中显示依赖项文件。
  • -q, –quiet:此选项指示 depmod 保持安静,不要抱怨缺少符号。
  • -r, –root:此选项帮助一些用户在非 root 用户 ID 下编译模块,然后以 root 身份安装模块。这个过程可以让非 root 用户 ID 拥有的模块容易受到入侵者的攻击,即使模块目录是由 root 拥有的。如果非 root 用户 ID 在某一方面受到损害,入侵者可以覆盖该非 root 用户 ID 拥有的现有模块,并使用此暴露来引导到 root 访问。通常,modutils 将拒绝使用不属于 root 的模块的尝试。指定 -r 将覆盖错误并允许 root 加载不属于 root 的模块。使用 -r 是一个主要的安全漏洞,不推荐使用,因为该模块容易受到攻击。
  • -s, –syslog:此选项通过 syslog 守护程序而不是 stderr 显示所有错误消息。
  • -u, –unresolved-error:当模块中存在任何未解析的符号时,depmod 命令不会设置返回码。某些发行版希望在 modutils 中使用非零返回码,但这种更改可能会给期望旧行为的用户带来问题。如果您想在 depmod 中使用非零返回码,请指定 -u。在最新的 Linux 内核版本中,depmod 命令将默默地忽略 -u 标志,并且始终为未解析的符号提供非零返回码。
  • -n, –dry-run:此选项将生成的 modules.dep 和各种关联的映射文件发送到标准输出,而不是将它们写入模块目录。
  • -P:此选项使某些体系结构使用无关字符作为前缀符号。这提到要忽略的前缀字符(例如“_”)。
  • -v, –verbose: depmod 中的选项详细模式会将每个模块依赖的所有符号以及提供该符号的特定模块的文件名打印到标准输出。
  • -V, –version:这个选项倾向于显示depmod的版本并退出。
  • -w:此选项会弹出有关重复依赖项、别名、符号版本等的警告消息。

示例:以下是一系列命令,有助于说明在 Linux 中使用 depmod 命令的常用方法。每个命令都以 sudo 为前缀,因为每个命令都需要适当的 root 权限:

从默认位置检索文件:

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

从默认位置以外的位置加载和卸载文件:

$ ln -s lkm.ko /lib/modules/2.6.32-21-generic/
$  depmod -a
$ modprobe lkm
$  modprobe -r lkm
lkm here refers to located or kept at any part of the memory.

操作逐行解释:

$ln -s /path/to/your-kernel-module.ko /lib/modules/`uname -r`

ln用于在目录 /lib/modules/kernel-release 中创建指向我们模块文件的符号链接。命令 uname -r 括在反引号中,由 shell 执行并转换为代表我们的内核发布版本的适当字符串。

注意: $depmod -a是由 depmod -a 生成的更新依赖项列表,以确保我们正在安装的模块知道所有现有模块和依赖项。在第三个命令中安装模块时,modprobe 将使用此依赖项列表。