从设备树获取信息并请求irq

时间:2018-02-07 13:59:32

标签: linux-kernel kernel linux-device-driver platform device-tree

上下文

在我正在使用的设备树中,在其中一个节点中,归档的interrupts是:

interrupts = <0x0 0x1d 0x4>;

(来自Pynq板的设备树,配备带双核ARM A9的ZYnq设备)

现在,在设备树.probe函数中,我使用Linux内核API:

irq_line = platform_get_irq(pdev, 0);

以获取irq用于函数request_irq(在ldd3第10章中描述)。

如果irq_line = platform_get_irq(pdev, 0);被执行,我得到的值0x2e与设备树的interrupts的字段不匹配。

问题

  1. <0x0 0x1d 0x4>个数是多少?我知道,根据elinux.org
  2.   

    interruptts - 设备节点的属性,包含一个中断说明符列表,一个用于设备上的每个中断输出信号。

    1. 如何使用 irq line (可能从这些数字开始)? irq line 与设备树相关吗?

    2. 为什么我得到的值与interrupts的任何一个字段都不匹配?

    3. 我确信我误解了一些重要的话题,对不起。感谢您阅读问题并分享您的知识。

1 个答案:

答案 0 :(得分:1)

  

什么是&lt; 0x0 0x1d 0x4&gt;号码?据我所知,   到elinux.org,(中断=&lt; 0x0 0x1d 0x4&gt ;;)

首先你需要查看设备节点的中断 - 父节点,这个父节点将是#interrupt-cells属性specifies number of bits needed to encode a interrupt source,所以从你的条目中断=&lt; 0x0 0x1d 0x4&gt ;;表示以下内容:

0x0  = shared processor interrupts
0x1d = interrupt number
0x4  = active high level-sensitive/[IRQ_TYPE_LEVEL_HIGH][2] 
  

如何使用irq线(可能从这些数字开始)?   irq线是否与设备树相关?

     

为什么我得到的值与任何一个字段都不匹配   中断?

好的答案here也提到this