管理分发
以下选项对于管理分发的人员很有用:
-b 基目录,--basedir 基目录
如果包含模块子树的目录树 /lib/modules 被移动到其他地方以便处理不同环境的模块,-b 选项会告诉 depmod 在哪里可以找到 /lib/modules 树的移动图像。
构建的depmod 输出文件modules.dep 中的文件引用将不包含基本目录路径。
这意味着当文件树在最终发行版中从 basedirectory/lib/modules 移回 /lib/modules 时,所有引用都将是正确的。
-C 配置文件, --config 配置文件
使用文件 configfile 而不是 /etc/modules.conf。
环境变量 MODULECONF 还可用于从默认的 /etc/modules.conf(或者 /etc/conf.modules(不推荐使用))中选择不同的配置文件。
当环境变量 UNAME_MACHINE 被设置时,modutils 将使用它的值而不是来自 uname() 系统调用的 machine 字段。
这主要用于在 32 位用户空间编译 64 位模块,反之亦然,将 UNAME_MACHINE 设置为正在构建的模块的类型。
当前的 modutils 不支持模块的完全交叉构建模式,它仅限于在 32 位和 64 位版本的主机架构之间进行选择。
-F kernelsyms ,--filesyms kernelsyms
当为与当前运行的内核不同的内核构建依赖文件时,重要的是 depmod 使用正确的内核符号集来解析每个模块中的内核引用。
这些符号可以是来自其他内核的 System.map 的副本,也可以是来自 /proc/ksyms 的输出的副本。
如果内核使用版本化符号,最好使用 /proc/ksyms 输出的副本,因为该文件包含内核符号的符号版本。
但是,我们可以使用 System.map 甚至版本化符号。
描述
depmod 和 modprobe 实用程序旨在使 Linux 模块化内核可供所有用户、管理员和发行版维护人员管理。
Depmod 根据它在命令行中提到的模块集中或者从配置文件中指定的目录中找到的符号,创建一个类似“Makefile”的依赖文件。
这个依赖文件稍后被 modprobe 用来自动加载正确的模块或者模块堆栈。
在 /etc/rc.d 中的 rc 文件中,应该包含下面行
/sbin/depmod -a
,以便在启动系统后可以立即使用正确的模块依赖项。
请注意,选项 -a 现在是可选的。
出于启动目的,选项 -q 可能更合适,因为这使 depmod 对未解析的符号保持沉默。
如果我们想准确查看添加的内容,请使用 -v 开关详细运行命令。
在构建模块与其他模块导出的符号之间的关系时,depmod 不考虑模块的 GPL 状态,也不考虑导出符号的 GPL 状态。
也就是说,如果没有 GPL 兼容许可证的模块引用 GPL 唯一符号(内核中的 EXPORT_SYMBOL_GPL),则 depmod 不会标记错误。
但是,insmod 将拒绝解析非 GPL 模块的仅 GPL 符号,因此实际加载将失败。
depmod选项
-a , --all
在(可选)配置文件/etc/modules.conf 中指定的所有目录中搜索模块。
-A,--快速
比较文件时间戳,并在必要时像 depmod -a 一样操作。
如果有任何更改,此选项仅更新依赖文件。
-e , --errsyms
显示每个模块的所有未解析符号。
-h , --help
显示选项摘要并立即退出。
-n , --show
将依赖文件写入 stdout 而不是 /lib/modules 树中。
-q , --安静
告诉 depmod 保持安静,不要抱怨缺少符号。
-r , --root
一些用户在非 root 用户 ID 下编译模块,然后以 root 身份安装模块。
这个过程可以让非 root 用户 ID 拥有模块,即使模块目录归 root 所有。
如果非 root 用户 ID 被泄露,入侵者可以覆盖该用户 ID 拥有的现有模块,并使用此暴露来引导到 root 访问。
默认情况下,modutils 将拒绝尝试使用不属于 root 的模块。
指定 -r 将抑制错误并允许 root 加载不属于 root 的模块。
使用 -r 是一个主要的安全漏洞,不推荐使用。
-s , --syslog
通过 syslog 守护进程而不是 stderr 写入所有错误消息。
-u , --unresolved-error
当有任何未解析的符号时,depmod 2.4 不会设置返回码。
某些发行版希望在 modutils 2.4 中使用非零返回码,但这种更改可能会给期望旧行为的用户带来问题。
如果我们想在 depmod 2.4 中使用非零返回码,请指定 -u 。
depmod 2.5 将默默地忽略 -u 标志,并始终为未解析的符号提供非零返回码。
-v , --verbose
显示正在处理的每个模块的名称。
-V , --version
显示 depmod 的版本。
配置
depmod 和 modprobe 的行为可以通过(可选)配置文件/etc/modules.conf 进行调整。
有关完整说明,请参阅 modprobe (8) 和 modules.conf (5)。
Depmod 命令用于处理可加载内核模块的依赖项描述。
语法
depmod [-aA] [-ehnqrsuvV] [-C configfile] [-F kernelsyms] [-b basedirectory] [forced_version] depmod [-enqrsuv] [-F kernelsyms] module1.o module2.o ...
策略
每次编译新内核时,命令“make modules_install”将创建一个新目录,但不会更改默认值。
当你得到一个与内核发行版无关的模块时,你应该把它放在 /lib/modules 下与版本无关的目录之一。
这是默认策略,可以在 /etc/modules.conf 中覆盖。