[완료] GPS 수신기 윈도우즈 드라이버를 리눅스에서 올릴 방법이 없을까요?

gtko의 이미지

아센 GPS660이란 모델을 구입해 수신기 응용 프로그램을 개발중에 있습니다.

1. 이 모델의 윈도우 드라이버를 리눅스에 올릴 수 있는 방법
2. 리눅스에 호환 잘 되는 GPS 수신기를 추천해 주시면 고맙겠습니다.

댓글 주시는 분께 감사를 드립니다. ㅎㅎ

gtko의 이미지

gtko의 이미지


를 참고해서

# lsusb
  Bus 004 Device 005: ID 0e8d:3329 
 
#modprobe usbserial vendor=0xe8d product=0x3329 

를 실행하니 /dev/ttyUSB0가 만들어지네요.

그런데 usb gps를 꽃고 /var/log/messages를 보면
usbserial_generic: probe of 4-1:1.1 failed with error -5
에러가 발생하네요.

그리고 gpsd 데몬을 실행하면

 #gpsd -N -n -D 2 /dev/ttyUSB0
gpsd: launching (Version 2.36)
gpsd: listening on port gpsd
gpsd: successfully connected to the DBUS system bus
gpsd: running with effective group ID 0
gpsd: running with effective user ID 0
gpsd: opening GPS data source at '/dev/ttyUSB0'
gpsd: speed 9600, 8N1
gpsd: garmin_gps not active.
gpsd: gpsd_activate(1): opened GPS (9)
gpsd: packet sniffer failed to sync up
gpsd: closing GPS=/dev/ttyUSB0 (9)

역시 garminin_gps를 이 벤더에 맞게 컴파일 해서 커널에 올려야 하는가요?
해보신 분들의 도움 좀 부탁드립니다.
USB 동글의 세부 정보

# lsusb -v -d 0e8d:3329
 
Bus 004 Device 003: ID 0e8d:3329  
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               2.00
  bDeviceClass            2 Communications
  bDeviceSubClass         0 
  bDeviceProtocol         0 
  bMaxPacketSize0        64
  idVendor           0x0e8d 
  idProduct          0x3329 
  bcdDevice            1.00
  iManufacturer           3 
  iProduct                4 
  iSerial                 0 
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength           67
    bNumInterfaces          2
    bConfigurationValue     1
    iConfiguration          0 
    bmAttributes         0x80
      (Bus Powered)
    MaxPower              500mA
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           2
      bInterfaceClass        10 CDC Data
      bInterfaceSubClass      0 Unused
      bInterfaceProtocol      0 
      iInterface              1 
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x81  EP 1 IN
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0040  1x 64 bytes
        bInterval               0
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x01  EP 1 OUT
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0040  1x 64 bytes
        bInterval               0
    Interface Descriptor:
      bLength                28
      bDescriptorType         4
      bInterfaceNumber        1
      bAlternateSetting       0
      bNumEndpoints           1
      bInterfaceClass         2 Communications
      bInterfaceSubClass      2 Abstract (modem)
      bInterfaceProtocol      1 AT-commands (v.25ter)
      iInterface              2 
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x82  EP 2 IN
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0040  1x 64 bytes
        bInterval               1
can't get device qualifier: Operation not permitted
can't get debug descriptor: Operation not permitted
cannot read device status, Operation not permitted (1)

또, /proc/tty/driver/usbserial 의 정보는
# cat usbserial 
usbserinfo:1.0 driver:2.0
0: module:usbserial name:"generic" vendor:0e8d product:3329 num_ports:1 port:1 path:usb-0000:00:1d.3-1

휴.. 이제 우분투 커널 컴파일 방법을 찾으로 갑니다...

--
Go For It, Go For Mad.
http://gtko.springnote.com

--
Go For It, Go For Mad.
http://gtko.springnote.com

bushi의 이미지

디스크립터 정보에서 보시듯,
USB CDC(Communication Device Class) 의
ACM(Abstract Control Model) subclass 에다가
AT-commands (v.25ter) protocol 입니다.

완벽한 USB CDC-ACM 표준장치이므로 cdc-acm 드라이버를 사용하세요.
노드는 /dev/ttyACM0 처럼 생깁니다.

여기서부턴 뱀다리.

usbserial 드라이버는 bulk in/out 으로 serial(tty) 를 흉내내는 목적으로 사용하며,
오래전, 지금처럼 linux USB gadget 이 정리되지 않았을 때, 장비에 탑재되던 linux 들과의 통신을 위해 사용하던 겁니다.
이것과 비슷한 것으로 usbnet 드라이버가 있습니다.
이놈도 CDC 와는 별개로 bulk in/out 만 가지고 ethernet 을 흉내내는 목적으로 사용하며,
오래전, 지금처럼 linux USB gadget 이 정리되지 않았을 때, 장비에 탑재되던 linux 들과의 통신을 위해 사용하던 겁니다.
현재도 linux 가 탑재되는 장비의 USB device 컨트롤러에 interrupt endpoint 가 없을 경우에 유용하게 사용되기는 합니다만, 상당히 드문 경우죠.

OTL

gtko의 이미지

아래는 usb gps를 꽃았을 때 나타납니다.

Feb 12 18:52:28 gtko-ubuntu kernel: [  160.626504] usb 4-1: new full speed USB device using uhci_hcd and address 2
Feb 12 18:52:28 gtko-ubuntu kernel: [  160.794358] usb 4-1: configuration #1 chosen from 1 choice
Feb 12 18:52:29 gtko-ubuntu kernel: [  160.914415] 
Feb 12 18:52:29 gtko-ubuntu kernel: [  160.914599] cdc_acm: probe of 4-1:1.1 failed with error -22
Feb 12 18:52:29 gtko-ubuntu kernel: [  160.914689] usbcore: registered new interface driver cdc_acm
Feb 12 18:52:29 gtko-ubuntu kernel: [  160.914770] /build/buildd/linux-2.6.24/drivers/usb/class/cdc-acm.c: v0.25:USB Abstract Control Model driver for USB modems and ISDN adapters

그리고 이상태에서

 #modprobe cdc-acm vendor=0x0e8d product=0x3329

이렇게 드라이버를 올리라는 말씀이시죠? 왜 그런지 위 에러 메시지 4번째 cdc-acm이 에러 -22를 발생해서 그런지 디바이스는 만들어지지 않아요. 쩝...
그리고
cat /proc/bus/usb/devices
에도 아무런 장치도 잡히질 않고 있습니다. 물론 외장 하드를 연결하면 잘 됩니다.
좀 더 도움을 주세요. ^^|
--
Go For It, Go For Mad.
http://gtko.springnote.com

--
Go For It, Go For Mad.
http://gtko.springnote.com

bushi의 이미지

gps 장치를 빼고, usbserial 과 cdc-acm 등 모든 드라이버를 rmmod 로 내려버리세요.
(자신없으면 리부팅하세요.)

gps 장치를 연결하고, 로그 메시지를 확인하세요.

로그 메시지에 cdc-acm 이 출력한 내용이 전혀 없다면,
modprobe cdc-acm
하시고 다시 로그 메시지를 확인하세요.

cdc-acm 이 에러로그를 찍었다면, 더 이상 cdc-acm 드라이버 그대로를 가지고 해 볼 수 있는 방법은 없습니다.
가지고 계신 장치는 USB CDC-ACM 입네라고 광고는하지만 실제로는 약간 다른 비표준장치인 것입니다.

cdc-acm 드라이버 소스를 수정해서 올려가며 원인을 추적하는 것이 불가능하다면,
여기서 작업 종료입니다.
debugfs/usbmon 을 이용해서 패킷을 분석, 드라이버 소스를 참조해서 원인을 추적할 수는 있지만,
장치를 제대로 동작시키기 위해선 어차피 드라이버 소스를 수정해서 컴파일 한 다음 다시 올려야합니다.

OTL

gtko의 이미지

말씀해주신데로 usb gps 동글을 꽃으면 cdc-acm이 읽어 들이면서 에러를 내네요.

cdc-acm을 진정으로 지원하는 gps 모델을 찾아야 겠습니다.
그래도 결론을 낼 수 있게 도와 주셔서 감사합니다.

곁가지로 국내에서 일반적으로 구할 수 있는 usb타입의 gps중에 cdc-acm이 지원하는 제품을 추천해 주시면 금상첨화네요. ㅎㅎ

메일: gtko @ 한메일.net

^^
--
Go For It, Go For Mad.
http://gtko.springnote.com

--
Go For It, Go For Mad.
http://gtko.springnote.com

댓글 달기

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