Chapter 4
Setting up the Serial Hardware


D.M.Z CONTENT PRE NEXT

4.1 Communication Software for Modem Links
4.2 Introduction to Serial Devices
4.3 Accessing Serial Devices
4.4 Serial Hardware

4.1 Communicaton Software for Modem Links

저멀리 netland에는 하나의 PC만을 가진, 그리고 T1 인터넷 링크에 돈을 쓸 형편이 안되는 사람들이 살고 있다고 한다. 그럼에도 일일분의 news와 mail을 얻기 위해, 그들은 공공 전화 네트웍을 응용한 SLIP 링크, UUCP 네트웍, 그리고 bulletin board system(BBS)의존 한다고 한다.

이 chapter는 위의 링크를 유지하기 위해 모뎀에 의존하는 사람들을 도와주고자 한다. 그러나 이 chapter가 파고들지 않는, 예를 들어 어떻게 모뎀을 설정하는지에 관한 항목들도 있는데, 이러한 것들은 곧 나올, Greg Haukins가 쓴 Serial HOWTO에서 다루어질 것이며, 이는 정기적으로 comp.os.linux.announce에 포스팅된다.


4.1 Connection software for Modem Links

리눅스에서 사용가능한 통신 패키지는 여럿 있는데, 그 대부분은 사용자가 마치 단순한 터미널 앞에 앉아 있는 것처럼, 다른 컴퓨터에 dial 해 들어가게 하는 터미널 프로그램(terminal program)이다. 전통적인 Unice용 터미널 프로그램은 kermit이나, 그것은 어떤 면에서 매우 간소하다. 이외에 좀 더 편한, 즉 전화번호부와, 전화를 걸고 리모트 컴퓨터에 로그인 하도록 하는 스크립트 언어 등을 지원하는 프로그램들이 있는데, 이들중 하나가 minicom으로, 이전의 DOS 사용자들에게 친숙한 터미널 프로그램들과 유사하다. 역시나 X 기반 통신 패키지도 있으며, 예를 들자면 seyon이 그러한 것이 되겠다.

bulletin board system을 운영하고자 하는 사람들을 위해 많은 리눅스 기반 BBS 패키지가 있는데, 이들 중 몇몇은 sunsite.unc.edu/pub/Linux/system/Network에서 얻을 수 있다.

터미널 프로그램과는 별도로, 시리얼 링크를 통해 당신의 컴퓨터로 또는 에서 비-인터랙티브적으로 데이터를 전송하는 소프트웨어도 존재한다. 이것이 가지는 장점은, 메일함의 메일을 직접 온라인으로 읽고,관심있는 글을 읽기 위해 bulletin board를 훑어 보는데 걸리는 시간에 비교되지 않을 정도의 적은 시간으로 몇십킬로 바이트의 적은 데이터를 다운 받을 수 있는 것이다. 반면에, 이것은 보다 많은 디스크 용량을 필요로 하는데, 그 이유는 당신이 필요치 않은 정보도 읽어들이기 때문이다.

이러한 종류의 통신 소프트웨어의 전형이 UUCP이다. UUCP는 파일을 한 호스트에서 다른 곳으로 복사하고, 리모트 호스트에서 프로그램을 실행시키는 등의 일을 하는 프로그램 슈트로, 개별 네트웍 내에서 종종 mail과 news를 전송하는데 쓰인다. Ian Taylor의 UUCP 패키지는 다음의 chapter에서 기술한다. 또다른 비-인터랙티브한 통신 소프트웨어들은 Fidonet의 도처에서 사용되는데, ifmail과 같은 Fidonet 어플리케이션 포팅판도 역시 사용 가능하다.

SLIP (serial line Internet Protocol)은 인터랙티브한, 또는 비-인터랙티브한 사용이 둘다 가능한 다소 어중간한 것이다. 많은 사람들이 교내 네트웍이나, FTP 세션을 운영하는 공공 SLIP 서버와 같은 곳에 dial up 하기 위해 SLIP을 사용한다. 그러나, SLIP은 LAN-to-LAN 결합의 영구적인, 혹은 반 영구적인 커넥션을 수립하는데 사용되기도 한다. 비록 이것은 단지 ISDN의 경우에만 실제로 흥미로운 것이지만 말이다.


4.2 Introduction to Serial devices

UN*X 커널이 제공하는 디바이스 중, 시리얼 디바이스에 접근하기 위한 것들을 일컬어 ttys라 하는데, 이는 Teletype™의 약어로써, 예전부터 Unix에서 주로 터미널을 만들어내 온 것들중 하나이다. 오늘날, 이 용어는 character-based 데이터 터미널을 지칭하는데, 이 chapter에서는 이 용어를 커널 디바이스를 지칭할 때 사용할 것이다.

리눅스에선 tty의 세가지 클래스가 있는데, (Virtual) console, pseudo-terminal(X11등의 어플리케이션이 사용하는, 두 갈래의 파이프와 유사한 것), 그리고 시리얼 디바이스이다. 마지막 것도 역시 tty처럼 간주되는데, 이유는 그것이 시리얼 커넥션, 즉 전선으로 연결된 터미널 혹은 전화선 너머의 리모트 컴퓨터, 상에서 인터랙티브한 세션을 허용하기 대문이다.

tty에는 ioctl(2) 시스템 콜을 사용하여 설정할 수 있는 파라미터가 몇개 있는데, 이들 중 많은 것이 시리얼 디바이스에만 적용되는 것으로, 다양한 커넥션 타입을 제어하기 위하여 유연성을 좀 더 필요로 하기 때문이다.

가장 두드러진 라인 파라미터는 라인 속도와 패리티(parity:짝수 홀수 검사를 위해 첨가한 비트-역자주)이다. 물론, 대문자와 소문자의 변환을 위한, 그리고 라인 처리를 위한 캐리지 리턴 등의 플래그도 존재한다. tty는 디바이스 드라이버를 완전히 다르게 동작하게 하는, 다양한 line discipline도 지원하는데, 예를 들어 리눅스용 SLIP은 특수한 line discipline에 의해 실행된다.

라인의 속도를 측정하는 방법에 관해 모호한 bit, 올바른 용어론 Bit rate가 있는데, 이는 라인의 전송 속도를 초당 bit(짧게는 bps)의 단위로 나타낸다. 때때로 사람들이 그것을 Baud rate라 부르는 것을 들은 적이 잇을 것이나, 이는 잘못된 사용이며, 위의 두 용어는 같은 뜻으로 쓰일 수 없다. Baud rate는 시리얼 디바이스의 물리적인 성질, 즉 pulse가 전송되는 clock rate를 지칭하고, Bit rate는 두 지점간에 현존하는 시리얼 커넥션의 현재 상태, 다시 말해 초당 전송되는 비트의 평균치를 나타낸다. 대부분의 디바이스가 한 pulse당 하나 이상의 bit을 encode하는 것처럼, 이 두 값이 보통 다른 값을 지닌다는 것을 아는 것은 중요하다.


4.3 Accessing Serial Devices

UN*X 시스템의 다른 모든 디바이스들 처럼, 시리얼 디바이스도 /dev 디렉토리하의 특수 디바이스 파일을 통해서 접근할 수 있다. 시리얼 드라이버에 연관된 디바이스 파일은 두 종류가 있고, 각 포트마다 그들 중 한 디바이스가 있으며, 접근하는 파일에 따라 디바이스는 다르게 동작한다.

첫번째 종은 포트가 dial in 할 때 사용되고, 그 major number는 4이며 파일명은 ttyS0,ttyS1등의 식으로 부여된다. 두번째 종은 포트를 통해 dial out할 때 사용되고, 파일명은 cua0등으로 지정되며 major number는 5이다.

minor number는 양 타입에 모두 인식 될 수 있다. 모뎀이 COM1에서 COM4중의 하나에 있다면, 그것의 minor number는 COM포트 번호에 63을 더한 값이다. 당신의 보드가 다중 시리얼 라인을 지원하여 위와 다르게 설정되어 있는 경우엔, Serial Howto를 읽어 보길 바란다.

당신의 모뎀이 COM2에 있다고 가정한다면, 그것의 minor number는 65가 되고 major number는 dial out하는데 5가, 디바이스로는 cua1가 부여될 것이다. /dev 디렉토리에서 시리얼 tty를 나열해 보라. 5번째와 6번째 컬럼에서 major와 minor number를 보여줄 것이다.

     $ ls -l /dev/cua*
     crw-rw-rw-   1 root        5,   64 Nov 30 19:31 /dev/cua0
     crw-rw-rw-   1 root        5,   65 Nov 30 22:08 /dev/cua1
     crw-rw-rw-   1 root        5,   66 Oct 28 11:56 /dev/cua2
     crw-rw-rw-   1 root        5,   67 Mar 19  1992 /dev/cua3

만약, 그러한 디바이스가 존재하지 않는다면, 슈퍼 유저가 되어 다음을 입력하라.

     # mknod -m 666 /dev/cua1 c 5 65
     # chown root.root /dev/cua1

어떤 사람들은 모뎀 디바이스에 /dev/modem 심볼릭 링크를 만들어, 일반 유저가 어떤 면에서 직관적이지 않은 cua1을 기억하지 않아도 되게 한다. 그러나 어떤 프로그램에서는 modem을 사용할 수 없고 진짜 디바이스 파일명을 대신 사용해야 한다. 이 이유는 이러한 프로그램이, 파일이 사용중이라는 것을 나타내기 위해, 소위 lock files을 사용하기 때문이며, 편의를 위해 cua1의 경우 lock file의 이름은 LCK..cua1이다. 동일 포트에 서로 다른 디바이스 파일을 사용한다는 것은 프로그램이 다른 쪽의 lock file을 인지할 수 없고 양쪽 모두 디바이스를 동시에 사용하게 되는데, 이 경우 양쪽 어플리케이션 모두 종작하지 않을 것이다.


4.4 Serial Hardware

리눅스는 현재 RS-232 표준을 따르는 많은 종류의 시리얼 디바이스를 지원한다. RS-232는 현재 PC에서의 시리얼 통신을 위한 보편적인 표준으로, 동기화(synchronization)와 동시에 단일 비트 전송을 위해 몇개의 회로를 사용한다. 추가적인 라인은 캐리어의 유무를 알리고, handshake하기 위한 용도로 사용된다.

비록 하드웨어 handshake가 선택적인 것일 지라도, 이는 매우 유용하다. 그것은 두 station 중 하나가, 데이터를 더 수신할 준비가 되어 있는지, 혹은 수신하는 쪽에서 들어오는 데이터를 처리할 때까지 다른 station이 멈춰 있는지를 알린다. 이를 위해 쓰이는 라인을 일컬어 "Slear to Send" (CTS)와 "Ready to Send" (RTS)라 하는데, 이는 하드웨어 handshake의 구어적인 명칭, 다시말해 "RTS/CTS"이다.

PC에서, RS-232 인터페이스는 흔히, National Semiconductor 16450 chip에서 유래한 UART 칩 또는 NSC 16550에 의해 제어된다. 몇몇 브랜드 (가장 부목할 만한 것은 Rockwell chipset이 쓰인 내장형 모뎀들)도 16550인 것처럼 동작하도록 프로그램된 별도의 칩을 사용한다.

16450칩과 16550칩의 주된 차이점은, 전자기 1바이트의 버퍼를 갖고 있는데 반해, 후자는 16 바이트 짜리 FIFO 버퍼를 지니는 것이다. 이말은, 16450칩이 최대 9600 Baud의 속도에 맞고, 더 빠른 속도는 16550호환 칩을 요한다는 것이다. 이러한 칩들 외에도 리눅스는 PC-AT용 오리지널 UART인 8250 칩도 지원한다.

기본적인 설정시, 커널은 COM1에서 COM4까지의 표준 시리얼 포트를 검사하여, 위에 설명한대로 64애서 67까지의 minor number를 부여한다.

시리얼 포트를 적절하게 설정하고자 한다면, Ted Tso의 setserial 커맨드를 rc.serial 스크립트에 적어 넣어야 한다. 이 스크립트는 시스템 부팅시에 /etc/rc에서 소환되어 실행될 것이며, 커널 시리얼 디바이스를 설정하는데 setserial을 사용할 것이다. 전형적인 rc.serial스크립트는 다음과 같다.

     # /etc/rc.serial - serial line configuration script.
     #
     # Do wild interrupt detection
     /sbin/setserial -W /dev/cua*

     # Configure serial devices
     /sbin/setserial /dev/cua0 auto_irq skip_test autoconfig
     /sbin/setserial /dev/cua1 auto_irq skip_test autoconfig
     /sbin/setserial /dev/cua2 auto_irq skip_test autoconfig
     /sbin/setserial /dev/cua3 auto_irq skip_test autoconfig

     # Display serial device configuration
     /sbin/netserial -bg /dev/cua*

파라미터에 관한 설명은 setserial에 첨부된 문서를 참고하라.

시리얼 카드를 감지하지 못하거나 setserial -bg 커맨드가 잘못된 설정을 표시하면, 알맞은 값을 줌으로써 강제로 설정해야 한다. Rockwell 칩셋을 쓰는 내장형 모뎀을 사용하는 사람들이 이러한 문제를 경험하게 된다고 알려져 있다. 가령 실제로는 NSC 16550호환임에도 UART 칩이 NSC 16450이라고 보고된다면, 잘못 설정된 포트를 설정 커맨드로 바꿔주어야 한다.

     /sbin/setserial /dev/cua1 auto_irq skip_test autoconfig uart 16550

COM 포트, base address, 그리고 IRQ 세팅을 강제로 주는 비슷한 옵션도 존재한다. setserial(8) 매뉴얼 페이지를 읽기 바란다.

모뎀이 하드웨어 handshake를 지원한다면, 실제로 사용가능하게 설정해 놓았는지 확인해야 한다. 놀랍게도 대부분의 통신프로그램은 디폴트로 이를 켜두지 않으며, 직접 수동으로 지정해야 한다. 이것은 rc.serial 스크립트에서 stty 커맨드를 사용하는 것이 가장 좋은 방법이다.

     $ stty crtscts < /dev/cua1

하드웨어 handshake를 체크하려면 다음과 같이 하라.

     $stty -a < /dev/cua1

이는 그 디바이스에 설정된 모든 플래그의 상태를 보여준다. -crtscts처럼 처음에 -가 있는 플래그는 그것이 꺼져 있음을 의미한다.

Other Chapters

1. Introduction to Networking
2. Issues of TCP/IP Networking
3. Configuring the Networking Hardware
4. Setting up the Serial Hardware
5. Configuring TCP/IP Networking
6. Name Service and Resolver Configuration
7. Serial Line IP
8. The Point-to-Point Protocol
9. Various Network Applications
10. The Network Information System
11. The Network File System
12. Managing Taylor UUCP
13. Electronic Mail
14. Getting smail Up and Running
15. Sendmail+IDA
16. Netnews
17. C News
18. A Description of NNTP
19. Newsreader Configuration

Appendix

A. A Null Printer Cable for PLIP
B. Sample smail Configuration Files
C. The GNU General Public License