【问题标题】:IRQCHIP_DECLARE: init function is not being runIRQCHIP_DECLARE:初始化函数未运行
【发布时间】:2017-10-14 00:12:47
【问题描述】:

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

该驱动程序的末尾是以下行:

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

我在设备树中为中断控制器添加了一个条目。

    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_info,但我从来没有看到它被调用过。

似乎表明存在问题的唯一消息是:

[ 0.177772] irq: no irq domain found for /amba/xil_intc@41810000 !

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

对调试有什么建议吗?

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

编辑:我使用的是 4.6 内核。

【问题讨论】:

    标签: linux linux-kernel linux-device-driver kernel-module xilinx


    【解决方案1】:
    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 注册的,则必须将其编译到内核中,并且将在内核启动时调用回调函数。

    它不像其他设备驱动程序那样用作内核模块/覆盖层。

    【讨论】:

      【解决方案2】:

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

      我最终通过修改配置重新构建了整个内核以包含此驱动程序,然后初始化工作正常。

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

      【讨论】:

        猜你喜欢
        • 2016-10-23
        • 1970-01-01
        • 1970-01-01
        • 2013-12-11
        • 1970-01-01
        • 2016-09-23
        • 2016-08-13
        • 1970-01-01
        • 2021-07-08
        相关资源
        最近更新 更多