DTS 에서 가저오거나 , 고정된 Interrupt Index 를 바로 request_irq 를 이용하여 호출 하면
Claim 과 함께
"...Flags missmatch irq..."
에러 메시지가 발생합니다.
이 값을 리턴하는 함수 소스를 확인해 보면
https://github.com/Xilinx/linux-xlnx/blob/master/kernel/irq/manage.c
1502 라인
new->flags 에 IRQF_PROBE_SHARED 옵션이 없으면 위와 같은 메시지로 리턴하도록 되어 있었습니다.
그래서 IRQF_PROBE_SHARED 를 추가 하면 해당 오류는 사라 집니다.
하지만 여전히 Unable to claim irq XX; error -16 (EBUSY) 을 리턴하고 있습니다.
기존 드라이버에서 request_irq 를 할 때 string (인터럽트 소유자) 를 dts 에서 설정된 문자열로 변경하여
테스트 진행 하였지만 동일하게 에러가 발생하였음.
위의 스트링 값은 등록되게 되면 아래와 같이 입력할 때 확인할 수 있다.
# cat /proc/interrupts
등록된 장치는 아래 위치에 생성이 됩니다.
/sys/bus/i2c/drivers/ilitek_2117a
/sys/module/ilitek2117a
uio_pdrv_genirq.ko 파일이 modversion 옵션이 켜져 있어서 이것을 off 한 버전으로 올려보고 다시 테스트 해볼 예정이다.
원본 드라이버 위치는 에 존재 한다.
/lib/modules/4.19.0-xilinx-v2019.1/kernel/drivers/uio/uio_pdrv_genirq.ko
이것을 다시 빌드한 파일로 변경해보기로 함.
modversion 오류는 없어 짐.
여전히 irq 등록은 되지 않음.
-EBUSY 값은 다른 드라이버에서 이 인터럽트를 선점하고 있다는 의미 임.
아래와 같이 확인해보면 dmac 에서 34 번 인터럽트를 사용하고 있다고 나옴.
root@mimojet_lcd_peta:~# cat /proc/interrupts
CPU0 CPU1
16: 1 0 GIC-0 27 Edge gt
17: 0 0 GIC-0 43 Level ttc_clockevent
18: 3920 4533 GIC-0 29 Edge twd
19: 0 0 GIC-0 37 Level arm-pmu
20: 0 0 GIC-0 38 Level arm-pmu
21: 43 0 GIC-0 39 Level f8007100.adc
23: 0 0 GIC-0 57 Level cdns-i2c
25: 0 0 GIC-0 35 Level f800c000.ocmc
26: 478 0 GIC-0 82 Level xuartps
27: 0 0 GIC-0 58 Level e0006000.spi
28: 7 0 GIC-0 51 Level e000d000.spi
29: 4834 0 GIC-0 79 Level mmc0
30: 0 0 GIC-0 45 Level f8003000.dmac
31: 0 0 GIC-0 46 Level f8003000.dmac
32: 0 0 GIC-0 47 Level f8003000.dmac
33: 0 0 GIC-0 48 Level f8003000.dmac
34: 0 0 GIC-0 49 Level f8003000.dmac
기존 장치에서 정상 등록시 나오는 항목 GIC-0 의 64 번이라고 나온다.
결국 원인 : GIC-0 64 사용하기 위해 메핑된 가상 Index 값이 잘못되어 있어서 원인임.
해결방법
이를 위해서 Mapping Index 를 가져오기 위한 함수 irq_of_parse_and_map 함수를 사용해야 한다. (of_irq.h)
'Development > Linux' 카테고리의 다른 글
[LINUX] ext4 tool e2fsprogs 컴파일 하기 (0) | 2023.04.28 |
---|---|
[Linux] SCP 사용 명령 (파일 전송) (0) | 2023.02.15 |
[Linux] PDF 무료 소스 Poppler 빌드(Petalinux) 하기 (2) (1) | 2022.12.01 |
[Linux] PDF 무료 소스 Poppler 빌드(Petalinux) 하기 (1) (0) | 2022.12.01 |
E: Unable to lock the administration directory (/var/lib/dpkg/) 에러 해결 (0) | 2022.11.29 |
댓글