2017-10-14 116 views
1

我正在尝试在我正在开发的嵌入式ARM FPGA系统中使用Xilinx中断控制器驱动程序。 (https://github.com/torvalds/linux/blob/master/drivers/irqchip/irq-xilinx-intc.cIRQCHIP_DECLARE:init函数未运行

在此驱动程序的到底是行:

IRQCHIP_DECLARE(xilinx_intc_xps, "xlnx,xps-intc-1.00.a", xilinx_intc_of_init);

我已经加入我的设备树的中断控制器的条目。

xil_intc: [email protected] {   
     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_info,但我从未看到它被调用。

这似乎表明了问题的唯一信息是:

[ 0.177772] irq: no irq domain found for /amba/[email protected] !

我已经成功地编写和编译其他设备驱动程序,添加设备树条目,并让他们加载并显示在dmesg ,但由于某种原因,我无法让这个工作。

对此进行调试的任何建议?

对于它的价值,我正在将驱动程序编译到内核模块中,使用modules_install进行安装,并在启动时加入了一个条目以加载/etc/modules

编辑:我正在使用4.6内核。

回答

0

我得出的结论是,从/ lib/modules加载irqchip驱动程序在启动过程中太晚了。

我结束了重建整个内核与修改后的配置,以包括此驱动程序,然后初始化工作正常。

我想教训是,IRQCHIP驱动程序必须编译到内核中,并且不像其他设备驱动程序那样作为内核模块工作?我找不到任何可以这样说的文档,但那是我观察到的行为。