다음 이전 차례

9. 모뎀과 직렬 모뎀 설정

모뎀이 제대로 설정됐는지 확인하고 어떤 직렬 포트로 연결되었는지 알아야 한다.

다음과 같다:-

포트가 모두 네개인지도 알아두는 게 좋다. 표준 PC 설정에서는 com1과 cpm3이 IRQ4를 같이 쓰고 com2와 com4가 IRQ3을 나눠쓴다.

표준 직렬 포트에서 모뎀과 IRQ를 나누어쓰는 장치가 있을 경우에 문제가 있을 수 있다. 모뎀 직렬 포트가 다른 것과 나눠쓰지 않는 IRQ를 갖고 있는지 확인해야만 한다. 많은 모뎀 직렬 카드(그리고 질좋은 머더보드 직렬포트)는 직렬 포트의 IRQ를 옮길 수 있게 해준다.

리눅스 커널 2를 실행할 경우, cat /proc/interrupts라고 입력하면 사용중인 IRQ를 점검할 수 있다. 츨력은 다음과 같다.


 0:    6766283   timer
 1:      91545   keyboard
 2:          0   cascade
 4:     156944 + serial
 7:     101764   WD8013
10:     134365 + BusLogic BT-958
13:          1   math error
15:    3671702 + serial

위에서 보면 IRQ4에 직렬포트가 하나 있고(마우스다) IRQ15에 하나있다(인터넷 PPP 연결에 기반한 영구모뎀이다). (com2, IRQ3에 직렬포트가 하나 있고, com4, IRQ14에도 하나 있지만, 사용하지 않으므로 보이지 않는다.)

경고 - IRQ를 가지고 놀 때는 뭘 하고 있는지 알고 있어야 한다! 컴퓨터를 뜯어내고 카드를 꺼내서 점퍼를 갖고 놀면 끝나는 게 아니며 어떤 IRQ에 무엇이 있는지 알아야 한다. 내 경우 모두 SCSI 기반 PC라서 보통 IRQ14와 IRQ15를 쓰는 마더보드 위의 IDE 인터페이스를 사용불능으로 만들 수 있다.

또한 PC가 다른 운영체제로 부팅할 경우에 IRQ를 옮겨 놓으면 운영체제가 정확히 부팅되지 않거나 -아예 부팅하지 못할 수도 있다는 점을 기억해야 한다.

비표준 IRQ에 직렬 포트를 옮겨 놓을 경우, 각 포트가 쓰는 IRQ가 뭔지 리눅스에 알려줘야 한다. 이것은 setserial을 써서 알려줄 수 있고 rc.local 또는 시스템V 초기화의 일부로서 부팅과정에서 불려지는 rc.local 또는 rc.serial 에서 잘 알려줄 수 있다. 위에서 말한 기계의 경우는 아래의 명령을 쓰면 된다.


/bin/setserial -b /dev/t
tyS2 IRQ 11
/bin/setserial -b /dev/ttyS3 IRQ 15

하지만, kerneld 가 요구할 때만 동적으로 장전되는 직렬 모듈을 쓸 경우라면 부팅할 때 한번에 IRQ 등등을 설정할 수 없고 그 값을 잃어버리게 된다. 왜냐하면 직렬 모듈을 내려놓을 때 리눅스는 특별한 설정을 잊기 때문이다.

따라서, 필요할 때 직렬 모듈을 장전하는 경우, 모듈을 장전할 때마다 IRQ를 다시 실정해줘야 한다.

9.1 직렬 포트와 속도 능력에 대한 주의

고속 (외장) 모뎀 (14,400 Baud 또는 이상)을 쓸 경우, 고속 모뎀이 내는 출력 특히 데이터를 압축할 때 내는 출력을 다룰 수 있는 능력이 직렬 포트에 있어야 한다.

이것은 16550(A)같은 최신 범용 비동기 수신 전달자(UART: Universal Asynchronous Receiver Transmitter)이 필요하다. 구형 기계(나 구형 직렬 카드)를 쓸 경우, 직렬 포트가 8250 UART만 갖고 있을 수도 있으며, 이것은 고속 모뎀을 사용할 때 심각한 문제를 일으킬 수 있다.

다음 명령을 쓰면

setserial -a /dev/ttySx

리눅스는 갖고 있는 UART의 형을 보여준다. 16550A 형 UART를 갖고 있지 않은 경우 새 직렬 카드를 사야 한다(50불 이하에 구할 수 있다.). 새 카드를 살 때는 IRQ를 임의로 옮길 수 있는게 꼭 확인하라!

주의: 16550 UART 칩의 첫 버전에 오류가 있었다. 이 오류는 금방 찾아졌고 고친 칩이 다시 나왔다 - 이것이 16550A UART다. 비교적 적은 주소이긴 하지만 유통되었다. 갖고 있을 가능성은 매우 적지만 특별히 직렬 카드에 무슨 문제가 있을 경우 16550A라고 나오는지 살펴본다.

9.2 직렬 포트 이름

전통적으로 리눅스는 전화해 나가는 쪽을 cuaX장치에 쓰고 전화해 들어오는 쪽을 ttySx장치로 쓴다.

이것이 필요했던 커널 코드가 버전 2.0.x에서 바꿨으므로 전화받는 쪽이나 나가는 쪽이나 모두 ttySx로 쓸 수 있다. 다음에 나올 커널 버젼에서는 cuaX장치 이름은 없어지는 게 낫다고 생각하고 있다.

9.3 모뎀 설정

PPP를 쓸면 모뎀을 정확히 설정할 필요가 있다 - 그럴려면 모뎀 설명서를 읽어라! 대부분의 모뎀은 PPP에 필요한 선택사항이 선택되어 있는 공장 기본 설정 상태로 출시된다.정의해야 되는 최소한의 설정은:-

표준 헤이스 명령에서 조사해야 하는 설정은 다음과 같다:-

다양한 모뎀 제작사와 모델의 서로 다른 모뎀 설정을 제공해주는 곳은 Modem setup information이다. 설정에 대해 도와줄 것이다.

조사하는 동안 모뎀과 컴퓨터 사이의 직렬 인터페이스가 어떻게 동작하는지도 도움이 된다. 대부분의 최신 모뎀은 자신과 상대방 모뎀이 모두 다룰 수 있는 최대 속도로 속도를 바꿀 수 있는 전화 회선 인터페이스를 허용하는 한편 일정 속도로 실행하는 것을 허용한다.

이것은 분할 속도 조정으로 알려져 있다. 모뎀이 이를 지원할 경우 모뎀의 직렬 인터페이스를 최고속도로 고정시켜놓을 수 있다(보통 115,200 baud지만 14,400 baud 모뎀의 경우 38,400 baud일 것이다.).

통신 프로그램(minicom이나 seyon같은)을 써서 모뎀 설정을 알아 보고 PPP에 요구되는 것으로 설정한다. 대부분의 모뎀은 AT& V 명령을 주면 현재 설정값을 보여주지만, 모뎀 설명서를 읽어보는 것이 좋다.

설정하다가 정말 돌아버릴 것 같으면 (보통) AT&F 명령을 주면 제정신이 될 수 있다. - 공장 설정값으로 되돌려 준다. (내가 써본 대부분의 모뎀은 공장 기본값에 PPP에 필요한 모든 게 설정되어 있었다. - 하지만 점검해봐야 한다)

써야할 모뎀 설정 명령을 다 골라냈으면, 결정을 해야 한다: 모뎀의 이 설정값을 적당한 AT 명령으로 불러낼 수 있도록 비휘발설 메모리에 저장할 수 있다. 아니면 PPP 전화걸기 과정의 일부로서 모뎀에 올바른 설정을 건네줄 수 있다.

모뎀을 리눅스에서 인터넷 서비스 업체나 공용 제공측에 전화걸기 위해서만 쓴다면, 비 휘발성 램에 저장하는 것이 가장 간단하다.

그렇지 않고, 모뎀이 여러가지 다른 응용프로그램과 운영체제에서 쓰인다면 모뎀이 전화걸 때마다 정확한 상태에 있을 수 있도록 전화걸 때마다 이 정보를 건네주는 것이 가장 안전하다.(모뎀이 비휘발성 램의 내용을 잃어버릴 경우에 대비해 모뎀 설정을 기억시키는 추가이익을 얻을 수 있으며, 그런 경우는 실제 일어난다)

9.4 직렬 흐름 제어

데이타가 직렬 통신 선 사이를 왔다갔다할 때, 컴퓨터가 다룰 수 있는 것보다 더 빨리 도착하는 경우가 있다.( 컴퓨터는 다른 일을 하느라고 바쁠 수 있다. - 리눅스는 다중 사용자, 다중 작업 운영체제라는 점을 생각해보라) 데이타를 잃어버리지 않으려면(데이타가 입력 버퍼를 넘지 않았는데 잃어버리지 않으려면) 데이타 흐름을 제어하는 몇가지 방법이 필요하다.

직렬 회선에서 이것을 하는 데는 두가지 방법이 있다.

터미날 (문자) 연결에서 후자가 괜찮기는 하지만, PPP 링크에서 쓰는 데이타는 모두 8비트다. - 따라서 데이타의 어딘가에 CTRL S, CTRL Q에 해당하는 코드를 가진 데이타가 전달될 가능성이 매우 크다. 따라서, 모뎀이 소프트웨어 흐름제어를 사용하도록 설정되어 있다면 엉네트워크가 된다.

PPP를 쓰는 고속 연결의 경우(8비트 데이타를 쓰는) 하드웨어 흐름제어가 필수적이고, 이 때문에 반드시 하드웨어 흐름제어를 써야 한다.

9.5 모뎀 전화걸기 시험

직렬 포트와 모뎀 설정을 정리해둔 상태에서 인터넷 서비스 업체에게 전화하고 연결해 봄으로써 이 설정이 진짜 동작하는지 확인해 보는 것이 좋다.

단말 통신 일체(minicom같은)를 써서, PPP에 필요한 모뎀 초기화를 설정한 다음, 원하는 PPP서버에 전화해 들어가 PPP 세션을 연다.

(주의: 이 단계에서는 PPP 연결을 만들지는 않는다. - 단지 정확한 전화번호를 가지고 있는지, 또 로긴하고 PPP를 시작하기 위해 서버가 보내는 것이 정확히 무엇인지 알아내기 위해서 전화하는 것이다.)

이 과정 중에, 전체 로긴 과정을 갈무리(파일로 저장)하거나 조심스럽게 (굉장히 조심스럽게 ) 사용자 이름과 비밀번호를 입력해야 한다고 알려주기 위해 서버가 어떤 명령행을 보내주는지 베껴놓아야 한다(그리고 PPP 연결을 구축하기 위해 필요한 다른 명령도)

서버가 PAP를 쓸 경우, 로긴 명령행을 는 않지만, 대신 연결 제어 프로토콜(의 문자표현)이 화면에 나타나는 것을 보게 될 것이다(쓰레기처럼 보인다).

몇가지 경고:-

두번 이상 전화해 보는 것이 좋다 - 어떤 서버는 로긴할 때마다 (예를 들어 로긴 시간) 명령행을 바꾼다. 전화해 들어갈 때 리눅스가 매번 알아내야 하는 필수적인 명령행은 다음과 같다:-

서버에서 PPP를 시작할 때 명령을 줘야 한다면, 일단 로긴한 다음에 ppp를 시작한다고 입력할 수 있는 명령행을 알아두어야 한다.

로긴한 다음 자동적으로 서버에서 PPP를 시작하는 경우 화면 상에 쓰레기를 볼 수 있다 - 이것이 PPP 서버에서 내 기계로 PPP 연결을 시작하고 설정할 수 있도록 정보를 보내는 것이다.

다음과 같이 보일 것이다:-


~y}#.!}!}!} }8}!}$}%U}"}&} } } } }%}& ...}'}"}(}"} .~~y}

(계속 보내도록 냅둔다.!)

몇몇 시스템에서 PPP는 명백히 서버에서 시작할 수도 있다. 이것은 서버가 PPP 로긴가 쉘 로긴에 같은 사용자 이름과 비밀번호 쌍을 쓰도록 설정되었기 때문이다. 이런 경우 로긴한 다음 이 명령을 주어야 한다. 다시 PPP의 서버가 쪽에서 연결이 시작할 때 쓰레기값을 볼 수 있다.

연결한 다음에 (로긴하고 필요하다면 PPP 서버를 시작시킨 다음에) 이것이 즉시 나타나지 않는다면, 실행키를 눌러 PPP 서버가 시작하는지 보고...

이 시점에서 모뎀을 끊는다. (보통 모뎀이 OK라고 응답할 때까지 +++를 빨리 입력한 다음 ATHO 명령을 주면 된다.)

모뎀을 작동시킬 수 없다면, 모뎀 설명서를 읽고 통신 프로그램의 man 페이지와 Serial HOWTO를 읽는다! 일단 해본 다음에 위의 것을 다시 해보라.


다음 이전 차례