内置驱动程序是否始终优先于可加载模块?

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

根据此注释

当多个内置模块(尤其是驱动程序)提供相同的 能力,它们按顺序指定的链接顺序排列优先级 列在 Makefile 中。

此外:

但是,这个文件中的顺序是 不确定(取决于文件系统列出已安装的顺序 模块)。这会引起混乱。

解决方案分为两部分。该补丁更新了 kbuild,以便它 生成并安装包含名称的modules.order 模块根据 Makefile 排序。

如果系统有多个驱动程序提供相同的功能,其中一些是内置的,另一些是可加载模块,会发生什么?

在这种情况下哪一个优先?总是内置的吗?我怎样才能改变优先级(如果可能的话)?

我考虑过在modules.alias或modules.order中对它们重新排序,但我猜这行不通,因为内置插件没有在那里列出 - 对吗?

linux-kernel linux-device-driver
2个回答
2
投票

同时我找到了答案。

长话短说: 是的,内置驱动程序通常优先于可加载驱动程序。 只是因为他们是先注册的,并且绑定时遵循“先到先得”的原则。


0
投票

我认为没有优先权。如果您有相同的驱动程序实例(一个来自内置,另一个来自内核模块),最终您将因重复定义或其他原因而出现编译错误或模块加载错误。

如果您在同一硬件上有“不同”的驱动程序,不确定为什么要这样做??

此外,如果有人已经探测并创建了设备,则后者无法执行相同的操作,因为会发生冲突。

如果你只是问内置模块和LKM之间的“优先级”,那么内置模块肯定是第一位的。内核模块与内核位于不同的内存位置。因此,LKM 的加载晚于内核。

所以,如果你同时用两种不同的方式加载同一个驱动程序,LKM将会因为冲突而出现问题。

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