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

时间:2019-01-07 23:03:35

标签: linux-kernel linux-device-driver

根据this note

  

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

此外:

  

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

     

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

如果系统具有多个提供相同功能的驱动程序,而某些驱动程序是内置驱动程序,而其他驱动程序是可加载模块,会发生什么情况?

在这种情况下哪个优先?它始终是内置的吗?以及如何更改优先级(如果可以的话)?

我考虑过要在modules.alias或modules.order中对它们进行重新排序,但是我猜这行不通,因为内置项未在其中列出-对吗?

2 个答案:

答案 0 :(得分:0)

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

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

此外,如果有人已经探测并创建了设备,则后面的设备将无法做相同的事情,因为会发生冲突。

如果您只是简单地询问内置模块和LKM之间的“优先级”,那么肯定会优先使用内置模块。内核模块与内核位于不同的内存位置。因此,LKM的加载要晚于内核。

因此,如果同时使用两种不同的方式加载同一驱动程序,则LKM会因为冲突而出现问题。

答案 1 :(得分:0)

与此同时,我找到了答案,并在此处进行了记录: http://0x0001.de/linux-driver-loading-registration-and-binding

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

相关问题