임베디드 리눅스 장치에 GPS 모듈을 USB 로 연결하기
- 개발/임베디드 리눅스
- 2020. 1. 30.
반응형
본 글에서는 유블럭스사의 EVK-M8T 모듈을 Condor4V 플랫폼에 USB 인터페이스를 통해 연결하는 방법을 설명한다.
주) EVK-M8T 모듈은 USB 또는 RS-232를 통해 플랫폼과 연결될 수 있다.
EVK 연결
타겟보드에 EVK을 USB 케이블로 연결한 후, lsusb 명령을 통해 디바이스가 연결된 것을 확인한다. 아래 화면에서 "U-Blox AG" 가 해당 디바이스를 나타낸다.
TARGET$ lsusb
Bus 001 Device 003: ID 1fc9:0102 NXP Semiconductors
Bus 001 Device 005: ID 1546:01a8 U-Blox AG
Bus 001 Device 002: ID 0424:2514 Standard Microsystems Corp. USB 2.0 Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
"lsusb -v" 명령을 사용하여 디바이스에 대한 자세한 내용을 확인한다.
- "bInterfaceClass, bInterfaceSubClass, bInterfaceProtocol" 항목이 각각 "Communications, Abstract(modem), AT-commands (v.25ter)" 로 되어 있으며, 이는 해당 디바이스가 cdc-acm을 지원한다는 것을 나타낸다.
- 타겟보드의 커널이 cdc-cam 기능을 지원하는 경우 이러한 디바이스를 별도의 드라이버 없이 사용할 수 있다.
TARGET$ lsusb -v
....
Bus 001 Device 005: ID 1546:01a8 U-Blox AG
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 2 Communications
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x1546 U-Blox AG
idProduct 0x01a8
bcdDevice 3.01
iManufacturer 1 u-blox AG - www.u-blox.com
iProduct 2 u-blox GNSS receiver
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 62
bNumInterfaces 2
bConfigurationValue 1
iConfiguration 0
bmAttributes 0xc0
Self Powered
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 2 Communications
bInterfaceSubClass 2 Abstract (modem)
bInterfaceProtocol 1 AT-commands (v.25ter)
iInterface 0
CDC Header:
bcdCDC 1.10
CDC ACM:
bmCapabilities 0x02
line coding and serial state
CDC Call Management:
bmCapabilities 0x03
call management
use DataInterface
bDataInterface 1
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x83 EP 3 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 255
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 1
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 10 CDC Data
bInterfaceSubClass 0
bInterfaceProtocol 255 Vendor specific
iInterface 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
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 0
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0001
Self Powered
....
커널 컴파일 (cdc-acm 지원)
"make menuconfig" 명령을 이용하여 커널이 cdc-acm을 지원하도록 재 컴파일한다.
- Device Drivers → USB support → <*> USB Modem (CDC ACM) support
타겟보드에 퓨징된 커널이 해당 기능을 이미 지원하고 있으면 이 절차는 생략된다.
- 커널 디렉터리의 .config 파일의 CONFIG_USB_ACM=y인 경우, 지원하는 것이다.
HOST$ cd $KERNEL_DIR
HOST$ make menuconfig
커널 컴파일을 수행하고, 재 컴파일된 커널을 타겟보드에 다운로드하여 업데이트한다.
디바이스 사용
타겟보드에서 /dev/ttyACM0이라는 디바이스가 생성된 것을 확인한다.
TARGET$ ls /dev/ttyACM0
/dev/ttyACM0
이제 gpsd, gpsmon, cgps 등을 사용하면 해당 포트로 입력되는 GPS 정보를 확인할 수 있다.
TARGET$ ./gpsd -n /dev/ttyACM0
gpsd, gpsmon, cgps 등을 빌드하고 사용하는 법은 아래 글을 참고한다.
'개발 > 임베디드 리눅스' 카테고리의 다른 글
ffmpeg 사용법 - 임베디드 플랫폼용으로 빌드하기 (0) | 2021.03.21 |
---|---|
JSMN(JSON parse library) 사용법 - 임베디드 플랫폼용으로 빌드하기 (0) | 2021.03.15 |
pps-tools 빌드하기 (0) | 2021.02.15 |
임베디드 리눅스 플랫폼에 DHCP 서버 구축하기 - udhcp (0) | 2020.04.09 |
OpenSSL 을 임베디드 리눅스용으로 크로스 컴파일하기 (0) | 2020.01.31 |
dfu-util을 임베디드 리눅스용으로 크로스 컴파일하기 (1) | 2020.01.30 |
GPS 모듈을 이용하여 시스템시각을 UTC 시간에 동기화하는 임베디드 장치 구성하기 (0) | 2020.01.30 |
libpcap/tcpdump 를 이용한 네트워크 패킷 수집 (0) | 2019.04.20 |