USB gadget driver, UDC(USB Device Controller), HCD(Host Controller Driver)에 개념에 대한 질문.

ryutuna의 이미지

책을 여러권 보고 구글링 및 웹페이지를 뒤져도 제가 원하는 대답은 없어서 질문을 드립니다.

예를 들어 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에 있습니다.

익명 사용자의 이미지


리눅스에서는 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

저도 공부하다가... 확신이 없어서 익명으로 남겨요~ ㅎ

ryutuna의 이미지

도움이 많이 되었습니다.

이해가 가는 것 같네요. 남은 건 시간 투자 뿐인 것 같습니다 .

--------------------------------------------------------------
세상엔 알아야 할 것도 알지 말았어야 할 것도 너무 많았습니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.