代码之家  ›  专栏  ›  技术社区  ›  ataraxis

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

  •  2
  • ataraxis  · 技术社区  · 6 年前

    根据 this note :

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

    此外:

    但是,此文件中的顺序是 不确定(取决于文件系统的安装顺序 模块)。这会导致混乱。

    解决办法是两方面的。此修补程序更新Kbuild,使其 生成并安装modules.order,其中包含 根据makefile订购的模块。

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

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

    我考虑过在modules.alias或modules.order中对它们进行重新排序,但我想这不起作用,因为内置模块没有在其中列出-对吗?

    2 回复  |  直到 6 年前
        1
  •  0
  •   user2526111    6 年前

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

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

    另外,如果有人已经探测并创建了设备,那么后者就不能做同样的事情,因为会发生冲突。

    如果您只是在builtin模块和LKM之间请求“优先权”,那么肯定首先是builtin模块。内核模块与内核位于不同的内存位置。所以,LKM的加载时间比内核晚。

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

        2
  •  0
  •   ataraxis    6 年前

    同时我找到了答案,并将其记录在这里: http://0x0001.de/linux-driver-loading-registration-and-binding

    长话短说: 是的,内置驱动程序通常优先于可加载驱动程序。 因为它们是先注册的,“先到先服务”的原则在约束的同时。