Load kernel module prior of device tree's probing
我为我的 custom_hardware 开发了一个工作驱动程序,它依赖于设备树。因为我的驱动程序可能会发展,所以我不希望我的驱动程序成为内核的一部分(当我说"成为内核的一部分"时,我的意思是在内核创建期间与内核一起编译)
这是我的 dts 的一瞥:
1 2 3 4 5 6 7 8 9 10 11 12 13 | custom_hardware: custom_hardware@0x41006000 { compatible ="mfg,custom"; reg = <0x41006000 0x1000>; #interrupt-cells = <0x1>; interrupt-controller; }; existing_hardware: existing_hardward@41004000 { compatible ="mfg,existing"; reg = <0x41004000 0x1000>; interrupt-parent = <&custom_hardware>; interrupts = <0>; }; |
existing_hardware 的驱动程序已经用内核编译(existing_hardware 的驱动程序在内核创建过程中已经用内核编译过)。
我想做的是将custom_hardware的驱动程序附加到ramfs,让内核在existing_hardware的驱动程序之前加载custom_hardware的驱动程序。
这很重要,因为existing_hardware 的驱动程序从custom_hardware 的驱动程序的irq_domain 请求一个virq。为了得到 irq_domain,custom_hardware 的驱动程序必须首先被加载。
请注意,existing_hardware 的驱动程序在探测设备树期间被加载,这似乎发生在内核启动序列的早期阶段。
这不是办法。模块/驱动程序加载的顺序无关紧要。您需要做的是在现有硬件中获取 IRQ 失败时返回
此外,您可以应用该补丁以确保
https://lkml.org/lkml/2014/2/13/114
我遇到了类似的问题(探测顺序错误),我发现的唯一简单解决方案是将模块按所需的探测顺序放入 Makefile。
我在这里找到了解决方案:Linux 内置驱动程序加载顺序是什么?