usb 드라이버 작성에 대한 질문입니다.

kingchobo의 이미지

리눅스 usb 드라이버에 관한 질문입니다.
아래 질문 을 몇개 남겨드렸는데 너무 듬성듬성이라 제대로 질문드리려구요.

리눅스에서 usb를 이용하여 I/O콘트롤러를 제어해야 하는 상황인데요.

처음부터 끝까지 궁금한게 너무 많습니다.

타겟 디바이스 : 센서의 신호를 담당하는 I/O 콘트롤러
해야 할 기능 : 센서의 상태정보를 내용 실시간 전달, pc로부터 센서의 상태 점검 요구에 대한 응답 (뭐 그리 대단한 일을 하는 건 아닙니다.)

이 장치를 쓰기 위한 리눅스 PC에서 usb 드라이버에 관련된 질문사항입니다.

1. 드라이버 작성유무에 대한 사항인데요.
ohci_hcd 드라이버 같은 리눅스에 기본적으로 있는 드라이버 모듈로도 위와 같은 디바이스의 핸들링이 가능한가요?
아니면 따로 디바이스 드라이버 모듈이 필요한건가요?

2. ohci_hcd, ehci_hcd 등과 같은 모듈에 대해서 궁금합니다.
이 드라이버들이 아래 그림의 usb core 부분이 되는 것인가요?
(저 그림을 잘라온 자료에는 개발자가 client driver를 작성해야 한다고 하는데요.)

3. libusb에 대해서 좀 알고 싶은데요
그 라이브러리는 ohci_hcd 등등의 드라이버들을 그대로 사용하는 건가요?
ioctl들을 call을 하는 거 같은데 cmd로 들어가는 인자가 따로 있더군요 USB_REQ_GET_STATUS 이런것들...
그런 인자들을 ochi_hcd나 ehci_hcd등의 드라이버들이 처리하게 되는 건가요? 아니면 다른 모듈들이 또 있나요?

4. usbnet이나 usb 스토리지 같은 경우 장치를 리눅스 PC에 설치하면 바로 모듈이 새로 올라옵니다.
반면 마우스나 카드리더의 경우는 설치를 해도 특별히 올라오는 디바이스가 없더군요.
이 두 종류의 장치간의 차이를 좀 알려주셨으면 해요.

5. 이건 좀 너무 무식한 질문 같지만
하드웨어를 구성하시는 분들께 요구해야 하는 io장치에 대한 내용은 어떤 것들이 있나요?

대충 질문 사항은 이렇습니다. 너무 많은 거 같습니다.

아직 머리속에 각이 잡이지 않아서 구현을 해도 어떤 식으로 하는게 옳은 방법인지 모르겠네요.
사람마다 말이 다 다르네요. 어떤 분은 커널 모듈같은거 안짜두 된다구 하고 어떤 분은 장치가 일반적인 게 아니니깐 짜야 된다구 하구.

부디 먼저 겪어보신 선배님들이 계시다면 조언 부탁드립니다.

kingchobo의 이미지

holelee님이 좋은 내용들을 말씀해주셔서 관심있으신분들 같이 보자구 여기에 답글로 답니다.

Quote:
1. 그때 그때 달라요.
device의 특성및 동작 속도에 따라서 kernel driver없이도 가능합니다.
libusb를 사용하면 되는데...
다만 USB device가 부착되고, 제거되고 하는 것을 처리하기에 좀 까다로울 수도 있습니다.

2. hcd 가 Host Controller Driver의 약자가 아닐까요?

3. libusb는 제가 아는한 /proc/usb 아래 mount 되는 filesystem을 통해 device에 접근가능하게 됩니다.
님이 올린 그림에서 보이는 바와 같이 ohci, uhci, ehci layer와는 상관없이 동작합니다.
다만 user level에서 하는 제어하는 것이므로 실시간 처리와 관계되어있는 isochronous transfer, interrupt transfer를 지원하기는 어려움이 있을 겁니다.
libusb의 사용은, kernel level driver, 즉 kernel module 없이 간단한 USB 장치를 제어하는데는 좋다고 봅니다.

4. 큰 차이가 없습니다.
마우스는 hid라고 해서 보통 linux가 부팅하면서 이미 모듈을 올려놓았기 때문에 새로 올라가지 않습니다.
나머지 디바이스는 USB에 새로 연결이되면 hotplug에 관련된 shell script가 새로 추가된 device의 id를 보고 해당 모듈을 찾아서 올립니다.
당연히 찾을 수 없으면 아무짓도 않하죠.
따라서 USB device를 새로 PC에 부착해도 아무런 모듈이 올라오지 않는다면 그것은 이미 필요한 모듈이 올라왔던지 아니면 그 device용 모듈을 찾을 수 없기 때문입니다.

5. 어떤 것이 있을까요? 에러없이 잘 만들어달라고 해야겠죠^^

그외 다른 내용들도 알고 계신분 계시면 공유했으면 좋겠어요.

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.