Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux kernel 在设备树的前面加载内核模块';试探_Linux Kernel_Embedded_Device Tree - Fatal编程技术网

Linux kernel 在设备树的前面加载内核模块';试探

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 =

我已经为我的自定义硬件开发了一个工作驱动程序,它依赖于设备树。因为我的驱动程序可能会演变,我不希望我的驱动程序成为内核的一部分(当我说“成为内核的一部分”时,我的意思是,在内核创建期间与内核一起编译)

以下是我的dts简介:

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中。
我在这里找到了解决方案:

您似乎夸大了需求。“我不希望我的驱动程序成为内核的一部分。”“在设备树探测之前加载内核模块。”似乎唯一突出的要求是,需要在现有的硬件驱动程序之前安装自定义的硬件驱动程序,这可以在现有的框架内完成。看到这个了吗