Linux IRQCHIP_DECLARE:未运行init函数
我试图在我正在开发的嵌入式ARM FPGA系统中使用Xilinx中断控制器驱动程序。 在这个驱动程序的末尾是一行: IRQCHIP_DECLARExilinx_intc_xps,xlnx,xps-intc-1.00.a,xilinx_intc_of_init 我在设备树中为中断控制器添加了一个条目Linux IRQCHIP_DECLARE:未运行init函数,linux,linux-kernel,linux-device-driver,kernel-module,xilinx,Linux,Linux Kernel,Linux Device Driver,Kernel Module,Xilinx,我试图在我正在开发的嵌入式ARM FPGA系统中使用Xilinx中断控制器驱动程序。 在这个驱动程序的末尾是一行: IRQCHIP_DECLARExilinx_intc_xps,xlnx,xps-intc-1.00.a,xilinx_intc_of_init 我在设备树中为中断控制器添加了一个条目 xil_intc: xil_intc@41810000 { compatible = "xlnx,xps-intc-1.00.a";
xil_intc: xil_intc@41810000 {
compatible = "xlnx,xps-intc-1.00.a";
interrupt-parent = <&intc>;
interrupts = <0x0 0x1e 0x04>;
reg = <0x41810000 0x10000>;
interrupt-controller;
#interrupt-cells = <2>;
xlnx,kind-of-intr = <0x0>;
xlnx,num-intr-inputs = <0x1>;
};
但是,据我所知,xilinx_intc_of_init函数在启动期间从未被调用。我在函数的开头添加了一个pr_信息,但我从未看到它被调用
似乎表明问题的唯一信息是:
[0.177772]irq:未找到/amba/xil的irq域_intc@41810000 !
我已经成功地编写和编译了其他设备驱动程序,在设备树中添加了条目,并让它们加载并显示在dmesg中,但由于某些原因,我无法让这个驱动程序正常工作
对调试这个有什么建议吗
值得一提的是,我正在将驱动程序编译成一个内核模块,使用modules\u install进行安装,并在/etc/modules中添加了一个条目,以便在启动时加载它
编辑:我使用的是4.6内核。我得出结论,从/lib/modules加载irqchip驱动程序在引导过程中太晚了 最后,我用修改后的配置重新构建了整个内核,以包含这个驱动程序,然后初始化工作正常 我想教训是IRQCHIP驱动程序必须编译到内核中,而不是像其他设备驱动程序那样作为内核模块工作?我找不到任何这样的文档,但这就是我观察到的行为
IRQCHIP_DECLARE(xilinx_intc_xps, "xlnx,xps-intc-1.00.a", xilinx_intc_of_init);
驱动程序irq xilinx intc.c正在使用上述调用向irq子系统注册
如果irq驱动程序使用IRQCHIP_DECLARE宏,它将按照以下顺序调用xilinx_intc_of_init回调函数
start_kernel() –> init_IRQ() --> irqchip_init() --> of_irq_init() --> call-back function (xilinx_intc_of_init)
如果驱动程序是使用IRQCHIP_DECLARE注册的,则必须将其编译到内核中,并在内核启动时调用回调函数
它不像其他设备驱动程序那样作为内核模块/覆盖层工作