ARM SMP 코어는 프로세서 당 인터럽트 (PPI), 공유 프로세서 인터럽트 (SPI) 및 소프트웨어 생성 된 인터럽트 (SGI)를 제공하는 GIC와 종종 연결됩니다.
장치 트리 파일에서 GIC 드라이버가 호출되었습니다.
my_driver [email protected]{
compatible = "eeti,egalax_ts";
interrupt-parent = <&intc>;
interrupts = <X Y Z>
};
: 당신은 장치 트리에서 드라이버에 대한 항목을 만들 수 있습니다
intc: [email protected] {
compatible = "arm,cortex-a9-gic";
#interrupt-cells = <3>;
interrupt-controller;
reg = <0x00a01000 0x1000>,
<0x00a00100 0x100>;
interrupt-parent = <&intc>;
};
당신은 당신의 .dtsi 파일에 동일한에 대한 항목을 확인할 수 있습니다 (아치/팔/부팅/DTS/imx6qdl.dtsi)
X : SPI 인터럽트의 경우 0, PPI의 경우 1.
예 : 인터럽트 유형의 인터럽트 번호.
Z : 트리거 유형 및 수준 플래그
당신이 기능을 통해 드라이버에서 인터럽트를 (위에서 언급 한) 활성화해야
:
request_irq(IRQ_NUM, my_interrupt_handler,IRQ_FLAG, "my_driver", my_dev);
당신의 인터럽트는 당신에게 다음 등록됩니다되면 cat/proc/interrupts에서 동일한 항목을 볼 수 있습니다.
그런 다음 GIC가로 봐에 대한 더 많은 이해를 위해
[[email protected]]# cat /proc/irq/24/smp_affinity
00000001
와 같은 varify 수 0
[[email protected]]# echo 1 > /proc/irq/24/smp_affinity
핵심에 바인딩해야 할 핵심 0에 인터럽트를 배포하려면 당신 메인 라인 커널 Documentation/devicetree/bindings/arm/gic.txt
안녕하세요, vinod, 답장을 보내 주셔서 감사합니다. maxcpus = 1 옵션을 사용하여 Linux OS를 하나의 코어로 제한했습니다. 그래서 여기서 smp_affinity 옵션을 사용할 수 없습니다. 내 생각은 GIC 배포자 인터페이스와 irq_gic.c의 타겟 레지스터를 코어 1에 매핑하도록 설정하는 것입니다. 그러나 변경 사항을 어디에 넣어야할지 모르겠습니다. 너는 어떤 생각을 가지고 있니? –
안녕하세요 Saravanan, 이해했습니다. 나는 그것에 대해 확실하지 않다. 하지만 gic_notifier() 함수 또는 gic_init_bases() 함수에서 시도해 볼 수 있다고 생각합니다. 한번 시도해보고 결과를 알려주시겠습니까? –