Do diffence

[삽질] 우분투 리눅스에 USB GPS / 아센 GPS660 연결 실패... 본문

Tech Tips

[삽질] 우분투 리눅스에 USB GPS / 아센 GPS660 연결 실패...

고포릿 2009. 2. 12. 23:15
kldp에서 도움을 받아 일반적인 방법으로 안된다고 결론을 내렸다.
http://kldp.org/node/102807


1. 처음 접근 실패, usbserial 로 올려야 한다는 인터넷의 글을 뒤적여 시작.
# lsusb
Bus 004 Device 005: ID 0e8d:3329
#modprobe usbserial vendor=0xe8d product=0x3329

/dev/ttyUSB0 만들어지지만 통신은 안됨


결론은 Ascen GPS660 모델은 cdc-acm을 지원하는 것 처럼 보이기만 할 뿐. cdc-acm을 지원하지 않는다.
해당 제품의 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)
그리고 고마운 분의 설명.

http://kldp.org/node/102807#comment-475922

디스크립터 정보에서 보시듯,
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


2. 그리고 cdc-acm 에서 테스트
usbserial 모듈을 올리지 않고, USB GPS660을 꽃으면 즉시 cdc-acm이 실행된다.

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

그러나 cdc-acm 에러다. 결국 이 GPS660 은 cdc-acm을 지원하지 않는다.

3. cdc-acm을 지원하는 동글을 구해야 한다... 헉헉...