linux 상에서 usb 인터럽트 처리 방식 관련 질문입니다.
usb keyboard/mouse 관련 코드를 분석 중에 있습니다.
usb에 대한 기본지식이 없는 사람입니다. 코드 분석의 목적인 usb 인터럽트 모델의 대략 적인 흐름을 판단코자 합니다. 인터럽트 발생 시점부터 모두 분석을 하려고 시도했으나 이게 양이 장난이 아니더군요...그래서 중간 중간에 끊어서 보느라 옳바르게 이해를 했는지 궁금합니다.
일단 호스트콘트롤러는 uhci를 사용하고 있습니다. 커널은 2.4.20입니다.
(키보드 키를 누르면) 먼저 usb-uhci.c 에서 uhci에서 인터럽트가 발생하고 이에 대한 적절한 처리(urb등의 처리)를 수행 후
HID core 쪽에서(hid-core.c) 이것을 받아서 어떤 device로 부터의 인터럽트인지 구분 후 실제 호스트 드라이버(usbkbd.c 혹은 usbmouse.c) 쪽으로 넘겨서 실질적인 ISR을 처리한다.
제가 대략적으로 이해한 것이 맞는지 고수님들의 과격한(?) 태클 부탁드립니다.
위에 내용이 맞다는 가정하에 두어가지 더 질문을 드리겠습니다.
새로운 usb kbd/mouse가 시스템에 붙는 경우에 위의 예대로 라면 hid-core쪽에서 device 분류만 해주면 즉, device id와 vendor_id등만 확인을 해 주면 될것 같은데요..
다른 추가 작업이 필요한가요 ?
usb 관련 문서를 보다보면 class driver라고 많이 나오던데..class driver라는게 usb kbd/mouse 같은 경우는 HID 즉,hid-core를 말하는 건가요 ?
그럼 고수님들의 답변 부탁드립니다.
댓글 달기