[펌] 리눅스에서의 시리얼통신

2010.05.12 07:49

조인상 조회 수:19968

원문 : http://www.ischo.net -- 조인상 // 시스템 엔지니어

Writer : http://www.ischo.net -- ischo // System Engineer in Replubic Of Korea

+++++++++++++++++++++++++++++++++++++++++++++++++++++++

 

본문 : http://www.ischo.net -- 조인상 //시스템 엔지니어

+++++++++++++++++++++++++++++++++++++++++++++++++++++++



출처 : 리눅스 시리얼 통신


리눅스에서의  시리얼통신(II)

배철수 / 리눅스월드 발행인





III. 시리얼 통신과 관련된 기타 문제



1. 고속 시리얼포트

피시에 기본으로 장착되는 시리얼포트의 최고 속도는 115,200bps이다. 만약 이보다 높은 속도를 사용하려면 특수한 시리얼 포트나 멀티포트를 사용해야 한다. 시리얼 포트 속도를 115.2k 이상으로 할 필요가 있는 경우는 여러 경우가 있으나 한가지 예를 들면 ISDN 외장형 모뎀 또는 외장형 ISDN TA를 사용하는 경우이다. ISDN 회선속도는 128k이므로 시리얼포트를 115.2k로 사용하는 경우는 ISDN 회선의 속도를 제대로 이용하지 못하고 있는 것이다.

이 경우 시리얼포트 속도를 230.4k로 높이면 ISDN의 128k속도를 모두 이용할 수 있다. 단 이것이 가능하려면 ISDN 포트(피시의 시리얼포트와 연결되는 RS-232포트)에서 230.4k 설정이 가능해야 한다. 피시의 시리얼포트를 230.4k가 지원되는 포트로 교체했다 하더라도 다른 문제는 통신프로그램이다.

PPP의 경우는 230.4k 속도 지정이 가능하나 단말 통신 프로그램의 경우는 아직 230.4k 설정이 없다. 시리얼포트를 230.4k로 설정하려면 setserial 명령으로 가능하다. 물론 하드웨어적으로 지원이 되는 경우다.



2. 모뎀을 사용하지 않는 시리얼 통신

시리얼 통신에서는 다이얼업 모뎀이 주로 사용되지만 그 외의 여러 장비가 시리얼통신에 사용된다. 여기에 다이얼업 모뎀 외의 다른 장치를 시리얼포트에 연결할 경우의 시리얼 포트 설정에 대해 살펴보면

1) 널모뎀케이블 :

두 대의 피시를 시리얼포트 끼리 직결하여 네트워크를 구축하고자 할 때나 시리얼 콘솔을 연결하는 경우 사용된다. 요즘은 랜카드 값이 싸므로 별로 많이 쓰이지 않으나 원격지 피시와 모뎀으로 연결하기 전에 테스트를 하는 경우 사용하면 편하다. 널모뎀 케이블을 사용하는 경우의 시리얼포트 설정은 모뎀을 사용하는 경우와 비슷하다. 뒤에 설명한다.

2) 전용선 모뎀

전용선 모뎀에도 다이얼업 겸용의 leased mode 2선식 모뎀(USRobotics courier)과 더미 전용선 모뎀이 있다. 더미 전용선 모뎀은 데이터 압축이 지원 안되므로 시리얼포트 속도를 모뎀속도와 일치 시켜야 한다. Leased mode 전용선 모뎀은 압축이 되므로 모뎀 속도의 2~4 배를 시리얼포트 속도에 지정한다.

전용선모뎀과 비슷한 장비로 로칼모뎀 이란 게 있다. 거리가 몇키로 이내라는 제한이 있는 대신 속도가 115.2k가 가능한 걸로 알고 있다.

3) DSU

원래 DSU는 디지털 라인에 사용하는 장비다. 그런데 DSU 중에는 비동기를 지원하는 모델이 있다. 그리고 피시의 시리얼 포트와 연결하는 RS-232C 포트도 있다. 그래서 물리적으로는 DSU를 피시의 시리얼포트에 연결할 수는 있다. 그러나 DSU의 시리얼포트에서 지원하는 속도는 56,000bps 또는 64,000bps이다. 그러나 피시의 시리얼포트는 57,600bps이므로 속도가 맞지 않는다.

그런데 최근에 일부 업체서 비동기 57,600bps를 지원하는 DSU를 생산하고 있다고 들었다. 따라서 이 모델을 쓰면 피시와 연결이 가능하다. 단 DSU는 데이터 압축이 안된다.

4) VDM

한국통신의 co-lan에서 사용하는 장비다. 이 장비는 19,200bps부터 115,200bps 까지 피시의 시리얼포트 속도를 모두 지원하므로 피시에 바로 연결이 가능하다. 이 장비도 데이터 압축이 안된다. 또 RTS/CTS 플로우 컨트롤을 사용하면 안된다.

5) 싱크/어싱크 어뎁터(RAC56/RAC128)

싱크만을 지원하는 DSU를 피시의 시리얼포트에 연결해 주는 어뎁터이다. 즉 싱크를 어싱크로 변환하고 속도도 56,000bps를 57,600bps로 변환해 준다. 역시 데이터 압축 기능이 없다. 128k를 지원하는 FDSU도 이 어뎁터를 사용해 시리얼포트에 연결이 가능하다.



IV. 다이얼아웃 연결



1. 개념

다이얼아웃이란 리눅스에서 시리얼포트를 통해 다른 호스트로 연결을 시도하는 것을 말한다. 리눅스에서 모뎀으로 하이텔을 연결하는 것이 그 예이다. 단 인터넷 사용을 위해 PPP로 연결하는 것과는 구별해야 한다. 약간의 차이가 있기 때문이다.



2. 포트 설정

다이얼 아웃 포트의 경우 연결되는 통신 회선으로 보면 공중전화망, 전용선, 널모뎀 케이블 연결 등으로 나눌 수 있다. 사용되는 장비는 거의 모뎀(다이얼업, 전용선) 이지만 시리얼포트에 연결이 되는 장비는 모두 사용 가능하다.
어느 경우든 포트 설정은 특별히 다른게 없다. 단지 세 가지만 지정해 주면 된다. 즉, 시리얼포트 장치명, 속도와 흐름제어이다. 이외에 몇 가지 더 있으나 디폴트 값을 사용하면 된다. (통신 파라메터의 경우는 N/8/1)

2.1 포트 속도

통신에 사용되는 장비가 압축이 지원되는 경우는 포트속도는 모뎀속도(선로속도)의 2~4 배를 지정해야 한다. 즉 모뎀속도가 28.8k라면 포트속도는 115.2k를 지정한다. 압축이 지원되지 않는 경우는 선로속도와 시리얼포트 속도를 일치시켜야 한다. 주의할 건 시리얼 포트에 지정할 수 있는 속도는 몇 가지로 고정되어 있다는 것이다. 즉 19,200, 38,400, 57,600, 115,200bps 등이다.

속도는 두 군데서 지정한다. 즉 통신 프로그램, 그리고 시리얼포트(setserial) 이다. setserial 명령은 부팅시마다 자동으로 실행되어야 하므로 레드햇이라면 /etc/rc.d/rc.serial 파일에 지정한다. 모뎀의 시리얼포트는 피시의 시리얼포트 속도를 자동으로 인식하여 일치시키므로 모뎀에서는 시리얼포트 속도를 지정하는 부분이 없다.

모뎀속도(선로속도)는 지정할 수는 있지만 지정하지 않는게 좋다. 모뎀속도는 상대 모뎀이나 선로 상태에 따라 달라지므로 모뎀에서 지정하는게 별 소용이 없다.

2.2 흐름제어

고속 다이얼업 모뎀(9,600bps이상)은 항상 RTS/CTS 흐름제어를 사용해야 한다. 그 외의 장비(VDM, DSU 등)는 흐름제어를 사용하지 않는다. 시리얼포트에 RTS/CTS 흐름제어를 지정하는 명령은 stty이다.

com 3 에 rts/cts 흐름제어를 지정하려면 아래 명령을 쓴다.

stty crtscts </dev/ttyS2

이 명령도 부팅시마다 실행되어야 하므로 rc.serial에 넣는다.

통신프로그램에도 흐름제어를 지정하는 부분이 있다.

2.3 단말 통신 프로그램 설정

여러가지 프로그램이 있으므로 매뉴얼을 참고 한다. 여기서는 minicom의 경우를 간단히 설명한다. minicom에 대한 자세한 설명은 리눅스랩 홈페이지 강좌난에 있다. (http://www.linuxlab.co.kr)  리눅스 월드에도 실린 적이 있다.

1) minicom 을 셋업 모드로 가동한다.(minicom -s) 아래처럼 나온다
  [configuration]
                      Filenames and paths
                      File transfer protocols
                      Serial port setup
                      Modem and dialing
                      Screen and keyboard
                      Save setup as dfl
                      Save setup as..
                      Exit
                      Exit from Minicom





minicom  -s 명령이 실행이 안되면(minicom이 설치가 안되었으면) 레드햇 6.1(영문)의 경우 설치 CD의 /RedHAT/RPM 디렉토리에서 아래 명령을 준다

rpm  -i  minicom-1.82-5.i386.rpm

2) 시리얼포트 셋업 메뉴를 선택한다.
    “Serial port setup”을 선택하면 아래 메뉴가 나온다.
  A - Serial Device        : /dev/ttyS1
B - Lockfile Location  : /var/lock
C - Callin Program    :
D - Callout Program  :
E - Bps/Par/Bits        : 115200 8N1
F - Hardware Flow Control : Yes
G - Software Flow Control : No

      Change which setting?





3) 시리얼포트를 지정한다.
  A -    Serial Device      : /dev/ttyS1
(com 2 임)





4) 시리얼포트 속도를 지정한다.
  E -    Bps/Par/Bits      : 115200 8N1





5) 흐름제어를 지정한다.
  F - Hardware Flow Control : Yes
G - Software Flow Control : No





6) 설정을 저장하고 셋업을 종료한다

    ESC를 눌러 메인메뉴(위의 1) )로 나온 후 “Save setup as dfl”를 선택한다.
    “Exit from minicom”을 선택하면 셋업이 종료된다.

7) minicom 에서 한글을 사용하려면 minicom 가동시 -l 옵션을 넣는다.
    (윈도우 피시에서 telnet으로 리눅스에 로그인한 후 minicom 을 사용하면 영문
    리눅스에서도 한글이 가능하다) 그리고 가동 후 ctrl+t 를 눌러 emulation 을 ansi로
    선택한다.

    Ctrl + t를 누르면 아래처럼 나온다.
  [Terminal settings]

A - Terminal emulation  : VT102
B - Backspace key sends : BS
C - Status line is : enabled

    Change which setting?





    여기서 “A”를 누르면 VT102가 ANSI로 바뀐다.

8) minicom을 종료하려면 ctrl+a 키를 누른 후 “x” 를 누른다.

2.4 모뎀 설정

리눅스의 모뎀을 다이얼 아웃으로 설정하는 경우의 모뎀 셋팅은 특별한 것이 없다. 통신 프로그램에 기본으로 지정되어 있는 것으로 족하다.

minicom의 경우에는 아래처럼 지정되어 있다.
  A - Init string ......... ~^M~AT S7=45 S0=0 L1 V1 X4 &c1 E1 Q0^M
([Modem and dialing parameter setup]에 있다.)





그 외에 흐름제어를 rts/cts로 지정하는 명령으로 &H1이 있다.

2.5 모뎀 공유

사무실의 여러 대의 윈도우 피시에서 리눅스 피시에 연결된 모뎀 및 전화선을 공유하는 가장 쉬운 방법은 윈도우 피시에서 telnet으로 리눅스에 로그인 한 후 리눅스에서 minicom을 가동하는 것이다. 이외에도 몇 가지 방법이 더 있다.



V. 다이얼인 포트 설정

1. 개념

다른 피시가 리눅스의 시리얼 포트를 연결해서 로그인을 할 수 있게 해주는 것을 말한다. PPP 연결과는 약간 다르다.

리눅스의 다이얼인 포트로 로그인 하는 경우를 쉘어카운트 접속이라고 한다. 즉 리눅스에서 쉘을 통해 프로그램을 실행하고 단지 그 결과만을 자신의 컴퓨터에서 볼 수 있기 때문이다. 즉 그 컴퓨터는 단지 키보드와 모니터의 기능만을 한다. 그래서 단말기 연결이라고도 한다.

예전에 피시가 없고 대형 컴퓨터만 있는 시절에 원격지에서 대형컴퓨터를 연결해 그 컴퓨터에 프로그램을 실행시키는데 사용한 장비가 터미널 즉 단말기였다. 단말기는 물론 컴퓨터가 아니다. 그런데 피시가 나온 후 피시에 단말기를 흉내내주는 프로그램을 설치하면 단말기와 똑같이 쓸 수 있기 때문에 이러한 단말기는 사라지고 현재는 피시가 이들을 대체한 것이다.

하이텔 연결시 통신프로그램에서 지정하는 VT100 이니 VT220은 바로 이들 단말기 이름들이다.

쉘 어카운트로 접속하는 경우는 모든 프로그램은 연결을 제공하는 리눅스에서 실행되어야 하고 그 결과도 리눅스에 저장된다. 예를 들어 리눅스가 인터넷에 연결되어 있는 경우 쉘어카운트로 접속해서 인터넷의 다른 호스트에 있는 파일을 다운 받으려면 리눅스에 있는 ftp 프로그램을 사용해야 하며, 다운받은 파일은 리눅스의 자기 계정에 저장된다.

이는 당연한게 초창기에 사용된 단말기는 컴퓨터가 아니므로 프로그램을 실행할 수도 데이터를 저장할 수도 없었기 때문이다.

아래 설명은 일단 다른 피시(여기서는 단말기라고 부른다)가 모뎀을 통해 리눅스로 쉘어카운트로 접속하는 경우 리눅스에서 필요한 설정을 설명한다. 이때 단말기로 사용되는 피시는 윈도우라면 하이퍼터미널과 같은 단말 통신프로그램이 필요하며 리눅스라면 위에서 설명한 다이얼 아웃 설정이 필요하고 역시 미니컴 같은 단말통신 프로그램이 필요하다.



2. 필요한 장비

필요한 장비는 시리얼포트, 모뎀, 전화선이다. 전호에 모두 설명하였으므로 참고 하기 바란다. 보통 피시에는 동시에 두 개의 모뎀만 사용이 가능하나 IRQ를 변경할 수 있는 내장모뎀(USRobotics Sportster ISA 방식)을 사용하면 4개까지 연결이 가능하다. 그 이상을 필요로 하면 멀티포트를 사용해야 한다.



3. 모뎀 설정

다이얼인 모뎀에 필요한 설정은 아래와 같다. 모뎀은 sportster, getty 프로그램은 mgetty를 사용하는 경우를 기준으로 했다.

다이얼인 모뎀의 설정은 다이얼 아웃과 같으나 아래 부분을 추가한다.

1) S0=0 : 디폴트 값이나 다른 getty는 S0=1로 지정한다. 그러나 mgetty는 s0=0이어야 한다.
2) S2=128 : escape 코드를 사용하지 않는다.
3) S13=1 : DTR이 off로 바뀌면 모뎀을 리셋 한다. 즉 초기 값으로 바꾼다. 이유는 다른 사람이
                모뎀을 사용하다 종료하면 일시적으로 DTR이 off된다. 이때 모뎀의 설정 값이
                초기치로 바뀌어야 다음 사람이 모뎀을 사용하는데 지장이 없기 때문이다.



4. getty 프로그램

다이얼인 포트에 다른 피시가 모뎀으로 접속했을 때 login: 프롬프트를 출력하고 패스워드를 입력 받아 이를 login 프로그램에 넘겨주는 프로그램을 getty라고 한다. 여러가지가 있으나 여기서는 mgetty를 기준으로 설명한다.

mgetty 설치

mgetty는 리눅스 배포본에 들어 있으나 최신 버전으로 설치하려면 아래 순서를 밟는다.

1) ftp://ftp.leo.org/pub/comp/os/unix/networking/mgetty에서 mgetty1.1.21-Jul24.tar.gz
    을 받는다.
2) 아무 디렉토리에서 아래 명령을 준다.
  tar zxvf mgetty1.1.21-Jul24.tar.gz




    mgetty-1.1.21 이라는 디렉토리가 만들어지고 그 안에 소스파일이 위치한다.

3) cd mgetty-1.1.21
4) policy.h-dist 를 policy.h로 복사한다.
    (cp policy.h-dist policy.h)
5) Makefile과 policy.h를 수정한다.

- Makefile을 수정하는 이유는 Auto PPP 옵션을 넣기 위해서 이다.
  (ppp연결에서만 필요한 옵션이다)

  110번째 라인을 아래처럼 수정한다.
  CFLAGS=-O2 -Wall -pipe -DAUTO_PPP
(-DAUTO_PPP 부분이 추가된다)




- policy.h를 아래처럼 수정한다.
  이 파일은 필수적으로 수정할 필요는 없다. 나중에 mgetty.config에서 설정해도 된다.
  그러나 여기서 수정하면 설정이 간편하다.

  아래는 수정한 후의 결과이다.
  #define LOGIN_PROMPT  “@\\P\\Sbps\n\n\r!login: ”
#define DEFAULT_PORTSPEED 115200     
#define MODEM_CHECK_TIME -1
#define FAX_STATION_ID  “82-2-2205-1986”
#define FAX_MODEM_TTYS  “ttyS2”
#define MAIL_TO        “bae”




6) make
7) make testdisk
8) make install

    이 과정을 끝내면 mgetty 실행 파일은 /usr/local/sbin 디렉토리에 있다.
  churlsu:/usr/local/sbin# l
-rwx------ 1 bin  bin 68972 Apr 5 19:10 mgetty




    mgetty 환경설정 파일은 churlsu:/usr/local/etc/
    mgetty+sendfax#디렉토리에 있다.
  churlsu:/usr/local/etc/mgetty+sendfax# l
-rw-------  1 root  bin  1561 Apr  5 19: 10 mgetty.config





9) mgetty.config 파일 수정

    policy.h에서 지정한 경우 이 파일은 별로 수정할 필요가 없다. 그러나 이 파일에 지정한
    내용이 policy.h에 지정한 것 보다 우선한다.

debug  5 (9를 지정하면 자세한 연결 내용이 /var/log/mgetty.ttyS2에 나온다)
term vt100
port ttyS2
speed 115200

*. 위에 port ttyS2 이하는 그 시리얼 포트에만 적용되는 부분이다.
    그 위는 모든 시리얼포트에 적용된다.



5. /etc/inittab 파일을  수정한다.

s2:23:respawn:/usr/local/sbin/mgetty ttyS2



6. 시리얼포트 활성화

init q 명령을 준다.(또는 리부팅한다)
ps ax 명령을 주면 아래 라인이 나와야 한다.

2255  ?  S    0:00 /usr/local/sbin/mgetty ttyS2

이제 모뎀이 전화를 받는다.



7. 다이얼인 포트를 비활성화 하려면 /etc/inittab 파일의 s2 앞에 #를 넣는다.
    다음에 init q 명령을 준다.



8. 전용선에서의 mgetty설정

시리얼포트에 전용선을 연결하는 경우는 모뎀 외의 다른 통신 장비가 사용된다. 즉 전용선 모뎀이나 DSU, 싱크/어싱크 어뎁터 등이다. 이 경우는 mgetty를  다이얼업 모뎀의 경우와 달리 설정해야 한다.(널모뎀 케이블 연결도 같다)

com1 포트에 DSU와 전용선을 사용하는 경우는 mgetty.conf를 아래처럼 지정한다
  port ttyS0
speed 57600
direct yes
toggle-dtr no



시리얼
[출처] 리눅스 시리얼 통신|작성자 야쿨트
번호 제목 글쓴이 날짜 조회 수
공지 [공지] 게시자료 열람자유. 불펌금지입니다. 조인상 2010.12.07 30736
44 파이프를 이용한 tar와 gzip 동시에 처리하기 ischo 2011.05.19 12067
43 리눅스에서 2TB 이상의 파티션 만들기 ischo 2011.04.11 12244
42 bonding 네트워크 설정 ischo 2011.03.30 15588
41 텍스트파일의 내용을 순차적으로 읽어들이는 스크립트 ischo 2011.03.29 17590
40 불특정 파일리스트 FTP 전송 스크립트 file ischo 2011.02.18 14160
39 시스템 관리자를 위한 50가지 비법 조인상 2011.01.04 12197
38 Linux Performance and Tuning Guidelines - IBM file ischo 2010.11.17 9780
37 HOW TO SELinux file ischo 2010.11.17 9339
36 CentOS에 zabbix 1.8.2 install secret 조인상 2010.07.27 2
35 case로 만드는 오라클 서비스 관리 ksh 스크립트 예제 ischo 2010.06.18 13478
34 리눅스환경에서 RedOwl 정지시키기 조인상 2010.05.27 14431
33 LVM 사용하여 추가한 디스크로 볼륨 늘리기 ischo 2010.05.19 35789
32 vsftpd 포트변경 방법 조인상 2010.05.12 14854
31 파일로 스왑추가 방법 조인상 2010.05.12 11084
30 ssh 자동로그아웃 설정방법 조인상 2010.05.12 41513
29 xinetd 모드로 proftpd 변경 조인상 2010.05.12 12351
» [펌] 리눅스에서의 시리얼통신 조인상 2010.05.12 19968
27 tar 를 이용한 테잎 백업스크립트 예 조인상 2010.05.12 10973
26 랜카드 동작속도 확인/수정 방법 조인상 2010.05.12 29465
25 sendmail 25번포트 접속이 localhost에서만 허용될때 조인상 2010.05.12 16909
서버에 요청 중입니다. 잠시만 기다려 주십시오...