2017-04-12 1 views
0

인터럽트 인 엔드 포인트 (마우스/KBD/터치 스크린)가있는 USB 장치를 사용하는 경우 호스트 컨트롤러는이 엔드 포인트를 폴링하여 엔드 포인트에서 데이터를 가져옵니다. 그래서 리눅스에서는이 파이프를 URB (USB 요청 블록)라고하며이 URB는 호스트 컨트롤러에 의해 초기화됩니다. 데이터가 호스트 컨트롤러에 의해 수집되므로 이제 경로가 손실됩니다. 데이터가 RAM 컨트롤러에 버퍼링되어있을 가능성이 있습니다 (확실하지 않음) ... 호스트 컨트롤러가 인터럽트 컨트롤러에 인터럽트를 등록해야 코어가 USB 장치에서 원래 들어오는 인터럽트를 처리 할 수 ​​있습니다. 어떤 드라이버가 PIC에 인터럽트를 등록합니까? 호스트 컨트롤러가 폴링 한 데이터는 어디에 저장됩니까?USB 호스트 컨트롤러로 인한 인터럽트

누구나 익숙합니까? USB 숨겨 장치

- ************* 우분투 14.04.4 TLS Egalax USB 터치 스크린과 젝슨 테그 라 K1 :


**** 내 사양

dmesg : 입력 : eGalax Inc. eGalaxTouch EXC3000-1470-46.00.00 as /devices/platform/tegra-ehci.2/usb2/2-1/2-1.2/2-1.2.3/2-1.2.3 : USB HID v2.10 포인터 [eGalax Inc. eGalaxTouch EXC3000-1470-46.00.00] on usb-tegra-ehci.2- 입력/입력 8 [83.700372] hid-multitouch 0003 : 0EEF : C000.0007 : 입력 : USB HID v2.10 포인터 1.2.3/input0 lsusb -v : 버스 002 장치 012 : ID 0eef : c000 D-WAV Scientific Co., 중위 D bInterfaceClass 3 휴먼 인터페이스 장치 bInterfaceSubClass 1 부트 인터페이스 서브 클래스 bInterfaceProtocol 2 마우스 엔드 포인트 디스크립터 : bLength 7 bDescriptorType 5 bEndpointAddress를 0x81 EP 1 bmAttributes 3 IN 전송 방식 인터럽트 동기 유형 없음 사용 타입 데이터 의 wMaxPacketSize 0x0040 1x 64 바이트 bInterval

답변

0

어떤 드라이버가 인터럽트를 PIC에 등록합니까?

teag 플랫폼 용 EHCI 드라이버가 인터럽트를 등록합니다. "drivers/usb/host"의 ehci-tegra.c 파일을 참조하기 만하면됩니다. 디버그 프린트를 추가하고 tegra 플랫폼 용으로 다시 컴파일하면이 파일이 빌드됩니다.

호스트 컨트롤러가 폴링 한 데이터는 어디에 저장됩니까?

데이터가 확실히 RAM에 저장됩니다. 그리고 버퍼 주소는 실제로 사용자 공간 응용 프로그램에 의해 설정됩니다.

+0

친애하는 @Shaibal - 사용자 공간 응용 프로그램이란 무엇입니까? ehci-tegra.c에서 언급 한 DMA 메모리 맵핑? – fetteotter

+0

사용자 공간에 의해, 나는 URB의 버퍼가 DMA 버퍼에 의해 덮어 쓰여지는 것을 의미했습니다. URB는 사용자 공간 응용 프로그램에서 유래합니다. DMA를 위해 연속적인 물리적 메모리가 필요하기 때문에 버퍼 주소는 ehci-tegra.c에 할당 된 dma 메모리로 대체됩니다. – Shaibal

관련 문제