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

zer*_*lus 9 linux kernel

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

bdo*_*lan 15

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

至于为什么它不像用户空间那样进行需求加载,部分原因是因为设计不允许内核链接器访问文件系统.内核中的哲学是文件系统的布局完全取决于用户空间,因此无法保证foo.ko可以找到/lib/modules/3.0.1/drivers/somesubsys/foo.ko.因此,内核依赖用户空间实用程序(如depmod和modprobe)按照需要加载它们的顺序将模块的原始数据传递给它; 如果用户空间在此作业中失败,它只会返回错误,并让用户空间处理混乱.

  • depmod为modprobe的使用构建了这个依赖信息的缓存.实际扫描所有模块以获取此信息可能需要一段时间,因此您不希望每次调用modprobe时都这样做 (3认同)