SIO(4)

명칭
sio - 고속 세치기 구동비동기 시리얼 통신 인터페이스

서식
표준 포트용 : device sio0 at isa? port "IO_COM1" tty irq 4 device sio1 at isa? port "IO_COM2" tty irq 3 device sio2 at isa? port "IO_COM3" tty irq 5 device sio3 at isa? port "IO_COM4" tty irq 9

AST 호환 4 포트 멀티 포토 카드용 : options "COM_MULTIPORT" device sio4 at isa? port 0x2a0 tty flags 0x701 device sio5 at isa? port 0x2a8 tty flags 0x701 device sio6 at isa? port 0x2b0 tty flags 0x701 device sio7 at isa? port 0x2b8 tty flags 0x701 irq 12

Boca Board 호환 8 포트 멀티 포토 카드용 : options "COM_MULTIPORT" device sio4 at isa? port 0x100 tty flags 0xb05 ... device sio11 at isa? port 0x138 tty flags 0xb05 irq 12

헤이즈 ESP 카드용 : options "COM_ESP" ...

플래그 의 의미 :
0x00001
    공유 IRQ
0x00002
    FIFO 를 무효로 한다
0x00004
    AST/4 호환의 IRQ 컨트롤 레지스터를 사용하지 않는다
0x00008
    없어진 출력 세치기로부터 빨리 복구한다
0x00010
    디바이스는 시스템 콘솔이 될 수가 있다
0x00020
    디바이스는 강제적으로 시스템 콘솔이 된다
0x00040
    하위층의 IO (예를 들면, 중계차 네루 디버그)용으로 디바이스를 예약한다
0x0??00
    마스터 포트의 마이나난바
0x20000
    디바이스가 16650A 타입 (확장 FIFO)의 칩을 사용하면(자) 가정한다

마이나난바링 :
0bOLIMMMMM
callOut
Lock
Initial
MMMMMMinor

해설
sio 드라이버는, NS8250, NS16450, NS16550 그리고 NS16550A 호환의 EIA RS-232C (CCITT V. 24) 통신 인터페이스를 서포트합니다. NS8250 및 NS16450 는 1 캐릭터 분의 버퍼를 가지고 있습니다. NS16550A 는 16 캐릭터의 FIFO 입력 및 출력 버퍼를 가지고 있습니다.

각 라인의 입출력은, 이하의 baud rate 중 어느 쪽인가에 설정할 수 있습니다 : 50, 75, 110, 134.5, 150, 300, 600, 1200, 1800, 2400, 4800, 9600, 19200, 38400, 57600, 115200. 하드웨어에 따라서는, baud rate의 선택의 폭이 좁아질지도 모릅니다.

이 드라이버는,`멀티 포트'카드를 서포트하고 있습니다. 멀티 포트 카드란, 1 개(살)내지 복수의 포토의 그룹을 가져 있는 카드로, 그 그룹은, 그룹 마다 끼어들어 요구 (IRQ) 라인을 공유하고 있습니다. 다른 카드로 같은 IRQ 를 공유하는 것은 서포트되고 있지 않습니다. 많은 경우, 4 포트로 IRQ 를 1 개 공유하고 있습니다. 따라서, 8 포트의 카드로는, 4 포토의 조가 2 개 있으므로, IRQ 를 2 개 사용하는 것이 있습니다. 카드에 따라서는, 최초의 2 개의 시리얼 포트가, 포트 마다 다른 IRQ 를 가지도록 할 수 있는 것이 있습니다 (DOS PC 표준에 따라).

카드에 따라서는, 각 그룹에 대해 IRQ 컨트롤 레지스터를 가지는 것이 있습니다. 또, 이러한 레지스터에 관련하는 특별한 초기화가 필요한 카드도 있습니다. AST/4 호환의 IRQ 컨트롤 레지스터만이 서포트되고 있습니다. 카드에 따라서는, 각 그룹에 대해서 IRQ 스테이터스 레지스터를 가지고 있는 것이 있습니다. 본드라이버는, 아직 이러한 레지스터를 필요로 하지 않고, 사용해도 있지 않습니다. 그룹에 대한 컨트롤 레지스터 및 스테이터스 레지스터를 여하튼 사용할 수 있도록(듯이) 하려면 , 그 그룹내의 포트의 스크래치 레지스터 (레지스터 7)에 MAP 하지 않으면 안됩니다. 이러한 포트는 마스터 포트로 불리고 있습니다.

16550A UART 상의 FIFO 를 무효로 하기 위해서(때문에), 커널 설정 파일내의 각 device sio 행으로, flags 키워드를 사용할 수 있습니다 (서식의 항을 참조). 대부분의 경우, FIFO 를 무효로 할 필요는 없습니다.

IRQ 를 공유하는 그룹의 일부인 포트는 모두, flags 키워드를 사용 하지 않으면 안됩니다. 1 비트로 IRQ 의 공유를 지정해, 이제(벌써) 1 비트로 포트가 AST/4 호환의 초기화를 필요로 하지 않는다 화도인지를 지정합니다. 그룹의 마스터 포트에 대응한다 디바이스의 마이나난바는, 고위 바이트의 비트 필드로서 encode 됩니다. 1 개의 그룹에 속하는 포트용으로는, 동일한 마스터 포트를 지정하지 않으면 안됩니다.

마스터 포트 및 IRQ 공유 그룹에 속하지 않는 포토용으로는 irq (을)를 지정해 주지 않으면 안됩니다. 그 이외의 포트에 대해서는 지정 해서는 안됩니다.

서식의 항으로, flags 0x701 어떤의 것은, 8 번째의 포트 (sio7)가 마스터 포트이며, 또 이 포트는 공유 IRQ 및 AST/4 호환의 IRQ 컨트롤 레지스터를 가진 멀티 포트 카드상에 있다 그렇다고 하는 의미입니다.

flags 0xb05 (은)는, 12 번째의 포트 (sio11)가 마스터 포트이며, 공유 IRQ 를 가지고 있지만, 특히 IRQ 컨트롤 레지스터를 가지지 않는다 멀티 포트 카드상에 이 포토가 있다고 하는 의미입니다.

어느 쪽의 포트가 마스터 포토가 될까는, 카드의 종류에 의존합니다. 소지의 카드의 하드웨어 설명서를 조사해 주세요. IRQ 스테이터스 레지스터가 사용되는 것은 결코 없고, IRQ 컨트롤 레지스터는 AST/4 호환의 카드로 밖에 사용되지 않는 것, 또, 컨트롤 / 스테이터스 레지스터를 그룹내의 모든 포트에 대해서 MAP 하는 카드가 있는 것으로부터, 그룹내의 어느 포트에서도 마스터 포토로 해 좋은 일이 있습니다. 장래의 호환성을 위해서(때문에) IRQ 스테이터스 레지스터를 포함한 포트를 선택해 주세요. 또, 확실성을 갖게하기 위해서(때문에), 가장 상위의 번호의 포트를 선택해 주세요.

sio 드라이버로 제어되는 시리얼 포트 (은)는, 「착호」에도 「발호」에도 사용할 수가 있습니다. 각 포트에 대해, 착호디바이스와 발호디바이스가 있습니다. 발호디바이스의 마이나난바는, 대응하는 착호디바이스용의 것보다 128 만 큰 것이 되어 있습니다. 착호디바이스는 일반적인 용도의 것입니다. 착호디바이스를 오픈하는 프로세스는, 통상 캐리어를 기다리거나 발호디바이스가 사용 정지 상태가 되는 것을 기다립니다. 발호디바이스는, 착호디바이스상에서 캐리어를 기다리고 있는 프로세스로부터 포트를 빼앗는데 사용됩니다. 발호디바이스를 오픈하는 프로세스는 캐리어를 기다리지 않고, 착호프로세스상에서 캐리어 대기를 하고 있는 임의의 프로세스를 보다 깊은 휴면 상태로 합니다. 이것에 의해, 착호디바이스상에서 캐리어를 기다리고 있는 프로세스는 발호세션과 경합 하지 않게 됩니다. 발호디바이스는, 일반적인 포트로 움직여, 한편 포토를 캐리어 대기를 하지 않고 오픈할 필요가 있으면(자) 가정된 제어 프로그램으로 오용 되고 있습니다만, 그러한 사용법을 하는 것은 완전히 어리석게 생각되고 있습니다.

sio 드라이버는, 초기 상태 및 락 상태를 컨트롤 하는, 각 착호 및 발호 "데이터" 디바이스용의 제어 디바이스도 서포트합니다. 초기 상태 제어 디바이스의 마이나난바는, 대응하는 데이터 디바이스의 마이나난바보다 32 만 큰 것입니다. 또, 락 상태를 제어하는 디바이스의 마이나난바는, 대응하는 데이터 디바이스의 마이나난바보다 64 만 큰 것입니다. 데이터 디바이스의 termios 의 설정은, 처음으로 오픈한 초기 상태 제어 디바이스에 대응한 것이 카피됩니다. 과거에 오픈했을 때의 것은 계승되지 않습니다. termios 의 초기 상태를 당신이 바라도록(듯이) 프로그램 하고 싶은 것이면, 초기 상태 제어 디바이스상에서 통상의 방법으로 stty(1) (을)를 사용해 주세요.

termios 의 락 상태는, termios 상태 변경을 무효로 하는 플래그와 같은 행동을 합니다. 예를 들어, CRTSCTS 와 같은 flag 변수를 잠그려면 , 락 제어 디바이스로 stty crtscts (을)를 사용해 주세요. 통신 속도나 스페셜 캐릭터를 잠그려면 , 락 상태 제어 디바이스내의 대응하는 값에 0 이외의 값을 설정합니다.

올바르게 접속된 외부 디바이스와 통신하는 프로그램은, 잘못이 없으면 거의 어떠한 초기 상태에서도 잠그지 않고 동작합니다만, 다른 셋업을 이용하는 것이 디폴트의 초기 상태를 몇개인가 변경하거나 상태를 잠그거나 하는데 편리한 일이 있습니다. 특히, 접속된 디바이스를 적절한 것으로 하기 위해서(때문에)는, POSIX 표준이 아닌 플래그의 초기 상태를 설정해야 합니다. 또, 경우에 따라서는 버그가 있을 것 같은 프로그램이 POSIX 표준이 아니다 플래그를 고쳐 써 버리지 않게 초기 상태를 잠글 필요가 있을지도 모릅니다. 예를 들면, CRTSCTS 플래그는, RTS/CTS 핸드 쉐이크를 언제라도 서포트한다 디바이스에서는 락 해야 하고, RTS/CTS 핸드 쉐이크를 일절 서포트하지 않는 디바이스에서는 락 해야 하는 것은 없습니다. CLOCAL 플래그는 캐리어를 서포트하지 않는 디바이스에서는 락 해야 합니다. HUPCL 플래그는, 어떠한 이유로 행업 시키고 싶지 않다면 락 해야 하지는 않습니다. 일반적으로, 적절하지 않은 상태로 무엇인가를 잠그면(자) 매우 좋지 않는 것이 일어납니다. 또, 2 개(살) 이상의 설정을 서포트하는 디바이스는 락 해야 하지는 않습니다. 착호포트의 CLOCAL 플래그는, logins 프로그램이 있는 종의 보안 홀을 만들어 버리는 것을 막기 위해서(때문에), 잠그지 않고 두어야 합니다. 다만, 착호포트가 다른 용도에 사용되고 있는 경우에, 착호포트가 락 되지 않게 하려면 , getty 를 이용할 필요가 있습니다.

관련 파일
/dev/ttyd?
    착호포트용
/dev/ttyid?
/dev/ttyld?
    대응하는 착호초기 상태 제어 디바이스 및 락 상태 제어 디바이스

/dev/cuaa?
    발호포트용
/dev/cuaia?
/dev/cuala?
    대응하는 발호초기 상태 제어 디바이스 및 락 상태 제어 디바이스

/etc/rc.serial
    초기 상태 제어 디바이스 및 락 상태 제어 디바이스의 설정예

디바이스 번호는,[0-9a-v] 라고 한다 집합으로부터 되어 있으므로, 10 포트 이상의 경우도 서포트할 수 있습니다.

진단

sio%d: silo overflow. 인터럽트 처리기내에서 문제가 있었습니다.

sio%d: interrupt-level buffer overflow. 드라이버의 보텀 하프에서의 문제입니다.

sio%d: tty-level buffer overflow. 어플리케이션측에서의 문제입니다. 주어진 모듈의 처리 속도보다 빠르게 입력이 도착해 버려, 몇개인가 데이터를 잃어 버렸습니다.

관련 항목
stty(1), termios(4), tty(4), comcontrol(8)

역사
sio 드라이버는, HP9000/300 dca(4) 드라이버로부터 태어나고 있어 현재, 개발중 입니다.

버그
늦은 시스템으로 baud rate를 높게 하거나 포트가 너무 많거나 혹은 부하의 높은 시스템으로 crtsct 를 사용할 수 없을 때에는, 데이터가 없어지는 일이 있습니다. NS16550A 의 것을 사용하면(자), 시스템의 부하를 내려 데이터가 없어진다 의를 막을 수가 있습니다.

단순한 NS16550 를 사용하지 말아 주세요. 이것은 초기의 칩 실장이며, 기능하지 않는 FIFO 하드웨어를 탑재하고 있습니다.

다양한 시리얼 포트의 장소를 정의하는 정수치는, DOS (으)로부터 계승한 것입니다. 보시는 바와 같이, 16 진수 표기의 주소를 바뀌어에 사용할 수가 있고, 또, 알기 쉬움으로부터 말해도 그렇게 해야 하겠지요.

주의로서 AST/4 를 사용할 경우에는, 딥 스위치를 끼어들어 공유를 사용하도록(듯이)는 설정 하지 말아줘 주세요. AST/4 와 같이 끼어들어 공유를 사용할 수 있는 것은, 복수의 AST/4 카드가 같은 시스템에 설치되어 있을 때 뿐입니다. sio 드라이버는, 하나의 IRQ 에 복수의 AST/4 카드가 설치되어 있는 것 같은 경우는 서포트하고 있지 않습니다.

서식의 항의 예는 꽤 vender에 의존한 것입니다.