Depmod - Linux命令 - UNIX命令

名称

depmod - 处理可加载内核模块的依赖性描述

概要

depmod [-aA] [-ehnqrsuvV] [-C configfile ] [-F kernelsyms ] [-b 基于目录 ] [ forced_version ]
depmod [-enqrsuv] [-F kernelsyms ] module1.o module2.o ...

描述

depmodmodprobe实用程序旨在为所有用户,管理员和分发维护者提供可管理的Linux模块化内核。

基于它在命令行中提到的模块集合中找到的符号,或者从配置文件中指定的目录中找到的符号, Depmod创建一个“Makefile”类型的依赖文件。 这个依赖文件稍后将被modprobe用来自动加载正确的模块或模块堆栈。

depmod的正常使用是包含该行


/ sbin / depmod -a

/etc/rc.d中的rc文件中的某处,以便正确的模块依赖关系在引导系统后立即可用。 请注意,选项-a现在是可选的。 对于启动目的,选项-q可能更合适,因为这会使depmod对无法解析的符号保持沉默。

在编译新内核之后立即创建依赖文件也是可能的。 如果你在第一次编译内核2.2.99及其模块时执行“ depmod -a 2.2.99 ”,同时仍然运行例如2.2.98,则将在正确的位置创建该文件。 但是,在这种情况下,对内核的依赖性不能保证是正确的。 有关处理此问题的更多信息,请参阅上面的选项-F-C-b

在构建模块和其他模块导出的符号之间的关系时, depmod不会考虑模块的GPL状态,也不会考虑导出的符号。 也就是说,如果没有GPL兼容许可证的模块引用仅GPL唯一符号(内核中的EXPORT_SYMBOL_GPL),depmod将不会标记错误。 但是, insmod将拒绝为非GPL模块解析GPL唯一符号,因此实际负载将失败。

选项

-a , - 全部

搜索(可选)配置文件/etc/modules.conf中指定的所有目录中的模块。

-A , -

比较文件时间戳,并且如果有必要,就像depmod -a一样 。 如果有任何更改,此选项只会更新依赖项文件。

-e ,-- errsyms

显示每个模块的所有未解决的符号。

-h , - 帮助

显示选项摘要并立即退出。

-n , - 显示

在stdout而不是在/ lib / modules树中写入依赖文件。

-q , - 安静

告诉depmod保持安静,不要抱怨丢失的符号。

-r , - 根

一些用户在非root用户标识下编译模块,然后以root身份安装模块。 即使模块目录由root拥有,此进程也可以让非root用户标识拥有的模块。 如果非根用户标识符受到攻击,入侵者可以覆盖该用户标识符拥有的现有模块,并使用此公开权限引导至根用户访问权限。

默认情况下,modutils将拒绝尝试使用不属于root的模块。 指定-r会抑制错误并允许root加载不属于root的模块。

使用-r是主要的安全风险,不建议使用。

-s ,-- syslog

通过syslog守护进程而不是stderr写入所有错误消息。

-u , - 未解决的错误

当有任何未解决的符号时, depmod 2.4不会设置返回码。 modutils(2.5)的下一个主要版本将为未解析的符号设置返回码。 一些发行版希望在modutils 2.4中有一个非零的返回代码,但这种更改可能会导致期望旧行为的用户出现问题。 如果您需要depmod 2.4中的非零返回码,请指定-udepmod 2.5会默默地忽略-u标志,并且总会为未解析的符号提供非零返回码。

-v- 详细

显示每个模块正在处理的名称。

-V ,-- version

显示depmod的版本。

以下选项对管理分配的人员很有用:

-b 基于目录 , - 基于 目录的 基础 目录

如果将包含模块树的目录树/ lib /模块移动到其他位置以便处理其他环境的模块,则-b选项将指示depmod在何处查找/ lib / modules树的移动图像。 构建的depmod输出文件中的文件引用modules.dep不包含基础目录路径。 这意味着当文件树从基本目录/ lib / modules移回到最终发行版中的/ lib / modules时,所有引用都是正确的。

-C configfile ,-- config configfile

使用文件configfile而不是/etc/modules.conf 。 环境变量MODULECONF也可用于从默认的/etc/modules.conf (或/etc/conf.modules (不建议使用))中选择不同的配置文件。

当环境变量

UNAME_MACHINE已设置,modutils将使用它的值而不是uname()系统调用中的机器字段。 这主要是在32位用户空间中编译64位模块时使用,反之亦然,请将UNAME_MACHINE设置为正在构建的模块的类型。 当前modutils不支持模块的完全交叉构建模式,它仅限于在主机体系结构的32位和64位版本之间进行选择。

-F kernelsyms ,-- filesyms kernelsyms

当为与当前运行的内核不同的内核构建依赖文件时, depmod使用正确的一组内核符号来解析每个模块中的内核引用是非常重要的 。 这些符号可以是另一个内核的System.map的副本,也可以是/ proc / ksyms的输出的副本。 如果内核使用版本化符号,最好使用/ proc / ksyms输出的副本,因为该文件包含内核符号的符号版本。 但是,即使使用版本化符号,也可以使用System.map

组态

depmodmodprobe的行为可以通过(可选)配置文件/etc/modules.conf进行调整。
有关完整的描述,请参阅modprobe (8)和modules.conf (5)。

战略

每次编译新内核时,命令“ make modules_install ”将创建一个新目录,但不会更改默认值。

当你得到一个与内核分发无关的模块时,你应该把它放在/ lib / modules下的一个与版本无关的目录中。

这是默认策略,可以在/etc/modules.conf中重写。

也可以看看

lsmod (8), ksyms (8)

重要提示:使用man 命令%man )查看特定计算机上的命令使用方式。