USB gadget driver, UDC(USB Device Controller), HCD(Host Controller Driver)에 개념에 대한 질문.
글쓴이: ryutuna / 작성시간: 수, 2014/06/25 - 4:06오후
책을 여러권 보고 구글링 및 웹페이지를 뒤져도 제가 원하는 대답은 없어서 질문을 드립니다.
예를 들어 Host PC가 하나 있고 USB 메모리를 꼽는 시나리오로 볼 때,
실제 하드웨어와 통신을 하는 HCD가 있을테고,
HCD와 user application과 사이에서 통신을 담당하는 드라이버가 있을 겁니다.
이 상황에서 HCD와 application사이에서 통신을 담당하는 드라이버가 gadget드라이버인가요?
책에서 보자면, 위와 같이 Host PC(linux) <-> USB memory 가 아니고
Host PC(linux) <-> target board(linux)
의 상황처럼 쌍방에 리눅스가 올라간 상황에서 target board쪽에 올라간 linux에서 사용하는
USB device driver를 gadget driver라고 부르는데 정확하게 gadget driver가 어떤 건지 모르겠네요.
그리고 위에서 말한 두가지 상황(PC<->USB memory, PC<->target board)에서
UDC는 어디에 존재하고 어떤 역활을 하는 건지 모르겠네요.
해당 소스는 linux 소스 트리에 driver/usb/gadget/udc-core.c에 있습니다.
Forums:
usb_study
리눅스에서는 USB 와 관련한 driver 가 4개(좀더 있을수도? usb class 드라이버?) 있다.
1. USB host device driver (HOST 기능을 담당하는 HW 를 컨트롤 하는 드라이버 -> HCD(Host Controller Device) kernel Framework 하에 존해 )
(drivers/usb/host/ 있는 file 들을 참조)
2. USB device driver (HUB에 꼽힌 usb 모듈? HW? 가 어떻게 돌아갈지 정하는 driver (usb_register 함수로 등록 되는 놈들)
(커널 소스 전역에 걸쳐 있음. 가장 이해 빠른건 usb-skeleton.c)
3. USB slave device driver(USB HOST/DEVICE 개념에서 DEVICE 부분을 담당하는 HW 컨트롤, Target Board에서 HOST 에 꼽힐 놈)
(UDC (USB Device Controller) Kernel Framework 하에 존재)
(usb_add_gadget_udc 함수를 호출 하는 놈들을 검색해보세요..)
4. USB gadget driver (android.c 를 볼 수 있다면 이것을 보세요 가장 좋은 가젯~)
(그니깐 나의 board 가 PC HOST 에 꼽힐 때 어떤 역활을 할 것인가? Gadget Framework 하에 Composite Framework 하에)
1과 2가 서로 엮이고
3과 4가 서로 엮입니다.
1,3 은 USB IP 회사에 근무할때 짜야 되고, SoC BSP를 개발할때 포팅 해야 할부분
2와4는 새롭게 만드는 USB모듈(USB Modem? USB WIFI? USB Audio? USB Camera) 가 있을때
2는 HOST(Windows,Linux) 에서 어떻게 돌고 통신해야 하나?
4는 Target 에서 어떻게 돌고 통신해야 하나?
PC(HCD)+(usb_driver) <-> target board
PC <-> (UDC)+(gadget_driver,usb_composite_driver)target board
저도 공부하다가... 확신이 없어서 익명으로 남겨요~ ㅎ
답변 감사합니다.
도움이 많이 되었습니다.
이해가 가는 것 같네요. 남은 건 시간 투자 뿐인 것 같습니다 .
--------------------------------------------------------------
세상엔 알아야 할 것도 알지 말았어야 할 것도 너무 많았습니다.
댓글 달기