「depmod(8)」-

  LINUX MANUAL PAGES

生成modules.dep和映射文件

命令语法格式

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内核模块可以为其他模块提供服务(称为“symbols”)(使用代码中的一个EXPORT_SYMBOL变体)。如果第二个模块使用此符号,则第二个模块明显取决于第一个模块。这些依赖关系可能变得非常复杂。

命令depmod通过读取/lib/modules/version下的每个模块,并确定它导出的符号以及它需要的符号,以此来创建模块依赖项列表。默认情况下,此列表将写入modules.dep,并在同一目录中写入名为modules.dep.bin的二进制哈希版本。如果在命令行上给出了文件名,则只检查那些模块(除非列出所有模块,否则这些模块很少有用)。 depmod还创建一个名为modules.symbols的文件,保存了模块提供的符号列表,及其二进制哈希版本modules.symbols.bin文件。最后,如果模块提供启动时应该在/dev(通过诸如systemd-tmpfiles之类的实用程序)填充的特殊设备名称(devname),则depmod将输出名为modules.devname的文件。

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

命令支持的选项及含义

-a, –all
探测所有模块。 如果在命令行中未给出文件名,则默认情况下启用此选项。

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

-b basedir, –basedir basedir
如果您的模块当前不在(普通)目录/lib/modules/version中,而是在暂存区域中,则可以指定basedir(前缀于基于目录名)。 从生成的modules.dep文件中删除此basedir,因此可以将其移动到正常位置。 如果您是需要预生成元数据文件而不是稍后再次运行depmod的发行版提供者,请使用此选项。

-C, –config file or directory
此选项将覆盖/etc/depmod.d/处的缺省配置目录。

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

-e, –errsyms
与-F选项结合使用时,会报告模块需要的任何符号,这些符号不是由其他模块或内核提供的。 通常,模块未提供的任何符号都假定由内核提供(在完美的世界中应该是正确的),但是当额外更新的第三方驱动程序未正确安装或构建不正确时,此假设可能会中断。

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

-P prefix
某些架构使用无关字符作为前缀符号的前缀。 这指定要忽略的前缀字符(例如“_”)。

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

-v, –verbose
在详细模式下,depmod将打印(到stdout)每个模块所依赖的所有符号以及提供该符号的模块文件名。

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

-V, –version
显示版本信息并退出。

-h, –help
显示帮助信息并退出。

相关手册

depmod.d(5), modprobe(8), modules.dep(5)

参考文献

  • man 8 depmod, Version 23-2

更新日志

  • 10/03/2018 创建文章