이전 포스트인 Mac OS X에서 시리얼 터미널 프로그램 (Serial Terminal Emulator in Mac OS X에서 이야기했던것처럼 Mac OS X에는 GUI 인터페이스를 사용하는 쓸만한 무료 시리얼 터미널 프로그램이 없었다. (물론 telnet 터미널 프로그램은 상당히 다양하다.)
일반적인 경우는 시리얼 터미널 소프트웨어가 없어도 불편이 없지만 네트웍, 텔레컴 장비를 다루거나 임베디드 환경에서 작업하는 사람들에게 있어서는 시리얼 터미널은 가장 기본적이고 필수불가결한 툴이다.
그런 의미에서 얼마전에 발표된 CoolTerm은 Mac OS X에 있어 가뭄의 단비(?)와 같은 소프트웨어이다.

프 로그램 설명에도 써 있는것처럼 터미널 에뮬레이션 기능은 빠진 간단한 시리얼 포트 터미널 소프트웨어로 시리얼포트로 데이터를 주고 받는걸 주 목적으로 하는 임베디드 환경에서 작업하는 사람들을 주 타켓으로 하고 있다. (사실 임베디드 환경에서 작업하는 사람들에게는 터미널 에뮬레이션 기능(vt100, xterm 등등)은 없어도 관계없다.) 그렇기 때문에 데이터를 텍스트 포맷 뿐 아니고 헥사값으로도 볼 수 있고 시리얼 포트가 여러개 있는 경우 동시에 복수개의 커넥션 연결, 헥사값으로 데이터 전송 등등 임베디드 작업에 유용한 여러가지 기능들을 가지고 있다.

RTS/CTS, DTR/DSR, DCD, RI 등의 핸드쉐이크 핀의 상태를 볼 수 있다.

Options에서 통신 환경을 설정할 수 있다.

Send String에서 텍스트로 뿐 아니고 헥사값을 보낼 수도 있다.


현재 (Version 1.0) Preferences에서는 Viewer의 폰트설정만 변경할 수 있다.
Posted by nautes

Serproxy (Serial Proxy)는 시리얼 포트의 입출력을 TCP/IP 네트웍을 통해 리다이렉션 시켜주는 멀티쓰레드 프락시 소프트웨어이다. 작은 임베디드 보드의 경우 시리얼 포트만 가지고 있고 tcp/ip 스택을 가지고 있지 않아서 네트웍을 통해 연결을 할 수 없는 경우가 많다. 이런 경우 serproxy를 사용하면 원격지에 있는 디바이스를 네트웍을 통해 제어할 수 있게 된다.

그 이외에도 플래쉬나 다른 프로그래밍 언어로 사용자 인터페이스를 만드는 경우 해당 언어에서 시리얼 포트를 제어하는 라이브러리를 제공해주지 않으면 시리얼 포트를 사용할 수가 없지만 serproxy를 사용하면 소켓 프로그래밍 인터페이스를 사용해서 시리얼 포트로 데이터를 주고 받을 수 있다.


200806222356.jpg

(a) 시리얼 포트를 직접 억세스하는 경우


200806222356.jpg

(b) Serial proxy를 사용하는 경우

위의 그림 (b)에서는 serproxy를 실행하는 컴퓨터와 그 시리얼 포트를 사용하는 컴퓨터를 따로 그려 놨지만 한 컴퓨터에서 serproxy를 실행하고 같은 컴퓨터에서 소켓 프로그램으로 시리얼 포트를 억세스 할 수도 있다. (제어 프로그램을 플래시로 만드는 경우 경우 플래시에서 시리얼 포트를 직접 억세스 할 수 없기 때문에 이런 방법을 사용해야 한다. 이 경우 destination ip: localhost, port: cfg파일에 설정한 포트번호로 억세스 하면 된다.)

여기서 소스 및 윈도우용 바이너리 파일을 다운받을 수 있다.

맥용 바이너리 파일은 아래에서 다운받으면 된다.


압축을 열어보면 serproxy와 serproxy.cfg 가 있는데 serproxy.cfg는 /usr/local/etc에 serproxy는 /usr/local/bin에 복사해주고 자신의 환경에 맞게 serproxy.cfg를 바꿔주면 된다.


# 시리얼 포트에서 오는 뉴라인('\n')을 nils('\00') 으로 변환

# 플래시의 경우 끝에 nils가 오지 않으면 앞부분을 해석하지 않기 때문에 이 기능이 필요하다. true (e.g. 플래시를 사용하는 경우 or false

newlines_to_nils=true

# 사용할 시리얼 포트, 여기서는 2개를 사용하는 경우, 각각 1, 2가 된다.

comm_ports=1,2

# 디폴트 설정

comm_baud=19200

comm_databits=8

comm_stopbits=1

comm_parity=none

# 아이들 타임아웃

timeout=300

# 포트 맵핑 설정, 즉 시리얼 포트 1은 TCP포트 5531을 통해, 시리얼 포트 2는 TCP포트 5532를 통해 사용할 수 있음

net_port1=5331

net_port2=5332

# 각 시리얼 포트 디바이스 이름

serial_device1=/dev/tty.usbserial

serial_device2=/dev/tty.usbserial-3B1
Posted by nautes

사용자 삽입 이미지


Embedded환경에 익숙한 사람이라면 가장 중요한 툴중에 하나가 시리얼 포트이다. Mac OS X에는 telnet, ssh 프로토콜을 지원하는 좋은 네트웍 터미널 프로그램이 많은데 비해 시리얼 터미널 프로그램을 찾아보기가 쉽지 않다. 시리얼 포트를 자유롭게 사용할 수 없다면 아무리 맥에서 크로스 컴파일러로 hex파일을 만들어도 다운할 수도 없고 embedded board의 콘솔 출력을 보기 힘들게 된다. 그래서 맥에서 시리얼 포트를 사용하는 방법을 여기에 정리해 보려고 한다.

* 잘 알다시피 OS X가 발표된 이후에 나온 하드웨어들에는 시리얼 포트가 장착되어 있지 않다. 시리얼 포트를 사용하려면 USB to RS-232 컨버터를 구입해야 한다. 구입시 따라오는 디바이스 드라이버를 설치한 다음에 컨버터를 연결해주면 /dev 디렉토리에 /dev/tty.usbserial, /dev/cu.usbserial 같은디바이스 파일이 생성된다.

1. 터미널 프로그램으로 'screen' 을 사용
Mac OS X에 기본으로 포함되어 있는 screen을 시리얼 터미널 프로그램으로 사용할 수 있다. 원래는 가상 터미널을 만들어주는 프로그램이지만 시리얼 디바이스에 연결된 가상 터미널도 만들 수 있다. 먼저 mac os x 의 terminal이나 iTerm같은 프로그램을 실행해서 커맨드 프롬프트에서

$ screen <디바이스 이름> <전송속도>

의 형태로 사용하면 된다. 자세한 옵션이나 사용방법은 man page을 참조하면 된다. ($ man screen)
시리얼 터미널에서 빠져나오려면 'ctrl-a, ctrl-\'를 순서대로 눌러주면 된다.

2. kermit을 사용

ftp://kermit.columbia.edu/kermit/public_html/ckermit.html

위의 링크에서 소스를 받아 컴파일을 하려고 하면 맥은 UUCP lockfile (/var/spool/lock)을 지원하지 않기 때문에 빌드에서 에러가 발생한다. 이 경우 KFLAGS=-DNOUUCP 옵션을 붙여서 컴파일 해 주면 된다.

$ make macosx10.4 KFLAGS=-DNOUUCP

이렇게 빌드해 준 바이너리를 현재 OS X 10.5.3에서도 문제없이 사용하고 있다. 단 UUCP lockfile을 사용하지 않기 때문에 시리얼 포트를 한번에 한 인스턴스의 kermit만 open하도록 강제하지 못하지만 맥을 동시에 여러명이 사용하지 않는 이상 큰 문제는 없다.
빌드 및 설치가 끝난 다음에 시리얼 포트에 연결하려면 kermit을 실행시킨 다음 아래의 명령을 사용하면 된다.

c-kermit> set modem type none     ; 널모뎀인 경우 모뎀 타입을 'none'으로 해 준다.
c-kermit> set carrier-watch off   ; 널모뎀이기 때문에 별도의 캐리어가 없으므로 off
c-kermit> port /dev/tty.USBSERIAL ; 자신이 사용하는 usb to rs-232 converter 디바이스
c-kermit> flow none               ; flow control, default는 rts/cts이다.
c-kermit> speed 57600             ; 통신 속도(bps)
c-kermit> connect                 ; 연결

일단 연결된 상태에서 명령어 프롬프트(c-kermit>) 으로 빠져 나오려면 'CTRL-\ 다음에 c'를 누르면 된다. 연결을 끊으려면 close 명령어를 사용한다.
사용하기에는 c-kermit이 조금 더 복잡하지만 그 이상으로 막강한 기능을 가지고 있기 때문에 훨씬 더 유용하다.
Posted by nautes

이전버튼 1 이전버튼