다음 이전 차례

4. Kernel printer devices

4.1 lp device

lp 디바이스를 커널에서 지원하도록 컴파일하거나 모듈로 읽어들였다고 가정할 경우 (cat /proc/devices 라고 실행하면 lp 디바이스에 대한 내용이 출력된다) 리눅스 커널에 서는 /dev/lp0, /dev/lp1, /dev/lp2중 하나 이상의 디바이스를 지원한다. 이 장치들은 동 적으로(dynamically) 할당되는 것은 아니며 각각의 디바이스는 특정한 H/W 입출력 주소에 대응한다. 즉, 당신의 프린터 하드웨어에 따라 첫 번째 프린터는 lp0 이나 lp1이 될 수 있다는 뜻이다.

둘 다 테스트해 보라.. :) plip와 lp 드라이버를 동일한 포트에서 동시에 사용할 수는 없다. 그러나, 수동 또는 커널 2.0.x에서 제공하는 (또는 1.3.x 후반부의) kerneld를 이용해서 별도의 시간동안 모듈 드라이버를 사용할 수 있다. 인터럽트(interrupt) 설정을 신중하게 한 다음 위의 방법을 이용하면, 아마도 한쪽 포트에서는 plip, 다른쪽에서는 lp를 사용할 수 있을 것 으로 추측된다.

어떤 이는 드라이버 소스를 수정하여 이렇게 했다. ; 나는 단순히 명령어 입력만으로 성공했다는 사용담을 고대하고 있다. tunelp라는 프로그램을 이용하면 루트(root)로 로긴해서 lp 디바이스의 인터럽트 사용 정도(interrupt usage), 폴링율(polling rate) 및 기타 옵션을 조절할 수 있다. 커널 2.0, 또는 1.3.x에서 커널속에 lp 드라이버가 포함될 경우, 커널은 인터럽트와 입출력 주소를 설정하기 위한 " lp = " 옵션을 이해한다. lp 드라이버가 커널에 포함되었을 때, LILO/LOADLIN 명령어를 이용해서 드라이버가 사용할 포트 주소와 인터럽트를 지정할 수 있다.

문법: lp=port0[,irq0[,port1[,irq1[,port2[,irq2]]]]]

예제: lp=0x378,0 or lp=0x278,5,0x378,7 **

이 기능을 이용할 때, 사용하길 희망하는 포든 포트를 지정해야 한다. 기본 설정값(default)는 없다. lp=0 으로 설정하면 커널의 드라이버를 사용불가(disable)로 설정할 수 있다. 커널 2.0 및 1.3.x 후반부의 커널에서 모듈로 사용될 때, insmod 명령어 옵션에 LILO/LOADLIN 처럼 입출력 주소와 인터럽트 라인을 지정할 수 있다. (또는 /etc/conf.modules에 넣어서 kerneld에서 사용하도록 지정) 매개변수(parameter)는 io=port0,port1,port2와 irq=irq0,irq1,irq2 이다. 여기에 대한 자세한 내용은 insmod의 맨페이지를 참고하라. **(나처럼) 한 번도 표준 포트 번호를 찾을 수 없었던 사람들은 위의 두 번째 예제 상황인 것이다. 나머지 포트(lp0)의 주소은 0x3bc이다. 이 포트가 일반적으로 사용하는 인터럽트에 대해서 알고 있지 않다.

4.2 직렬 포트 디바이스(Serial devices)

리눅스에서 직렬 포트에 연결된 디바이스는 /dev/ttyS1과 비슷한 형식으로 이름을 가지고 있다. stty라는 프로그램을 이용하여 직렬포트의 상태를 보거나 설정값을 변경할 수 있다; setserial을 이용하면 몇 가지 확장된 특성 제어, 非표준 포트의 IRQ 와 입출력 주소 설정을 할 수 있다. 리눅스에서의 직렬 포트에 관한 이후의 자료는 Serial-HOWTO < sunsite.unc.edu/mdw/HOWTO/Serial-HOWTO.html>.에서 찾을 수 있다.

흐름 제어(flow control)상태로 연결된 저속의 직렬 프린터를 사용할 때, 출력작업 중인 당신의 데이터 끝부분이 잘려 없어지는 현상을 발견할 수도 있다. 이런 현상의 원인은 포트에 연결된 장치가 포트를 폐쇄한 다음, 30초 이내에 버퍼안에 있는 전송을 마치지 못한 문자열(characters)을 깨끗이 지워버리는 직렬 포트의 기본적인 특징에서 찾을 수 있다. 버퍼는 4096자의 문자열을 담을 수 있으며, 연결된 프린터가 흐름제어를 사용하고, 해당 출력 소프트웨어가 직렬포트를 폐쇄한 뒤 30초 이내에 모 든 자료를 출력할 수 없을 정도로 느리다면, 버퍼에 담긴 내용중 꼬리에 해당하는 마지막 부분의 내용을 잃어버릴 것이다. ``cat file1 > /dev/ttyS?''라고 명령했을 때, 작은 파일의 경우 제대로 출력되고 큰 파일은 내용이 잘려서 출력되면, 위에서 설명 한 환경에 처해 있다고 볼 수 있다. ioctl() call를 이용하는 직렬포트의 자료구조요소인 "closing_wait"를 이용하면 30초 간격을 조절할 수 있다. Setserial은 이러한 요소를 직접 취급하지 않지만, 동일한 구조에서 다른 것을 처리할 수 있다. 따라서, closing_wait를 조절하기 위해 서 setserial을 사용하는 것이 간편하다. rc.serial에 직렬 프린터가 연결된 직렬포트에 대한 setserial 명령을 추가/삽입한다. 이렇게 하여 특정 포트의 closing_wait 와 다른 사항을 동시에 설정할 수 있다.


다음 이전 차례