Linux kernel 在设备树的前面加载内核模块';试探
我已经为我的自定义硬件开发了一个工作驱动程序,它依赖于设备树。因为我的驱动程序可能会演变,我不希望我的驱动程序成为内核的一部分(当我说“成为内核的一部分”时,我的意思是,在内核创建期间与内核一起编译) 以下是我的dts简介:Linux kernel 在设备树的前面加载内核模块';试探,linux-kernel,embedded,device-tree,Linux Kernel,Embedded,Device Tree,我已经为我的自定义硬件开发了一个工作驱动程序,它依赖于设备树。因为我的驱动程序可能会演变,我不希望我的驱动程序成为内核的一部分(当我说“成为内核的一部分”时,我的意思是,在内核创建期间与内核一起编译) 以下是我的dts简介: custom_hardware: custom_hardware@0x41006000 { compatible = "mfg,custom"; reg = <0x41006000 0x1000>; #interrupt-cells =
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>;
};
custom\u硬件:custom_hardware@0x41006000 {
compatible=“制造、定制”;
reg=;
#中断单元=;
中断控制器;
};
现有硬件:现有_hardward@41004000 {
compatible=“制造,现有”;
reg=;
中断父项=;
中断=;
};
现有的_硬件的驱动程序已经用内核编译(现有的_硬件的驱动程序在内核创建期间已经用内核编译)
我想做的是将自定义硬件的驱动程序附加到ramfs中,并让内核在现有硬件驱动程序之前加载自定义硬件的驱动程序
这一点很重要,因为现有_硬件的驱动程序从自定义_硬件驱动程序的irq_域请求virq。为了获得irq_域,必须首先加载自定义_硬件的驱动程序
请注意,现有硬件的驱动程序是在探测设备树的过程中加载的,这似乎发生在内核引导序列的早期阶段。。模块/驱动程序加载的顺序必须无关紧要。当在现有硬件中获取IRQ失败时,您需要做的是返回
-EPROBE\u DEFER
。然后,它将在稍后再次被探测,希望在自定义硬件被探测之后
此外,您还可以应用该修补程序,以确保请求\u irq()
失败,因为域尚未出现,在这种情况下返回-EPROBE\u DEFER
我也有类似的问题(探测顺序是错误的),我发现的唯一简单的解决方案是将模块按所需的探测顺序放入Makefile中。
我在这里找到了解决方案:您似乎夸大了需求。“我不希望我的驱动程序成为内核的一部分。”“在设备树探测之前加载内核模块。”似乎唯一突出的要求是,需要在现有的硬件驱动程序之前安装自定义的硬件驱动程序,这可以在现有的框架内完成。看到这个了吗