为什么构建和使用内核模块需要 depmod?

问题描述 投票:0回答:2

据我所知,depmod 的目的是跟踪每个内核模块加载时的依赖关系。为什么不能在加载内核模块时简单地自动确定这一点,类似于动态加载用户空间共享库?

linux kernel
2个回答
16
投票

depmod 不仅仅计算直接依赖关系 - 它还在硬件标识符和处理它们的模块之间构建映射。这用于找到正确的模块来加载检测到的硬件。

至于为什么它不像用户空间那样进行按需加载,部分原因是设计上不允许内核链接器访问文件系统。内核的理念是文件系统的布局完全取决于用户空间,因此不能保证在

foo.ko
中找到
/lib/modules/3.0.1/drivers/somesubsys/foo.ko
。因此,内核依赖用户空间实用程序(如 depmod 和 modprobe)按照加载模块所需的顺序向其传递模块的原始数据;如果用户空间在这项工作中失败,它只会返回一个错误,并让用户空间处理混乱。


0
投票

depmod 实用程序:

depmod 是一个在内核构建过程中运行的工具,用于生成模块依赖文件。它通过读取每个模块来做到这一点 /lib/modules// 来确定应该导出哪些符号以及需要哪些符号。该过程的结果被写入 文件modules.dep 及其二进制版本modules.dep.bin。它是一种模块索引。

depmod 实用程序不仅构建modules.dep 和modules.dep.bin 文件。它的作用还不止于此。当内核开发人员实际编写驱动程序时,他们确切地知道该驱动程序将支持哪些硬件。然后,他们负责向驱动程序提供驱动程序支持的所有设备的产品和供应商 ID。 depmod 还处理模块文件以提取和收集该信息,并生成 module.alias 文件,位于 /lib/modules//modules.alias, 这会将设备映射到其驱动程序。

© www.soinside.com 2019 - 2024. All rights reserved.