根据this note:
当多个内置模块(尤其是驱动程序)提供相同的功能时 功能,它们会按顺序指定的链接顺序排列优先级 在Makefile中列出。
此外:
但是,此文件中的顺序为 不确定(取决于已安装文件系统的列表顺序) 模块)。这会引起混乱。
解决方案分为两部分。该补丁更新了kbuild 生成并安装包含以下名称的modules.order 模块根据Makefile排序。
如果系统具有多个提供相同功能的驱动程序,而某些驱动程序是内置驱动程序,而其他驱动程序是可加载模块,会发生什么情况?
在这种情况下哪个优先?它始终是内置的吗?以及如何更改优先级(如果可以的话)?
我考虑过要在modules.alias或modules.order中对它们进行重新排序,但是我猜这行不通,因为内置项未在其中列出-对吗?
答案 0 :(得分:0)
我不认为优先。如果您具有相同的驱动程序实例(一个来自内置,另一个来自内核模块),则由于定义重复或其他原因,最终将导致编译错误或模块加载错误。
如果在同一硬件上具有“不同”驱动程序,则不确定为什么要这样做?
此外,如果有人已经探测并创建了设备,则后面的设备将无法做相同的事情,因为会发生冲突。
如果您只是简单地询问内置模块和LKM之间的“优先级”,那么肯定会优先使用内置模块。内核模块与内核位于不同的内存位置。因此,LKM的加载要晚于内核。
因此,如果同时使用两种不同的方式加载同一驱动程序,则LKM会因为冲突而出现问题。
答案 1 :(得分:0)
与此同时,我找到了答案,并在此处进行了记录: http://0x0001.de/linux-driver-loading-registration-and-binding
长话短说: 是的,内置驱动程序通常优先于可加载驱动程序。 只是因为它们先注册,绑定时遵循“先到先得”的原则。