据我所知,depmod 的目的是跟踪每个内核模块加载时的依赖关系。为什么不能在加载内核模块时简单地自动确定这一点,类似于动态加载用户空间共享库?
depmod 不仅仅计算直接依赖关系 - 它还在硬件标识符和处理它们的模块之间构建映射。这用于找到正确的模块来加载检测到的硬件。
至于为什么它不像用户空间那样进行按需加载,部分原因是设计上不允许内核链接器访问文件系统。内核的理念是文件系统的布局完全取决于用户空间,因此不能保证在
foo.ko
中找到 /lib/modules/3.0.1/drivers/somesubsys/foo.ko
。因此,内核依赖用户空间实用程序(如 depmod 和 modprobe)按照加载模块所需的顺序向其传递模块的原始数据;如果用户空间在这项工作中失败,它只会返回一个错误,并让用户空间处理混乱。
depmod 实用程序:
depmod 是一个在内核构建过程中运行的工具,用于生成模块依赖文件。它通过读取每个模块来做到这一点
/lib/modules/
depmod 实用程序不仅构建modules.dep 和modules.dep.bin 文件。它的作用还不止于此。当内核开发人员实际编写驱动程序时,他们确切地知道该驱动程序将支持哪些硬件。然后,他们负责向驱动程序提供驱动程序支持的所有设备的产品和供应商 ID。 depmod 还处理模块文件以提取和收集该信息,并生成
module.alias 文件,位于 /lib/modules/