interrupts
속성이 나타내는 내용을 좀 더 자세히 알아야합니다. 첫 번째 예에 비슷한 촬영,의는 다음시킨, arch/powerpc/boot/dts/bamboo.dts
살펴 보자 :
UART1: [email protected] {
device_type = "serial";
compatible = "ns16550";
reg = <0xef600400 0x00000008>;
virtual-reg = <0xef600400>;
clock-frequency = <0>;
current-speed = <0>;
interrupt-parent = <&UIC0>;
interrupts = <0x1 0x4>;
};
interrupts
속성은 인터럽트 컨트롤러에이 장치에서 연결을 설명합니다. 컨트롤러가 여러 입력 (즉, 인터럽트 라인)을 가지고 있다고 가정하면이 장치가 어떤 라인과 상호 작용하는지 알아야합니다.
다른 컨트롤러에는 IRQ를 역 다중화하는 여러 가지 방법이있을 수 있으므로 속성 유형이 다양합니다. 이 경우 인터럽트 컨트롤러를 살펴 보겠습니다. 우리는 [email protected]
노드가 다음과 같은 속성이 있음을 참조하십시오 UIC0 레이블 다른 장치 트리에가 있다는
interrupt-parent = <&UIC0>;
&UIC0
구문은 우리에게 알려줍니다. 그것은 우리의 인터럽트 컨트롤러입니다. 우리가 레이블을 발견하면, 우리는 다음을 참조하십시오
UIC0: interrupt-controller0 {
compatible = "ibm,uic-440ep","ibm,uic";
interrupt-controller;
cell-index = <0>;
dcr-reg = <0x0c0 0x009>;
#address-cells = <0>;
#size-cells = <0>;
#interrupt-cells = <2>;
};
첫째, 우리는 #interrupt-cells
2 것을 볼 -이 각각의 설명은 두 개의 셀을 차지 중단을 의미합니다. 직렬 장치의 interrupt
속성에는 두 개의 셀 (0x1 및 0x4)이 있으므로 설명하는 인터럽트 선이 하나 있음을 알 수 있습니다.
compatible
속성은 IBM UIC 인터럽트 컨트롤러임을 나타냅니다. 우리가이 컨트롤러 용 드라이버를 보는 경우에, 우리는 다음을 참조하십시오 xlate 기능이 하드웨어 IRQ 번호 (그리고 아마도 그 IRQ 형)에 인터럽트 소스 'interrupts
속성을 매핑하는 데 사용되는 것입니다
static struct irq_domain_ops uic_host_ops = {
.map = uic_host_map,
.xlate = irq_domain_xlate_twocell,
};
있다. irq_domain_xlate_twocell
기능은 매우 간단합니다 :
int irq_domain_xlate_twocell(struct irq_domain *d, struct device_node *ctrlr,
const u32 *intspec, unsigned int intsize,
irq_hw_number_t *out_hwirq, unsigned int *out_type)
{
if (WARN_ON(intsize < 2))
return -EINVAL;
*out_hwirq = intspec[0];
*out_type = intspec[1] & IRQ_TYPE_SENSE_MASK;
return 0;
}
그래서 (피터 L 그의 주석에서 언급 한 바와 같이),이 경우에 두 셀 <0x1 0x4>
인터럽트 라인 1과 수준 높은 대표 (0x4로의 ==를 IRQ_TYPE_LEVEL_HIGH
) 인터럽트 유형.
두 번째 예제는 약간 더 복잡합니다. 자체적 인 xlate
기능을 가진 mpic 인터럽트 컨트롤러를 사용합니다. 내부 세부 사항은 mpic_host_xlate
(arch/powerpc/sysdev/mpic.c
)을보십시오.
여기에 몇 가지 정보가 있지만 하드웨어에 따라 값이 달라질 수 있습니다. http://www.devicetree.org/Device_Tree_Usage –
@AmitSinghTomar이 장치의 장치 트리 바인딩을 살펴보아야하지만 첫 번째 장치 번호는 일반적으로 인터럽트 라인을 나타내고 두 번째는 보통 상승 에지 트리거, 하강 에지, 레벨 트리거 등을 나타냅니다. –