병렬 포트 핀 9 및 10을 연결하여 하드웨어 인터럽트 트리거링이 작동하지 않음


1

핀 9와 10을 와이어로 연결하여 Linux 장치 드라이버 책에 설명 된대로 하드웨어 인터럽트를 트리거하고 싶습니다 . 나는 그것을 시도했지만 분명히 트리거되는 꿀벌이 없습니다 :

cat /proc/interrupts:

 7:          0    XT-PIC  parport0

이제 왜 그런지 궁금합니다. 커널 모듈이로드됩니다 :

parport_pc             26004  0
parport                35239  2 ppdev,parport_pc

이 책에서 인터럽트를 활성화해야한다고하지만 모듈이로드 된 경우입니다.

내가 할 수있는 아이디어가 있습니까?

답변:


1

핀을 연결하는 것만으로 인터럽트가 발생하지 않습니다. 참조 한 문서에 따르면 인터럽트를 생성하기 위해 핀 10에 단락이있는 핀 9에 일부 데이터를 작성해야합니다. 참조 문서에서 인용 :

핀 9는 병렬 데이터 바이트의 최상위 비트입니다. 바이너리 데이터를 / dev / short0에 쓰면 몇 가지 인터럽트가 발생합니다. ASCII 문자 세트에는 최상위 비트 세트가있는 항목이 없으므로 ASCII 텍스트를 포트에 쓰면 인터럽트가 발생하지 않습니다.


1
힌트를 주셔서 감사합니다, 제대로 읽어야합니다. m (글쎄, 난 작동했지만 작동하지 않습니다. 세부적으로 모듈을로드 insmod short하고 mknoded /dev/short0, 핀 9와 10이 연결되어 /dev/short0있는 cat /sbin/* > /dev/short0동안 수행 하여 바이너리 정크를 썼습니다.
JohnnyFromBF

0

사람들이 커널 코드를 읽기가 왜 그렇게 어려운지 알아? :피.

http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/drivers/char/ppdev.c

사용자 공간을 열 때 필요할 때만 장치를 활성화하는 것이 일반적입니다. 예:

ppdev.c를 보면, parport가 "클레임"되는 API가 있음을 알 수 있습니다 (반드시 배타적이지는 않습니까?!). 그런 다음에 만 호출 pp_enable_irq()합니다. (먼저 open ()을보고 거기에 의견을 보았습니다).

나는 그것이 정확한 이유인지는 모르겠지만, 그것은 당신의 가정의 결함을 보여줍니다 :).


좋아, 이것은 char 장치와는 다르게 보입니다. e1000의 경우 모듈 자체는 부팅하는 동안 irq를 활성화하는 것으로 보입니다.
JohnnyFromBF

아마도 우리는 다른 것들을보고있을 것입니다. e1000은 e1000_probe ()가 아니라 e1000_open ()에서 irq를 활성화합니다. 커널은 실제로 사용자 공간에 의한 프롬프트없이 주소없이 네트워크 인터페이스 실행을 시작합니까? 적어도 종료하는 것이 가능하며이 경우 irq는 비활성화됩니다.
sourcejedi

흠, 적어도 e1000_open()따라서 e1000_irq_enable()전에 호출되는 /dev/kmsg생성 된 이후 printk()에 넣고 난 e1000_open()에서 사용할 수 없습니다 dmesg.
JohnnyFromBF

아니, 처음부터 dmesg 로그, 적어도 당신은 ACPI와 같은 것들을 보게되고 PCI 버스 초기화는 PCI 장치를 운전하기 전에 발생해야합니다 :) ... 나는 내가 놓칠 수있는 것을 볼 수 없습니다.
sourcejedi

내가 그것을 배웠을 때 너무 놀랐다 . (그리고 그것이 왜 "올바른 방법"인지 모르겠다) : makelinux.net/ldd3/chp-10-sect-2 "request_irq를 호출하는 올바른 장소는 장치가 free_irq를 호출 할 장소는 하드웨어가 더 이상 프로세서를 중단하지 말라고 지시 한 후 장치가 마지막으로 닫히는 시점입니다. 인터럽트를 비활성화 할 수있는 시점을 알 수 있도록 장치 별 개방 횟수 "
sourcejedi
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.